[英]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()
成為名為X
和B2::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.