我覺得私有繼承在設計模式中也有作用。
私有繼承的子類一般不希望被其它的類所繼承。有一種設計原則: 能夠被繼承的類都應該是虛類;能夠實例化的類都不應該被繼承。而私有類恰恰能夠很好的實現該原則。
轉一個帖子:
http://www.4ucode.com/Study/Topic/977313
正文
昨晚閱讀Gof的設計模式時,提到Adapter(適配器)有兩種,分別爲類適配器和對象適配器。其中表明類適配器採用多重繼承適配接口。類適配器的關鍵是用一個分支繼承接口,而用另外一個分支繼承接口的實現部分。C++中作出這一個區分的方法是:用公共方式繼承接口;用私有方式繼承接口實現。就藉此機會複習一下C++中的私有繼承吧!
通過在基類表中去掉public或者顯示的聲明private,可以私有的繼承基類。當私有繼承時,創建的新類有基類的所有數據和功能,但是這些功能是隱藏的所以它只是內部實現部分。該類的對象訪問不到這些內部功能,並且一個對象不被看作這個基類的成員。當私有繼承時,基類的所有public成員都變成了private。如果希望它們中的任何一個是可視的,只有用派生類的public選項申明它們的名字即可。
class base1
{
public:
char f() const { return 'a';} //內聯函數,const成員函數
int g() const {return 2;}
float h() const {return 3.0;}
};
class derived : private base1
{
public:
base1::f; //將私有繼承成員公有化
};
int main(void)
{
derived d;
d.f(); //可以調用,因爲被該私有成員被公有化了
//d.h(); //不能調用,因爲是私有函數,不能通過對象來調用
return 0;
}
private 繼承
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
c++純手工實現帶括號計算器(轉換成逆波蘭式計算)
IAmAStudentForever
2020-06-22 03:48:48
c++_學習筆記0822
sysu_strange
2020-06-21 05:11:48
android的binder機制研究二
landerluu
2020-06-19 06:59:43
C語言病毒
The_King_Cloud
2020-06-17 17:36:57
函數的參數爲對象本身和對象的引用【函數參數爲引用】
shirley
2020-06-17 11:59:44
詳解Android電源管理API
landerluu
2020-06-03 14:32:40
使用Microsoft Visual Studio和Rational Purify進行運行時調試(一)
wyingquan
2020-02-24 16:52:46
Visual C++ 6 調試之Debug選項(001)
wyingquan
2020-02-24 16:52:46
使用Microsoft visual Studio和Rational Purify進行運行時調試(二)
wyingquan
2020-02-24 16:52:35
“default”標籤跳過“ ”的初始化操作問題解決
卡尼_Hu
2020-02-23 12:43:19
Linux下C++的多線程編程---(轉載)
The_King_Cloud
2020-02-22 20:18:03
linux下添加鏈接與刪除鏈接(ln命令的用法)
shirley
2020-02-22 02:34:18
C++ string 詳解。各類函數等
shirley
2020-02-22 02:34:18