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)
谢谢!
最佳答案
因为您的引用是 A
类型,所以在决定调用什么时只会考虑 A
方法。由于 print(A)
是虚拟的,它实际上会调用 B
中与 A
中的签名相匹配的方法。
如果这令人困惑,请考虑您是否已将方法 foo
添加到 B
。如果您尝试调用 a.foo()
会发生什么?它会失败,因为 A
类型的对象没有 foo
方法。
关于具有方法重写的 C++ 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21274013/