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

解析C++中派生的概念以及派生類成員的訪問屬性

 更新時間:2015年09月21日 16:05:30   投稿:goldensun  
這篇文章主要介紹了解析C++中派生的概念以及派生類成員的訪問屬性,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

C++繼承與派生的概念、什么是繼承和派生
在C++中可重用性是通過繼承(inheritance)這一機制來實現(xiàn)的。因此,繼承是C++的一個重要組成部分。

前面介紹了類,一個類中包含了若干數(shù)據(jù)成員和成員函數(shù)。在不同的類中,數(shù)據(jù)成員和成員函數(shù)是不相同的。但有時兩個類的內(nèi)容基本相同或有一部分相同,例如巳聲明了學(xué)生基本數(shù)據(jù)的類Student:

class Student
{
public:
  void display( )  //對成員函數(shù)display的定義
  {
   cout<<"num: " <<num<<endl;
   cout<<"name: "<< name <<endl;
   cout <<"sex: "<<sex<<endl;
  }
private:
  int num;
  string name;
  char sex;
};

如果學(xué)校的某一部門除了需要用到學(xué)號、姓名、性別以外,還需要用到年齡、地址等信息。當(dāng)然可以重新聲明另一個類class Student1:

class Student1
{
public:
  void display( ) //此行原來已有
  {
   cout<<"num: " <<num<<endl; //此行原來已有
   cout<<"name: "<< name <<endl; //此行原來已有
   cout <<"sex: "<<sex<<endl; //此行原來已有
   cout <<"age: "<<age<<endl;
   cout <<"address: "<<addr<<endl;
  }
private:
  int num; //此行原來已有
  string name; //此行原來已有
  char sex; //此行原來已有
  int age;
  char addr[20];
};

可以看到有相當(dāng)一部分是原來已經(jīng)有的,可以利用原來聲明的類Student作為基礎(chǔ),再加上新的內(nèi)容即可,以減少重復(fù)的工作量。C++提供的繼承機制就是為了解決這個問題。

在C++中,所謂“繼承”就是在一個已存在的類的基礎(chǔ)上建立一個新的類。已存在的類稱為“基類(base class)”或“父類(father class)”,新建的類稱為“派生類(derived class)”或“子類(son class )”。

一個新類從已有的類那里獲得其已有特性,這種現(xiàn)象稱為類的繼承。通過繼承,一個新建子類從已有的父類那里獲得父類的特性。從另一角度說,從已有的類(父類)產(chǎn)生一個新的子類,稱為類的派生。類的繼承是用已有的類來建立專用類的編程技術(shù)。派生類繼承了基類的所有數(shù)據(jù)成員和成員函數(shù),并可以對成員作必要的增加或調(diào)整。一個基類可以派生出多個派生類,每一個派生類又可以作為基類再派生出新的派生類,因此基類和派生類是相對而言的。一代一代地派生下去,就形成類的繼承層次結(jié)構(gòu)。相當(dāng)于一個大的家族,有許多分支,所有的子孫后代都繼承了祖輩的基本特征,同時又有區(qū)別和發(fā)展。與之相仿,類的每一次派生,都繼承了其基類的基本特征,同時又根據(jù)需要調(diào)整和擴充原 有的特征。

以上介紹的是最簡單的情況:一個派生類只從一個基類派生,這稱為單繼承(single inheritance),這種繼承關(guān)系所形成的層次是一個樹形結(jié)構(gòu),如圖所示。

一個派生類不僅可以從一個基類派生,也可以從多個基類派生。也就是說,一個派生類可以有一個或者多個基類。一個派生類有兩個或多個基類的稱為多重繼承(multiple inheritance)。關(guān)于基類和派生類的關(guān)系,可以表述為派生類是基類的具體化,而基類則是派生類的抽象。

C++派生類成員的訪問屬性
既然派生類中包含基類成員和派生類自己增加的成員,就產(chǎn)生了這兩部分成員的關(guān)系和訪問屬性的問題。在建立派生類的時候,并不是簡單地把基類的私有成員直接作為派生類的私有成員,把基類的公用成員直接作為派生類的公用成員。

實際上,對基類成員和派生類自己增加的成員是按不同的原則處理的。具體說,在討論訪問屬性時,要考慮以下幾種情況:
基類的成員函數(shù)訪問基類成員。
派生類的成員函數(shù)訪問派生類自己增加的成員。
基類的成員函數(shù)訪問派生類的成員。
派生類的成員函數(shù)訪問基類的成員。
在派生類外訪問派生類的成員。
在派生類外訪問基類的成員。

對于第(1)和第(2)種情況,比較簡單,基類的成員函數(shù)可以訪問基類成員,派生類的成員函數(shù)可以訪問派生類成員。私有數(shù)據(jù)成員只能被同一類中的成員函數(shù)訪問,公用成員可以被外界訪問。

第(3)種情況也比較明確,基類的成員函數(shù)只能訪問基類的成員,而不能訪問派生類的成員。

