【发布时间】:2009-12-14 22:28:57
【问题描述】:
如何从其实例的一个成员函数中访问派生类的数据,该成员函数接收指向基类的指针?我有:
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 接口类的指针来访问派生类的数据成员并不是一个好主意。
在我的问题中,我需要将不同的派生类与Base 类提供的相同接口进行比较。 Base 的接口必须包含compare(Base*) 成员函数。比较实例的方式可能因派生类而异。比较的逻辑显然应该在这些类的成员函数中编码。我应该如何实现这个模型?
【问题讨论】:
-
如果您可以比较“A”和“B”,结果会是什么。比如说,以某个复杂类作为其实例的“C”呢?
标签: c++ inheritance interface