用方法覆盖的C 继承
c++ inheritance with method overriding
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
方法。
相关文章:
- 继承、覆盖和虚函数,以避免重复代码
- 循环依赖,在继承类的情况下使用覆盖方法
- C++:覆盖类继承?
- 有没有办法调用基类函数,该函数在使用私有继承的派生类中被覆盖?
- 关于继承和覆盖的问题
- 使用父类方法覆盖的多重继承
- C++继承 - 覆盖功能,包括使用 "::" s、.h 文件和.cpp文件
- 三重继承,没有唯一的最终覆盖者
- 多重继承:调用所有覆盖的函数
- 在多级继承中重写,中间派生类未覆盖函数
- C 从同一基本模板类覆盖功能,具有多个继承模棱两可的函数调用
- 继承覆盖
- 执行覆盖的继承函数
- 我们可以覆盖继承类中的纯虚函数吗?
- 覆盖和继承
- 需要有关多个继承和可选功能覆盖C 的建议
- C 多重继承,虚拟方法覆盖问题和协变量返回类型
- 用方法覆盖的C 继承
- 是否可以从 C++11 智能指针继承并覆盖相关运算符?
- C++继承函数覆盖