如何从实例的成员函数之一访问派生类的数据,该成员函数接收指向基类的指针?我有:
class Base{
public:
virtual void compare(Base*)=0;
};
class A: public Base{
int x;
public:
A();
void compare(Base*);
};
class B: public Base{
char c;
public:
void compare(Base*);
};
A::A(){
x = 1;
};
void A::compare(Base *p){
cout<< "A's x is " << x << "\n";
cout<< "Argument's x is " << p->x;
};
void B::compare(Base* p){
cout<< "B's compare() is running\n";
};
int main(const int argc, const char *argv[]){
A a1 = A();
A a2 = A();
B b = B();
a1.compare(&a2);
}
由于
Base
没有数据成员x
,因此无法使用。在我撰写本文时,我想到通过指向Base接口(interface)类的指针访问派生类的数据成员不是一个好主意。在我的问题中,我需要将不同的派生类与
Base
类提供的相同接口(interface)进行比较。 Base
的界面必须包含compare(Base*)
成员函数。比较实例的方式可能在派生的分类之间有所不同。比较的逻辑显然应该在那些类的成员函数中编码。我应该如何实现该模型? 最佳答案
除非您的派生类共享一些您想通过基类进行比较的通用数据,否则没有简单的解决方案。
例如,除非您的派生类数量很少,否则在每个派生类中进行动态转换都是多余,缓慢且容易出错的。
较大类型的层次结构的一种解决方案是double dispatch。
关于c++ - 将指向基类的指针传递给C++中的派生类的成员函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1903962/