關(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繼承七嫌。