使用方法重写的c ++继承

时间:2014-01-22 04:13:06

标签: c++ inheritance overloading

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) 谢谢!

1 个答案:

答案 0 :(得分:2)

由于您的引用是A类型,因此在决定调用内容时,只会考虑A方法。由于print(A)是虚拟的,因此实际上会调用与B中的签名匹配的A方法。

如果这令人困惑,请考虑您是否已将方法foo添加到B。如果您尝试拨打a.foo()会怎么样?它会失败,因为A类型的对象没有foo方法。