用方法覆盖的C 继承

c++ inheritance with method overriding

本文关键字:继承 覆盖 方法      更新时间:2023-10-16

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)是虚拟的,因此实际上将调用与A签名的B的方法。

如果这令人困惑,请考虑是否已向B添加了foo方法。如果您尝试致电a.foo()会发生什么?它将失败,因为类型A的对象没有foo方法。