![]() |
1
5
Class2继承自抽象类(Interface2),但没有实现纯虚方法,因此它仍然是一个抽象类。 |
![]() |
2
4
基于此, If the method is not reimplemented in Class2 or Class (it is not in this case) Base::method() will be called. Otherwise the reimplementation will be called. There is an interface hierarchy with a common base dumb implementation. â danatel 16 mins ago 这不是你所拥有的,你没有共同的基础,你有
接口未在派生树中“合并”,interface2实际上不会从接口继承,因此它将拥有自己的接口超类。
就像纯粹的虚拟世界
即使您实际上继承了,公共基础(接口)仍然没有实现
如果这只是一个简单的例子,让问题变得简短,比如 Bridge Pattern 可能更有用。但如果你不了解更多,就很难进一步指导你。 |
![]() |
3
4
嘿嘿,这个问题让我的脑海深处有些东西发痒。我不能完全指出这一点,但我认为这与定义接口继承权,然后继承接口和实现有关。然后,通过将调用转发到基类,可以避免使用实现所有函数。我想。
TankImp基本上继承了Tank接口和车辆实现。 现在,我很确定这在OO圈中是一个众所周知和可以接受的东西(但我不知道它是否有一个花哨的名字),所以在这种情况下,可怕的钻石的东西是好的,你可以安全地抑制支配警告,因为这是你想在这种情况下发生的。 希望这能帮助你找到正确的方向!
编辑: 好的,我想我现在更了解你的问题了,我认为错误在界面2。尝试将其更改为:
Interface2不应该有方法的纯虚拟定义,因为它已经在Interface中了。
|
![]() |
4
3
没有虚拟析构函数,如果执行以下操作,则会出现问题:
|
![]() |
5
3
关于
关于
免责声明:前面是负面结果
根据您对
Tom's answer
答案
第7.3.3节第14段解释如下:
看来,只有这样,才能获得理想的行为
关于
markh44's excellent answer
表明上述方法(制造
|
![]() |
6
2
This answer 在另一个论坛上,你似乎可以解决你提到的问题。 |
![]() |
7
1
如果你不小心的话,这将导致你称之为一种悲伤。模棱两可会咬你的。 在您的特定实例中,Interface2不需要从Interface继承。Interface2不需要指定“方法”,因为它是抽象的。删除Interface和Interface2之间的继承以打破菱形。然后,您将看到层次结构如下所示:
您的实现如下所示:
|
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |