我有一个父类,它作为成员包含指向与自身类型相同的对象的指针数组。我有另一个派生自父类的类。我希望派生类使用指向它自己的对象(不是父类)的指针数组。派生类调用存储在指针数组中的那些对象的方法;它调用在派生类和基类中定义和实现的两个方法。下面的代码显然不能编译,因为parent不包含成员z(在derived :: doX()中)。在访问z之前,我可以使用dyanamic_cast(p [i])。但是在运行时,我必须在b中的每个方法上都这样做。 如果我在派生类中隐藏“p”(通过在对象构造过程中强制转换p),我基本上得到了两个指针p数组,但是,我希望所有方法对同一个对象(驻留在p中)进行操作。我尝试过模板,但遇到了递归问题。任何想法如何解决这个问题?C++自引用对象和继承
#include <iostream>
#include <stdlib.h>
using namespace std;
class parent{
protected:
parent** p;
int num;
int x;
public:
parent(int _num, parent** _ps);
virtual void doX();
virtual void print();
};
class derived : public parent {
protected:
//derived** p;
int z;
public:
derived(int _num, parent** _ps) : parent(_num, _ps){};
virtual void doX();
virtual void print();
};
void parent::doX(){
for(int i=0;i<num;i++){
p[i]->x = 1;
}
}
void parent::print(){ cout << "x " << x << endl;
}
parent::parent(int _num, parent** _ds){
num=_num;
p = _ds;
}
void derived::doX(){
for(int i=0;i<num;i++){
p[i]->z = 2;
}
parent::doX();
}
void derived::print(){
cout << "x " << x << endl;
cout << "z " << z << endl;
}
int main(){
const int NUM = 2;
parent** ps = (parent**)malloc(sizeof(parent)*NUM);
for(int i=0; i< NUM; i++){
ps[i] = new derived(NUM, ps);
}
ps[0]->doX();
ps[0]->print();
ps[0]->print();
}
parent ** ps =(parent **)malloc(sizeof(parent *)* NUM); – cppguy 2013-04-23 00:43:22
更重要的是,不要使用malloc ...只是有一个像这样的成员静态std :: vector p; –
cppguy
2013-04-23 00:47:21
并记住C++不是垃圾收集语言......对于每个malloc都必须有一个免费的,因为每个新的都必须删除 – cppguy 2013-04-23 00:50:07