c++ - 从两个 'interfaces' 实现相同的方法签名

标签 c++ multiple-inheritance virtual-functions overriding

在 C++ 中对假接口(interface)使用纯虚方法,当一个具体类派生自两个具有相同方法声明的“接口(interface)”时会发生什么?例如 X子类 IaaaIbbb并实现一个方法virtual void setVisible(bool); .

事实IaaaIbbb没有方法体比更经典的菱形继承场景更容易/更好,让 X::setVisible 成为两个 Iaaa::setVisible 的实现和 Ibbb::setVisible ?

我想用 C++ 来表达这个问题的一种更具体的方式是“当一个类使用 MI 派生自两个对纯虚方法具有相同签名的类时会发生什么”。

最佳答案

what happens when one class uses MI to derive from 2 classes which have identical signatures for a pure virtual method

行为定义明确。派生类覆盖方法将构成两个接口(interface)(即具有所有纯 virtual 函数的抽象 classes)方法的实现。

另外,您的问题还有 2 点

  1. 菱形继承(钻石问题)还没有发生,因为你还没有 提到了 IaaaIbbb
  2. 的任何共同基础
  3. 你不能实现,2个X::setVisible(bool)具有相同的签名

关于c++ - 从两个 'interfaces' 实现相同的方法签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7872958/

相关文章:

C++ 虚拟方法,不需要 "this"指针 - 优化

c++ - 未定义的行为或 gcc 优化错误

c++ - 使用 SFML 库在 Xcode 中调试期间不显示变量值

c++ - OpenCV 中的函数可同时查找任何一维(行/列)的均值/平均值

C++:同一对象的基类与派生类的指针比较

c++ - 我可以告诉我的类是从哪个模板实例类继承的吗?

c++ - 多重继承中的构造函数调用顺序

c++ - MFC 拖动对象

c++ - 为什么定义纯虚函数有意义?

c++ - 虚函数的继承