如何避免继承冲突

How to avoid conflict in inheritance

本文关键字:冲突 继承 何避免      更新时间:2023-10-16

在我的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()成为名为XB2::enabled()-Y的命名空间的成员。在派生类中,使用X::enabled()Y::enabled()

您可以使用语法Class::function消除对基类方法的调用的歧义。在您的情况下,无论您在哪里使用enabled,都可以获得通话资格:

B1::enabled();
B2::enabled();

如果您只需要其中一个函数,您可以编写一个using声明:

using B1::enabled;

就我个人而言,我会将B封装在A中,并为它在A中提供的任何有用的接口提供接口,而不是继承。如果您需要多态行为,请使A和B从同一抽象接口继承。