![]() |
1
4
默认情况下,C++中没有这样的工作方式——你想要一个菱形继承模式,但是在C++中你得到了独立的根:所以BasicClassA和BaseClassB每个都有自己的BaseCasa(VTABLE和实例变量)。 你可能想用 Virtual Inheritance . 对于非虚拟继承的更清晰的概念:
这将产生输出:
这个例子展示了虚拟继承,以及你想要的混合行为。
输出:
注意:C和B的构造函数在设置m_a时没有发言权,m_a是D()构造函数初始化列表的控制器。 编辑: 将虚拟应用于代码:
|
![]() |
2
1
BaseClassA有5个纯虚函数。即使只有一个纯虚函数的类也是一个“抽象类”。纯虚拟函数(简而言之)的目的是禁止创建抽象类的对象。 为了实例化BaseClassB,它需要定义您在BaseClassA中声明为纯虚拟的所有5个函数。(如果没有这些定义,BaseClassB也会变得抽象,因此您不能从中创建对象)。 |
![]() |
3
1
是 纯虚拟 .
错误信息非常清楚:能够实例化
另外,请注意您对
不同于
所以这个方法仍然需要实现
|
![]() |
4
0
在函数中添加“=0”意味着它们是 纯粹地 虚拟的,必须在子类中实现。这显然不是你想要的。如果从基类中具有实现的函数中删除“=0”,则它应该按预期工作。 |
![]() |
timurichk · 我的类不重写抽象方法compareTo 7 年前 |
![]() |
Steffn · angular 4中抽象类的动态多提供程序 7 年前 |
![]() |
Fabio Piunti · Abstract类子类的调用方法 7 年前 |
![]() |
Sunny Deshmukh · 可以从Java中的多个抽象类继承吗? 7 年前 |
![]() |
Felix · 初始化抽象类的一般变量 7 年前 |
![]() |
wheeeee · Scala对象扩展了抽象类/特征,访问伴随类字段 7 年前 |