第(5)種情況也比較明確,在派生類外可以訪問派生類的公用成員,而不能訪問派生類的私有成員。

對于第(4)和第(6)種情況,就稍微復(fù)雜一些,也容易混淆。譬如,有人提出這樣的問題:
基類中的成員函數(shù)是可以訪問基類中的任一成員的,那么派生類中新增加的成員是否可以同樣地訪問基類中的私有成員;
在派生類外,能否通過派生類的對象名訪問從基類繼承的公用成員。

這些牽涉到如何確定基類的成員在派生類中的訪問屬性的問題,不僅要考慮對基類成員所聲明的訪問屬性,還要考慮派生類所聲明的對基類的繼承方式,根據(jù)這兩個因素共同決定基類成員在派生類中的訪問屬性。

前面已提到,在派生類中,對基類的繼承方式可以有public(公用的)、private (私有的)和protected(保護的)3種。不同的繼承方式?jīng)Q定了基類成員在派生類中的訪問屬性。簡單地說可以總結(jié)為以下幾點。

1) 公用繼承(public inheritance)
基類的公用成員和保護成員在派生類中保持原有訪問屬性,其私有成員仍為基類私有。

2) 私有繼承(private inheritance)
基類的公用成員和保護成員在派生類中成了私有成員,其私有成員仍為基類私有。

3) 受保護的繼承(protected inheritance)
基類的公用成員和保護成員在派生類中成了保護成員,其私有成員仍為基類私有。保護成員的意思是,不能被外界引用,但可以被派生類的成員引用。

相關(guān)文章

  • Opencv實現(xiàn)聯(lián)合雙邊濾波

    Opencv實現(xiàn)聯(lián)合雙邊濾波

    這篇文章主要為大家詳細介紹了Opencv實現(xiàn)聯(lián)合雙邊濾波,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • c語言之如何求e的近似值

    c語言之如何求e的近似值

    這篇文章主要介紹了c語言之如何求e的近似值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C++ ReSharper2021激活碼永久有效

    C++ ReSharper2021激活碼永久有效

    ReSharperC++是為c/c++開發(fā)者打造的一款實用Visual Studio擴展插件,這款插件旨在提升開發(fā)者的效率,今天給大家分享這款軟件的激活方法,需要C++ ReSharper2021激活碼的朋友參考下本文
    2021-06-06
  • C語言深入探究直接插入排序與希爾排序使用案例講解

    C語言深入探究直接插入排序與希爾排序使用案例講解

    算法中排序是十分重要的,而每一個學(xué)習(xí)計算機的都會在初期的時候接觸到這種排序,下面這篇文章主要給大家介紹了關(guān)于c語言直接插入排序與希爾排序使用的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • C++中const修飾符的詳解及其作用介紹

    C++中const修飾符的詳解及其作用介紹

    這篇文章主要介紹了C++中const修飾符的詳解及其作用介紹,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C語言中位域的使用詳解

    C語言中位域的使用詳解

    位域是C語言中的一種高級功能,允許程序員為結(jié)構(gòu)體的成員分配特定數(shù)量的位,本文主要為大家介紹了位域的使用以及優(yōu)缺點,希望對大家有所幫助
    2023-07-07
  • C語言中傳值與傳指針的介紹與區(qū)別

    C語言中傳值與傳指針的介紹與區(qū)別

    這篇文章主要給大家介紹了關(guān)于C語言中傳值與傳指針的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用C語言具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • C++中繼承(inheritance)詳解及其作用介紹

    C++中繼承(inheritance)詳解及其作用介紹

    這篇文章主要介紹了C++中繼承(inheritance)詳解及其作用介紹,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C語言基于EasyX庫實現(xiàn)有圖形界面時鐘

    C語言基于EasyX庫實現(xiàn)有圖形界面時鐘

    這篇文章主要為大家詳細介紹了C語言基于EasyX庫實現(xiàn)有圖形界面時鐘,獲得本地時間,輸出文字,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言掃雷排雷小游戲?qū)崿F(xiàn)全程

    C語言掃雷排雷小游戲?qū)崿F(xiàn)全程

    本篇我將帶領(lǐng)大家攻克掃雷游戲各處難點,讓你寫掃雷不在困難,我們的掃雷游戲可以實現(xiàn)標記雷的功能和展開一片的功能。我們將分三個文件為大家介紹,分別為test.c,game.h和game.c
    2022-05-05

最新評論

东阿县| 惠水县| 方山县| 大渡口区| 澎湖县| 上林县| 咸丰县| 调兵山市| 晋中市| 左贡县| 桐城市| 平塘县| 昂仁县| 喀喇沁旗| 信丰县| 沈丘县| 金阳县| 小金县| 噶尔县| 桦甸市| 基隆市| 巩义市| 山丹县| 搜索| 石门县| 巩义市| 肇州县| 昌吉市| 外汇| 乐安县| 兴山县| 田林县| 团风县| 渝北区| 邹平县| 镇安县| 菏泽市| 小金县| 饶平县| 旬邑县| 瑞昌市|