亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C/C++ 公有繼承、保護繼承和私有繼承的對比詳解

2020-01-26 14:15:09
字體:
來源:轉載
供稿:網友

C/C++ 公有繼承、保護繼承和私有繼承的區別

   在c++的繼承控制中,有三種不同的控制權限,分別是public、protected和private。定義派生類時,若不顯示加上這三個關鍵字,就會使用默認的方式,用struct定義的類是默認public繼承,class定義的類是默認private繼承。這和Java有很大的不同,Java默認使用public繼承,而且只有公有繼承。

        1.使用public繼承時,派生類內部可以訪問基類中public和protected成員,但是類外只能通過派生類的對象訪問基類的public成員。

        (1)基類的public成員在派生類中依然是public的。

        (2)基類中的protected成員在派生類中依然是protected的。

        (3)基類中的private成員在派生類中不可訪問。

        2.使用protected繼承時,派生類內部可以訪問基類中public和protected成員,并且類外也不能通過派生類的對象訪問基類的成員(可以在派生類中添加公有成員函數接口間接訪問基類中的public和protected成員)。

        (1)基類的public成員在派生類中變為protected成員。

        (2)基類的protected成員在派生類中依然是protected成員。

        (3)基類中的private成員在派生類中不可訪問。

       3.使用private繼承時,派生類內部可以訪問基類中public和protected成員,并且類外也不能通過派生類的對象訪問基類的成員(可以在派生類中添加公有成員函數接口間接訪問基類中的public和protected成員)。

        (1)基類的public成員在派生類中變成private成員。

        (2)基類的protected成員在派生類中變成private成員。

        (3)基類的private成員在派生類中不可訪問。

        為了便于理解,我們用一個表格來說明這幾種控制符使用的情況:  

派 生 方 式  基類的public成員 基類的protected成員 基類的private成員
public派生 還是public成員 變為protected成員 不可見
protected派生 變成protected成員    還是protected成員 不可見
private派生 變為private成員 變成private成員 不可見

       下面用代碼簡單敘述

#include <iostream> class Base { public:   int public_a;   virtual void test() = 0; protected:   int protected_a; private:   int private_a; }; //公有繼承 class PublicDerived : public Base { public:   virtual void test() {     public_a = 1;          //public_a public繼承后還是public類型     protected_a = 2;        //protected_a 還是protected類型     //private_a = 3;         //派生類不可訪問基類私有成員   } }; //保護繼承 class ProtectedDerived : protected Base { public:   virtual void test() {     public_a = 1;          //public_a protected繼承后變為protected類型     protected_a = 2;        //protected_a 還是protected類型     //private_a = 3;        //派生類不可訪問基類私有成員   } }; //私有繼承 class PrivateDerived : private Base { public:   virtual void test() {     public_a = 1;          //public_a private繼承后變為private類型     protected_a = 2;        //protected_a private繼承后變為private類型     //private_a = 3;        //派生類不可訪問基類私有成員   } }; 

        在c++中public繼承是is-a的關系。也就說適用于基類身上的一定也適用于派生類身上,因為每一個派生類對象也都是一個基類對象。派生類對象轉換為基類對象在需要的時候是可以自動轉化的。

        其實,protected和private派生后的派生類不是基類的子類,因為此派生類不能做基類所能做的所有事情。我們看看下面的代碼

