如何避免继承冲突

时间:2015-07-01 14:41:01

标签: c++ inheritance multiple-inheritance

在我的C ++程序中,我有两个类(B1和B2),它们有自己的方法,但有1个(“意外”)。例如:

B1级标题:

void height();
void size();
void enabled();

B2类标题:

void width();
void length();
void enabled();

现在我有一个继承自B1和B2的A类。由于多重继承后方法enabled()中存在“冲突”,我该如何避免这种情况?有没有办法从继承中排除方法?例如,我可以从B1类中排除enabled()继承(我不能将其设置为私有,因为它是从B1派生的其他类中使用的)。还有其他想法吗?

4 个答案:

答案 0 :(得分:5)

你可以解决歧义,但无论如何你都会继承这两种功能。你无法选择不继承某些功能。要解决歧义,请使用以下命令:

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;
};

答案 1 :(得分:0)

您可以尝试使用命名空间。使B1::enabled()成为名为XB2::enabled() - Y的命名空间成员。在派生类中,使用X::enabled()Y::enabled()

答案 2 :(得分:0)

您可以使用语法Class::function消除对基类方法的调用的歧义。在您的情况下,无论您在何处使用enabled,都可以使电话符合要求:

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

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

using B1::enabled;

答案 3 :(得分:0)

我个人会将B封装在A中,并提供一个接口,指向它在A之外提供的有用的东西,而不是继承。如果您需要多态行为,请使A和B都继承自相同的抽象接口。