虚拟函数继承
Virtual function inheritance
我对继承方法的虚拟属性感到困惑。
假设我们有四个班:A班、B班、C班和D班。类通过以下方式继承:A->B->C->D,其中A是基类。
到目前为止,我确信这一点:在基类(类a)中以virtual开始类方法声明,使该方法对于从基类派生的所有类都是虚拟的,包括派生类中的派生类。(B和C类方法被确定为虚拟的)。
混乱就在这里。如果在基类A中没有任何虚拟成员,该怎么办。相反,假设类B声明一个方法是虚拟的。我假设,对于属于继承链的所有派生类(C和D类),此更改将使函数成为虚拟的。所以从逻辑上讲,B代表C和D,是它们的一种"基类",对吧?还是我错了?
你是对的。
我认为在这种情况下,最好的解决方案是尝试:
#include <iostream>
using namespace std;
class A {
public:
void print(){ cout << "print A" << endl; };
};
class B: public A {
public:
virtual void print(){ cout << "print B" << endl; };
};
class C: public B {
public:
void print(){ cout << "print C" << endl; };
};
int main()
{
A *a = new C();
B *b = new C();
a->print(); // will print 'print A'
b->print(); // will print 'print C'
return 1;
}
你完全正确。孩子继承了祖先的财产。基类不能继承子级所拥有的内容(例如新函数或变量)。虚拟函数只是子类可以重写的函数,如果该子类更改了虚拟函数的实现,从而不调用基虚拟函数。
A是B、C、D的基类。B是C、D的基类,C也是D的基类。
当然可以。虚拟方法是可选的,所以你在类A或B中声明它并不重要。如果你不想在类A中使用该方法,那么只需在类B中声明即可。
相关文章:
- 继承函数的重载解析
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 派生类调用使用非继承成员的继承函数
- 继承函数是否适用于 C++ 中的基类元素或派生类元素?
- 在链表中的某个点插入时出现问题,C++中的继承函数
- std :: is_same-来自integral_constant的继承函数的用例
- 如何将同名的继承函数视为重载函数
- 使用子函数的继承函数
- 执行覆盖的继承函数
- 相对于更专业的继承函数,模板更喜欢子类函数
- C++:继承函数并重新定义它们
- C++ 继承函数指针,可与派生方法一起使用
- 不同对象的向量,对象具有非继承函数
- C++多级继承函数调用
- 基类指向派生类继承函数调用的指针
- C++继承函数覆盖
- 派生类是否C++必须在头文件中包含继承函数/成员的定义
- 继承函数中的参数消失
- C++通过继承函数实现继承的抽象函数
- 构造函数和继承函数 c++