#include <iostream> class Person { public:   Person(){};   void eat() {std::cout << "eat/n";} }; //公有繼承 class PublicStudent : public Person { public:   PublicStudent() {}   void study() {std::cout << "study/n";} }; //保護繼承 class ProtectedStudent : protected Person { public:   ProtectedStudent() {}   void study() {std::cout << "study/n";} }; //私有繼承 class PrivateStudent : private Person { public:   PrivateStudent() {}   void study() {std::cout << "study/n";} };  void func_test(Person &p) {   p.eat(); } int main() {   PublicStudent public_s;   ProtectedStudent protected_s;   PrivateStudent private_s;   func_test(public_s);          //正確,公有繼承時,派生類可以做基類的所有事情   func_test(protected_s);         //出錯,保護繼承時,派生類不能做基類的所有事情   func_test(private_s);          //出錯,私有繼承時,派生類不可以做基類的所有事情   system("pause");   return 0; } 

        func_test()需要一個Person類型的對象,在調用func_test(public_s)時實際傳遞的是PublicStudent對象,因為PublicStudent共有繼承Person類,所以PublicStudent對象可以使用Person類中所有的公有成員,也就是說基類對象可以做的事,公有繼承的派生類對象照樣可以做。而ProtectedStudent和PrivateStudent都是非公有有繼承,他們的對象不可以直接訪問Person類的成員。但是在他們派生類的對象空間中是包含基類的的對象,只是無法讓他們公開訪問。從上面的代碼可以看出來,protected繼承和private繼承的派生類已經不是基類的子類了。

       寫了這么多,其實非公有繼承很少遇到。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产午夜精品美女视频明星a级| 欧美日韩视频在线| 国产精品久久久久久五月尺| xx视频.9999.com| 国产在线视频91| 91在线无精精品一区二区| 成人福利网站在线观看11| 日韩美女写真福利在线观看| 久久久久久久网站| 国产精品入口夜色视频大尺度| 岛国av在线不卡| 久久精品一区中文字幕| 日韩av免费看| 欧美肥臀大乳一区二区免费视频| 亚洲女人被黑人巨大进入| 91夜夜未满十八勿入爽爽影院| 欧美日韩国产精品一区| 欧美激情精品久久久久久大尺度| 国产精品成人免费视频| 日韩精品在线免费| 欧美专区福利在线| 亚洲人成电影网站色…| 在线观看久久久久久| 色妞久久福利网| 国语自产精品视频在免费| 欧美性生交xxxxxdddd| 一个人www欧美| 国产精品久久久久久久7电影| 亚洲精品久久久久久久久久久久| 国产精品揄拍500视频| 日韩亚洲精品电影| 日韩精品免费综合视频在线播放| 97福利一区二区| 亚洲男人天堂九九视频| 国产精品久久久久久久久久东京| 久久久久久18| 综合网日日天干夜夜久久| 日韩中文字幕久久| 国产剧情久久久久久| 亚洲肉体裸体xxxx137| 亚洲国产成人久久综合| 国产ts人妖一区二区三区| 亚洲精品国产福利| 欧美性猛交xxxx免费看| 国产一区二区三区日韩欧美| 欧美一级成年大片在线观看| 欧美有码在线视频| 亚洲美女自拍视频| 欧美久久精品午夜青青大伊人| 午夜免费日韩视频| 国产精品视频久久久| 成人自拍性视频| 亚洲一区二区三区成人在线视频精品| 国产精品日韩电影| 成人久久久久久久| 亚洲激情在线观看| 日韩视频免费大全中文字幕| 国产91精品网站| 国产97在线播放| 日韩av网站导航| 在线观看欧美www| 欧美在线性视频| 久久人人爽人人爽人人片av高清| 国产精品视频永久免费播放| 久久国产精品99国产精| 精品美女久久久久久免费| 欧美午夜宅男影院在线观看| 国模吧一区二区| 成人性生交大片免费看视频直播| 欧美视频中文字幕在线| 亚洲国产一区二区三区在线观看| 久久久这里只有精品视频| 97视频在线观看播放| 91免费人成网站在线观看18| 日韩中文字幕在线免费观看| 中文精品99久久国产香蕉| 久久精视频免费在线久久完整在线看| 亚洲香蕉av在线一区二区三区| 欧美成人免费全部| 欧美日韩精品在线播放| 亚洲精品一区av在线播放| 久久av红桃一区二区小说| 免费成人高清视频| 亚洲国产精品专区久久| 国产精品自在线| 在线观看久久久久久| 热久久99这里有精品| 亚洲欧美日韩图片| 中文字幕视频一区二区在线有码| 深夜福利91大全| 91av在线不卡| 国产精品第100页| 国产精品18久久久久久麻辣| 一区二区国产精品视频| 欧美大全免费观看电视剧大泉洋| 亚洲free性xxxx护士白浆| 欧美视频专区一二在线观看| 美女视频黄免费的亚洲男人天堂| 成人黄色生活片| 91免费在线视频| 欧美wwwxxxx| 中文字幕av一区二区| 欧美日韩美女在线| 久久久久成人精品| 亚洲free性xxxx护士hd| 美女黄色丝袜一区| 国产成人免费av电影| 国产精品第2页| 免费不卡欧美自拍视频| 国产剧情日韩欧美| 精品国产31久久久久久| 国产不卡av在线| 精品国产电影一区| 日韩亚洲国产中文字幕| 亚洲国产成人爱av在线播放| 日韩在线免费视频| 亚洲999一在线观看www| 亚洲视频免费一区| 欧美性xxxxxx| 俺去了亚洲欧美日韩| 亚洲3p在线观看| 亚洲片国产一区一级在线观看| 亚洲欧美制服丝袜| 日本免费一区二区三区视频观看| 中文字幕欧美视频在线| 91免费福利视频| 日韩免费在线播放| 国产在线视频一区| 91av在线国产| 亚洲国产精品va在看黑人| 国产亚洲精品一区二555| 2020久久国产精品| 欧美精品在线网站| 国产精品久久久久久久久男| 欧美性生交大片免费| 欧洲精品在线视频| 国产精品久久久久久久av电影| 欧美伦理91i| 国产一区二区视频在线观看| 欧美一区二三区| 国产91精品黑色丝袜高跟鞋| 国产精品白丝jk喷水视频一区| 日韩中文字幕视频在线观看| 久久精品视频免费播放| 久久在线免费视频| 成人深夜直播免费观看| 日韩中文在线观看| 久热精品视频在线观看一区| 欧美性视频在线| 国产日韩欧美视频在线| 久久精品这里热有精品| 日韩中文综合网| 成人精品视频在线| 久久久亚洲成人| 欧美丰满片xxx777| 欧美专区日韩视频| 欧美视频一二三| 狠狠躁夜夜躁人人爽超碰91| 亚洲精品电影网| 久久精品青青大伊人av| 国产一区视频在线播放| 亚洲一区二区中文| 国产精品网红福利| 国产+成+人+亚洲欧洲|