如何避免继承冲突
How to avoid conflict in inheritance
在我的C++程序中,我有两个类(B1和B2),它们有自己的方法,但有一个("意外")是共同的。例如:
B1类标题:
void height();
void size();
void enabled();
B2类标题:
void width();
void length();
void enabled();
现在我有一个继承自B1和B2的类a。既然我在多次继承后的方法enabled()
中出现了"冲突",我该如何避免这种情况?有没有办法将方法从继承中排除?例如,我可以从类B1中排除enabled()
继承(我不能将其设置为私有,因为它是从B1派生的其他类中使用的)。还有其他想法吗?
您可以解决歧义,但无论如何都会继承这两个函数。您不可能选择不继承某些函数。要修复歧义,请使用以下方法:
class B1
{
public:
void height();
void size();
void enabled();
};
class B2
{
public:
void width();
void length();
void enabled();
};
class A: public B1, public B2
{
public:
using B2::enabled;
};
您可以尝试使用名称空间。使B1::enabled()
成为名为X
和B2::enabled()
-Y
的命名空间的成员。在派生类中,使用X::enabled()
或Y::enabled()
。
您可以使用语法Class::function
消除对基类方法的调用的歧义。在您的情况下,无论您在哪里使用enabled
,都可以获得通话资格:
B1::enabled();
B2::enabled();
如果您只需要其中一个函数,您可以编写一个using声明:
using B1::enabled;
就我个人而言,我会将B封装在A中,并为它在A中提供的任何有用的接口提供接口,而不是继承。如果您需要多态行为,请使A和B从同一抽象接口继承。
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 写入位置0x0000000C时发生访问冲突
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 从 QGraphicsItem+QWidget 继承时的 GUI 冲突
- C++ MSVC 中的访问冲突,但不在 GCC 中进行多重继承和强制转换
- 访问冲突 malloc 和继承C++
- 多重继承冲突
- 我应该如何处理类型而不是方法的多重继承冲突
- C++模板化的主题观察者继承/角色冲突
- C++多继承私有成员冲突
- 继承C++接口和 LSP 冲突
- 从两个类继承的类,具有相同的函数原型,彼此冲突
- C++多继承函数名称冲突
- C++名称与typedef别名和继承的名称冲突
- Dynamic_cast在三级继承的情况下会导致分段冲突
- 如何避免继承冲突
- 具有冲突方法的多重继承