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ù)。
private 屬性不能夠被繼承。使用private繼承, 父類的protected和public屬性在子類中變?yōu)閜rivate;使用protected繼承,父類的protected和public屬性在子類中變?yōu)閜rotected;使用public繼承, 父類的protected和public屬性不發(fā)生改變;
C++將public繼承視為is-a關(guān)系。private繼承則并不意味著is-a關(guān)系,private繼承意味著implemented-in-terms-of(根據(jù)某物實(shí)現(xiàn)出)。private繼承意味著只有實(shí)現(xiàn)部分被繼承,接口部分被略去。private繼承在軟件設(shè)計(jì)層面上沒有意義,其意義只在于軟件實(shí)現(xiàn)層面。
private繼承:
1)編譯器不會自動將一個(gè)子類對象轉(zhuǎn)換為一個(gè)父類對象,而public繼承會;
2)子類中由父類繼承而來的成員(protected和public)都變?yōu)閜rivate。
implemented-in-terms-of也可以由復(fù)合實(shí)現(xiàn)。在應(yīng)用域,復(fù)合意味著has-a;在實(shí)現(xiàn)域,復(fù)合意味著is-implemented-in-terms-of。盡可能使用復(fù)合實(shí)現(xiàn)這種關(guān)系,必要時(shí)(涉及protected成員或virtual函數(shù)時(shí))才使用private繼承。
新聞熱點(diǎn)
疑難解答
圖片精選