最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年02月14日 09:03:33   投稿:lqh  
這篇文章主要介紹了C/C++ 公有繼承、保護(hù)繼承和私有繼承的區(qū)別的相關(guān)資料,需要的朋友可以參考下

C/C++ 公有繼承、保護(hù)繼承和私有繼承的區(qū)別

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

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

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

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

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

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

        (1)基類的public成員在派生類中變?yōu)閜rotected成員。

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

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

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

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

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

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

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

派 生 方 式  基類的public成員 基類的protected成員 基類的private成員
public派生 還是public成員 變?yōu)閜rotected成員 不可見
protected派生 變成protected成員    還是protected成員 不可見
private派生 變?yōu)閜rivate成員 變成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;         //派生類不可訪問基類私有成員 
  } 
}; 

//保護(hù)繼承 
class ProtectedDerived : protected Base { 
public: 
  virtual void test() { 
    public_a = 1;          //public_a protected繼承后變?yōu)閜rotected類型 
    protected_a = 2;        //protected_a 還是protected類型 
    //private_a = 3;        //派生類不可訪問基類私有成員 
  } 
}; 

//私有繼承 
class PrivateDerived : private Base { 
public: 
  virtual void test() { 
    public_a = 1;          //public_a private繼承后變?yōu)閜rivate類型 
    protected_a = 2;        //protected_a private繼承后變?yōu)閜rivate類型 
    //private_a = 3;        //派生類不可訪問基類私有成員 
  } 
}; 

        在c++中public繼承是is-a的關(guān)系。也就說適用于基類身上的一定也適用于派生類身上,因?yàn)槊恳粋€(gè)派生類對象也都是一個(gè)基類對象。派生類對象轉(zhuǎn)換為基類對象在需要的時(shí)候是可以自動轉(zhuǎn)化的。

        其實(shí),protected和private派生后的派生類不是基類的子類,因?yàn)榇伺缮惒荒茏龌愃茏龅乃惺虑椤N覀兛纯聪旅娴拇a

#include <iostream> 

class Person { 
public: 
  Person(){}; 

  void eat() {std::cout << "eat\n";} 
}; 

//公有繼承 
class PublicStudent : public Person { 
public: 
  PublicStudent() {} 

  void study() {std::cout << "study\n";} 
}; 

//保護(hù)繼承 
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);          //正確,公有繼承時(shí),派生類可以做基類的所有事情 
  func_test(protected_s);         //出錯,保護(hù)繼承時(shí),派生類不能做基類的所有事情 
  func_test(private_s);          //出錯,私有繼承時(shí),派生類不可以做基類的所有事情 

  system("pause"); 

  return 0; 
} 

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

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

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

相關(guān)文章

  • C語言實(shí)現(xiàn)簡易版三子棋游戲

    C語言實(shí)現(xiàn)簡易版三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡易版三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語言?超詳細(xì)介紹與實(shí)現(xiàn)線性表中的無頭單向非循環(huán)鏈表

    C語言?超詳細(xì)介紹與實(shí)現(xiàn)線性表中的無頭單向非循環(huán)鏈表

    無頭單向非循環(huán)鏈表:結(jié)構(gòu)簡單,一般不會單獨(dú)用來存數(shù)據(jù)。實(shí)際中更多是作為其他數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),如哈希桶、圖的鄰接表等等。另外這種結(jié)構(gòu)在筆試面試中出現(xiàn)很多
    2022-03-03
  • 與ASCII碼相關(guān)的C語言字符串操作函數(shù)

    與ASCII碼相關(guān)的C語言字符串操作函數(shù)

    這篇文章主要介紹了與ASCII碼相關(guān)的C語言字符串操作函數(shù),分別是將字符轉(zhuǎn)換為ASCII碼的toascii()函數(shù)和根據(jù)ASCII碼進(jìn)行字符串比較的strcoll()函數(shù),需要的朋友可以參考下
    2015-08-08
  • C++中volatile關(guān)鍵字的使用詳解以及常見的誤解

    C++中volatile關(guān)鍵字的使用詳解以及常見的誤解

    volatile 關(guān)鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如:操作系統(tǒng),硬件或者其他線程等
    2020-01-01
  • c++可變參數(shù)模板使用示例源碼解析

    c++可變參數(shù)模板使用示例源碼解析

    這篇文章主要為大家介紹了c++可變參數(shù)模板使用示例源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 詳解c++中的 static 關(guān)鍵字及作用

    詳解c++中的 static 關(guān)鍵字及作用

    這篇文章主要介紹了c++中的 static 關(guān)鍵字,在我們?nèi)粘J褂眠^程中,static通常有兩個(gè)作用,具體內(nèi)容在文中給大家詳細(xì)介紹,需要的朋友可以參考下
    2020-02-02
  • C++11中的智能指針shared_ptr、weak_ptr源碼解析

    C++11中的智能指針shared_ptr、weak_ptr源碼解析

    本文是基于gcc-4.9.0的源代碼進(jìn)行分析,shared_ptr和weak_ptr是C++11才加入標(biāo)準(zhǔn)的,僅對C++智能指針shared_ptr、weak_ptr源碼進(jìn)行解析,需要讀者有一定的C++基礎(chǔ)并且對智能指針有所了解
    2021-09-09
  • 大數(shù)據(jù)情況下桶排序算法的運(yùn)用與C++代碼實(shí)現(xiàn)示例

    大數(shù)據(jù)情況下桶排序算法的運(yùn)用與C++代碼實(shí)現(xiàn)示例

    在排序元素很多的情況下,其實(shí)桶排序的性能并不是太高,這里我們配合單鏈表的直接插入排序,來看下一大數(shù)據(jù)情況下桶排序算法的運(yùn)用與C++代碼實(shí)現(xiàn)示例:
    2016-07-07
  • C++ STL之list雙向鏈表容器方式

    C++ STL之list雙向鏈表容器方式

    這篇文章主要介紹了C++ STL之list雙向鏈表容器方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 基于C語言編寫一個(gè)多功能計(jì)算器

    基于C語言編寫一個(gè)多功能計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了如何基于C語言編寫一個(gè)多功能計(jì)算器,除了四則混合運(yùn)算之外,還支持三角函數(shù)和絕對值等函數(shù),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08

最新評論

苏尼特右旗| 永嘉县| 潼南县| 汝城县| 洛扎县| SHOW| 东宁县| 新民市| 哈尔滨市| 福州市| 泰州市| 财经| 鄂伦春自治旗| 胶南市| 曲阜市| 方正县| 贵南县| 灵山县| 河源市| 祁阳县| 阿尔山市| 大同市| 东丽区| 正阳县| 塘沽区| 武夷山市| 南皮县| 东平县| 宽城| 桂东县| 富蕴县| 贞丰县| 清河县| 乳山市| 麻江县| 突泉县| 华安县| 扶绥县| 乐都县| 泰宁县| 韶关市|