我有一个抽象基类和2个不同的类,它们从基类实现虚函数.
我把它们放在一个数组中,对于"derived1"类,这个有效.但是,如果我创建一个具有一些额外私有变量的"derived2"类数组,则代码将在运行时编译但出现错误.
#include <iostream>
class base{
protected:
int inner_a;
int inner_b;
public:
void setInner(int a,int b){inner_a=a;inner_b=b;};
virtual int doStuff()=0;
};
class derived1: public base{
public:
virtual int doStuff();
};
class derived2: public base{
private:
int tmpVar;//works if I remove
public:
int doStuff();
};
int derived2::doStuff(){
return inner_a-inner_b;
}
int derived1::doStuff(){
return inner_a+inner_b;
}
int main(){
base *classAry1 = new derived1[3];//this works
base *classAry2 = new derived2[2];//derived2 has extra private variables
classAry1[0].setInner(1,3);
classAry1[1].setInner(10,7);
std::cout <<classAry1[0].doStuff() <<std::endl;;
std::cout <<classAry1[1].doStuff() <<std::endl;
classAry2[0].setInner(1,3);
classAry2[1].setInner(10,7); …Run Code Online (Sandbox Code Playgroud) 我正在向另一个使用该指针推送数据的函数传递一个向量指针:
void foo(vector<pair<int,int>> * vp){
vp->push_back(pair<int,int>(1,1)); //causes segfault
}
void bar(vector<pair<int,int>> *vp = NULL){
foo(vp);
}
Run Code Online (Sandbox Code Playgroud)
push_back会导致段错误.
假设我有一个unsigned char指针(uchar*从现在开始)到T不同类型的数组的开头uchar.知道这个数组的大小并且它是连续的(使用创建malloc),是否可以在不知道类型的情况下将其复制到另一个数组T?如何以字节为单位访问它?
谢谢
struct Test
{
typedef unsigned (Test::*MethodPtr)();
unsigned testMethod() {}
};
typedef void (*ThreadPtr)(void *);
ThreadPtr threadPtr = reinterpret_cast<ThreadPtr>(&Test::testMethod);
Run Code Online (Sandbox Code Playgroud)
我想将一个线程发送到特定对象的类方法中.我使用方法指针作为线程入口点,并将对象指针作为唯一参数传递.这可行,因为我的结构中没有任何虚拟声明.
我的问题与reinterpret_cast操作有关.g ++允许这样,Visual Studio 2008则不然.我通过将方法指针值直接memcp到threadPtr变量来解决VS2008的限制.生成的代码工作正常但是这应该是一个简单的操作是一个非常可怕的解决方法.谁能提供更优雅的替代品?
谢谢
-G
编辑:
为了澄清,gcc给出的警告如下:
methodPtrTest.cpp:14: warning: converting from ‘void (Test::*)()’ to ‘void (*)(void*)’
Run Code Online (Sandbox Code Playgroud) 我对这段代码感到困惑:
ipPtr = ipPtr + 3; // 5
cout << *ipPtr << endl;
Run Code Online (Sandbox Code Playgroud)
为什么cout不是5而是一些随机大数?请有人向我解释.正如我的理解,我认为cout << *ipPtr << endl;是指出了*ipPtr上述情况.我对吗 ?
#include <iostream>
void main(){
using namespace std;
int iaArray[] = {1,2,3,4,5};
int* ipPtr = 0;
ipPtr = &(iaArray[1]);
cout << *ipPtr << endl;//2
++ipPtr;
cout << *ipPtr << endl;//3
ipPtr = ipPtr + 3; //not 5 but random number.
cout << *ipPtr << endl;
}
Run Code Online (Sandbox Code Playgroud) 我已经习惯了c ++一段时间了,而来自java的一个最混乱的方面就是内存管理.例如,假设我有一个方法,并且在该方法中我声明了一个指向对象的指针,我想使用get方法将该指针设置为另一个对象的属性:
SubObject *mySubObject = anotherObject.getSubObject();
Run Code Online (Sandbox Code Playgroud)
我的问题是,当方法结束时,该指针会发生什么?我应该在结束之前使用以下内容吗?
delete mySubObject;
Run Code Online (Sandbox Code Playgroud)
如果我不删除它怎么办?它会一直持续到整个程序结束吗?
我已经尝试使用谷歌搜索c ++的基本内存管理教程,但我通常会发现更高级的东西,这些都是我的头脑,任何参考都会被认可.
如何在不使用比较运算符"isEqualToString"的情况下比较目标C中的两个指针?如果有任何替代请帮助.
谢谢.
我正在尝试在C中实现一个链表,我想将头节点存储在一个单独的结构中.但是,每当我添加另一个节点时,似乎都会以某种方式重新分配头节点.
#include <stdio.h>
#include <stdlib.h>
struct BC_node {
struct BC_node *next;
void *data;
};
struct BC_list {
struct BC_node *head;
struct BC_node *tail;
};
void
BC_list_push(struct BC_list *list, void *data)
{
struct BC_node *node = calloc(1, sizeof(struct BC_node));
if (list->head != NULL)
printf("head: %d\n", *((int *) (list->head)->data));
node->next = NULL;
node->data = data;
if (list->head == NULL) {
printf("head is null.\n");
list->head = node;
}
if (list->tail != NULL) {
(list->tail)->next = node;
}
list->tail = node;
printf("head: %d\n", *((int …Run Code Online (Sandbox Code Playgroud) 我有一些课:
@interface SearchBase : NSObject
{
NSString *words;
NSMutableArray *resultsTitles;
NSMutableArray *resultsUrl;
NSMutableArray *flag;
}
@property (copy, nonatomic) NSString *words;
- (id) getTitleAtIndex:(int *)index;
- (id) getUrlAtIndex:(int *)index;
- (id) getFlagAtIndex:(int *)index;
@end
@implementation SearchBase
- (id) initWithQuery:(NSString *)words
{
if (self = [super init])
{
self.words = words;
}
return self;
}
- (id) getTitleAtIndex:(int *)index
{
return [resultsTitles objectAtIndex:index];
}
- (id) getUrlAtIndex:(int *)index
{
return [resultsUrl objectAtIndex:index];
}
- (id) getFlagAtIndex:(int *)index
{
return [flag objectAtIndex:index];
} …Run Code Online (Sandbox Code Playgroud) 我使用C中的指针编写了以下代码用于字符串连接
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void strCat(char *str1,char *str2);
int main(void)
{
char str1[] = "Rohit";
char str2[] = "Kumar";
strCat(str1,str2);
return 0;
}
void strCat(char *str1,char *str2)
{
int i;
char *start;
start = str1;
printf("%s",str1);
while(*str1++ != '\0')
continue;
while(*str2 != '\0')
*str1++ = *str2++;
*str1 = '\0';
printf("%s\n",str1);
}
Run Code Online (Sandbox Code Playgroud)
为什么输出是Rohit(null).请帮忙!!
pointers ×10
c++ ×6
arrays ×2
c ×2
objective-c ×2
g++ ×1
ios4 ×1
linked-list ×1
memory ×1
methods ×1
polymorphism ×1
reference ×1
struct ×1
vector ×1