簡體   English   中英

如何避免繼承沖突

[英]How to avoid conflict in 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派生的其他類中使用的)。 還有其他想法嗎?

您可以解決歧義,但是無論如何您都將繼承這兩個函數。 您無法選擇不繼承某些功能。 要解決歧義,請使用以下命令:

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消除對基類方法的Class::function 在您的情況下,無論您在何處使用enabled ,都可以限定通話資格:

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

如果只需要這些功能之一,則可以編寫using-聲明:

using B1::enabled;

就我個人而言,我會將B封裝在A中,並提供一個接口,以供您在A之外需要的任何有用的接口,而不是繼承。 如果需要多態行為,則使A和B都從同一個抽象接口繼承。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM