为什么从指向基类(A 类)的指针调用 print() 有效,而从子类对象(C 类)调用 print() 无效?
语句 1:将给出“print A”作为输出,因为 A::print() 是一个虚函数,它将调用 C 类的 print() 函数,该函数继承自 A::print()。这将证明 C 类确实具有 print() 函数
声明 2:这将导致编译器错误,因为 B::print(int x) 将隐藏 A::print()。
声明3:会报编译错误。为什么?
可能是因为 print() 仍然隐藏在 Class C 中,因为 Class C 也继承了 B::print(int x)。如果是这种情况,那么为什么从 a->print() 调用有效?
另一个问题:是否有任何规则指定 B::print(int x) 将 A::print() 隐藏在子类中?
class A{
public:
virtual void print();
};
void A::print(){
cout<<"print A\n";
}
class B:public A{
public:
void print(int x);
};
void B::print(int x){
cout<<"print B " << x <<"\n";
}
class C:public B{
};
void funca(A *a){
a->print();//Statement 1
}
void funcb(B *b){
//b->print(); Statement 2
}
void funcc(C *c){
//c->print(); Statement 3
}
int main(){
C d;
funca(&d);
funcb(&d);
funcc(&d);
}