C++:private繼承與public繼承

關(guān)于繼承,之前一直使用的是public,于是查了點資料

private:只能由1.該類中的函數(shù)、2.其友元函數(shù)訪問。不能被任何其他訪問,該類的對象也不能訪問。

protected:可以被1.該類中的函數(shù)、2.子類的函數(shù)、3.其友元函數(shù)訪問。但不能被該類的對象訪問。

public:可以被1.該類中的函數(shù)、2.子類的函數(shù)、3.其友元函數(shù)訪問,也可以由4.該類的對象訪問。

注:友元函數(shù)包括3種:設(shè)為友元的普通的非成員函數(shù);設(shè)為友元的其他類的成員函數(shù);設(shè)為友元類中的所有成員函數(shù)

2?類被繼承后方法屬性變化

private 屬性不能夠被繼承。
使用private繼承, 父類的protected和public屬性在子類中變?yōu)閜rivate;
使用protected繼承,父類的protected和public屬性在子類中變?yōu)閜rotected;使用public繼承, 父類的protected和public屬性不發(fā)生改變;

3 private繼承和public繼承的適用情況

C++將public繼承視為is-a關(guān)系。private繼承則并不意味著is-a關(guān)系,private繼承意味著implemented-in-terms-of(根據(jù)某物實現(xiàn)出)。private繼承意味著只有實現(xiàn)部分被繼承,接口部分被略去。private繼承在軟件設(shè)計層面上沒有意義,其意義只在于軟件實現(xiàn)層面。

private繼承:

1)編譯器不會自動將一個子類對象轉(zhuǎn)換為一個父類對象,而public繼承會;

2)子類中由父類繼承而來的成員(protected和public)都變?yōu)閜rivate。

implemented-in-terms-of也可以由復(fù)合實現(xiàn)。在應(yīng)用域,復(fù)合意味著has-a;在實現(xiàn)域,復(fù)合意味著is-implemented-in-terms-of。盡可能使用復(fù)合實現(xiàn)這種關(guān)系,必要時(涉及protected成員或virtual函數(shù)時)才使用private繼承。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容