c ++继承的非常简单的例子:
#include <iostream>
using namespace std;
class A{
public :
virtual void print(A a){
cout<<"a"<<endl;
}
};
class B : public A {
public :
virtual void print(A a){
cout<<"a2"<<endl;
}
virtual void print(B b){
cout<<"b"<<endl;
}
};
int main(){
B b;
A &a = b;
a.print(b);
return 0;
}
为什么输出a2?
我原以为这与以下内容有效:
b.print(b)
谢谢!
答案 0 :(得分:2)
由于您的引用是A
类型,因此在决定调用内容时,只会考虑A
方法。由于print(A)
是虚拟的,因此实际上会调用与B
中的签名匹配的A
方法。
如果这令人困惑,请考虑您是否已将方法foo
添加到B
。如果您尝试拨打a.foo()
会怎么样?它会失败,因为A
类型的对象没有foo
方法。