私有繼承提供的特性與包含相同:獲得實現(xiàn),并不獲得接口。兩者都可以用來實現(xiàn)has-a
的關(guān)系。
私有繼承使用關(guān)鍵字private(實際上在繼承中private是默認值,因此省略訪問限定符也將導(dǎo)致私有繼承)。
使用多個基類的繼承被稱為多重繼承,例如:
class A{};
class B{};
class C : private A,private B{//多重繼承
...
};
2. 保護繼承保護繼承是私有繼承的變體。保護繼承在列出基類的時候使用關(guān)鍵子protected;保護繼承使得基類的公有成員和保護成員都將稱為派生類的保護成員,其與私有繼承一樣,基類的接口在派生類中都是可用的,但是在繼承層次結(jié)構(gòu)之外是不可用的。兩者的大區(qū)別在于派生類再派生出另外一個類的時候,使用私有繼承第三代類將不能使用基類的接口,因為基類的公有方法在第二代類中變成了私有方法;但是在使用保護繼承,第三代類可以使用基類的接口,因為在第二代類中基類的公有方法變成受保護的,因此在第三代類中可以使用它們。
公有繼承、私有繼承和保護繼承的特點如下:
特征 | 公有繼承 | 保護繼承 | 私有繼承 |
---|---|---|---|
基類的公有成員變成 | 派生類的公有成員 | 派生類的保護成員 | 派生類的私有成員 |
基類的保護成員變成 | 派生類的保護成員 | 派生類的保護成員 | 派生類的私有成員 |
基類的私有成員變成 | 只能通過基類的接口訪問 | 只能通過基類接口訪問 | 只能通過基類接口訪問 |
能否隱式向上轉(zhuǎn)換 | 是 | 是(但只能在派生類中) | 否 |
(注:這里的隱式向上轉(zhuǎn)換只意味著無需進行顯式類型轉(zhuǎn)換,就可以將基類指針或引用指向派生類對象)
3. 使用using重新定義訪問權(quán)限在使用私有派生和保護派生的時候,基類的公有成員函數(shù)將成為私有成員和保護成員。如果希望基類的方法能夠在派生類外面可用的話,首先我們能想到的是在派生中定義一個公有方法,在該方法中調(diào)用基類的方法,進而實現(xiàn)該效果。另外一種方法就是使用using重新定義訪問權(quán)限。
class Base{...
public:
double min();
double max();
...
};
class A:private Base{...
public:
using Base::min; //using只使用成員名,不需要圓括號、函數(shù)特征標和返回類型
using Base::max;
...
};
//調(diào)用
A a;
double min = a.min();
double max = a.max();
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