private:只能由1.該類中的函數、2.其友元函數訪問。不能被任何其他訪問,該類的對象也不能訪問。
protected:可以被1.該類中的函數、2.子類的函數、3.其友元函數訪問。但不能被該類的對象訪問。
public:可以被1.該類中的函數、2.子類的函數、3.其友元函數訪問,也可以由4.該類的對象訪問。
注:友元函數包括3種:設為友元的普通的非成員函數;設為友元的其他類的成員函數;設為友元類中的所有成員函數。
private 屬性不能夠被繼承。使用private繼承, 父類的protected和public屬性在子類中變為private;使用protected繼承,父類的protected和public屬性在子類中變為protected;使用public繼承, 父類的protected和public屬性不發生改變;
C++將public繼承視為is-a關系。private繼承則并不意味著is-a關系,private繼承意味著implemented-in-terms-of(根據某物實現出)。private繼承意味著只有實現部分被繼承,接口部分被略去。private繼承在軟件設計層面上沒有意義,其意義只在于軟件實現層面。
private繼承:
1)編譯器不會自動將一個子類對象轉換為一個父類對象,而public繼承會;
2)子類中由父類繼承而來的成員(protected和public)都變為private。
implemented-in-terms-of也可以由復合實現。在應用域,復合意味著has-a;在實現域,復合意味著is-implemented-in-terms-of。盡可能使用復合實現這種關系,必要時(涉及protected成員或virtual函數時)才使用private繼承。
新聞熱點
疑難解答