|
|
1
23
那是因为你有两份
|
|
|
2
10
劳拉建议的虚拟继承当然是问题的解决方案。但它最终并不是只有一个接口。例如,它也有“副作用” https://isocpp.org/wiki/faq/multiple-inheritance#mi-delegate-to-sister 如果您不想要副作用,可以使用模板:
所以,我们只有一个父类。 但当有多个“共享”类时,它看起来更难看(InterfaceA是“共享的”,因为它位于“可怕的钻石”之上,请参见此处) https://isocpp.org/wiki/faq/multiple-inheritance 由劳拉发布)。参见示例(如果ClassA也实现了interfaceC,将是什么):
糟糕的是,您需要修改现有的ClassAB。但你可以写:
然后ClassAB保持不变:
并且您有模板参数IC的默认实现。 使用哪种方法由您决定。我更喜欢模板,因为它很容易理解。很难养成习惯,B::incrementAndPrint()和C::incrementAndPrint()将打印不同的值(不是您的示例),请参见以下内容:
以及输出:
|
|
|
3
4
这个问题存在是因为C++没有真正的接口,只有纯继承的虚拟类。编译器不知道在哪里可以找到的实现
|
|
|
4
2
|
|
Fernando Chu · 一个变量有多个可能的类?[关闭] 1 年前 |
|
|
Amaterastis · 基类接受子类和内部子类的模板参数 1 年前 |
|
|
Rishab Negi · 这个关键字在抽象类中是如何工作的 1 年前 |
|
|
dEmigOd · 类层次结构中的运算符重载解析 1 年前 |
|
|
TableTopRug · 如何从Kotlin中的密封类继承? 1 年前 |
|
|
hasdrubal · 抽象基类函数指针python 1 年前 |
|
|
Josh · 通过反思访问孩子的财产 1 年前 |