|
|
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
|
|
EarthTurtle · 调整泛型抛出迭代器的异常类型 2 年前 |
|
wallop · 实现必须明确提及所有接口字段,还是可以跳过它们? 2 年前 |
|
|
Reelie · C#11-通过抽象类在接口中静态抽象成员? 2 年前 |
|
Addem · 在OCaml签名中放入类型声明的正确方法是什么 2 年前 |