欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析C++中派生的概念以及派生類成員的訪問(wèn)屬性

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • C++基礎(chǔ)算法基于哈希表的索引堆變形

    C++基礎(chǔ)算法基于哈希表的索引堆變形

    這篇文章主要為大家介紹了C++基礎(chǔ)算法,基于哈希表的索引堆變形示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • C語(yǔ)言實(shí)現(xiàn)職工工資管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)職工工資管理系統(tǒng)

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)職工工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++?計(jì)算時(shí)間差的五種方法小結(jié)

    C++?計(jì)算時(shí)間差的五種方法小結(jié)

    本文主要介紹了C++?計(jì)算時(shí)間差的五種方法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • M1 Macbook vscode C++ debug調(diào)試實(shí)現(xiàn)

    M1 Macbook vscode C++ debug調(diào)試實(shí)現(xiàn)

    本文主要介紹了M1 Macbook vscode C++ debug調(diào)試,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C++20中的span容器及用法小結(jié)

    C++20中的span容器及用法小結(jié)

    std::span 是一個(gè)非常實(shí)用的工具,可以方便地對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)和處理,同時(shí)也可以提高代碼的可讀性、可維護(hù)性和安全性,這篇文章主要介紹了C++20中的span容器,需要的朋友可以參考下
    2023-03-03
  • 詳解C語(yǔ)言函數(shù)返回值解析

    詳解C語(yǔ)言函數(shù)返回值解析

    這篇文章主要介紹了詳解C語(yǔ)言函數(shù)返回值解析的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Qt5.9實(shí)現(xiàn)簡(jiǎn)單的多線程實(shí)例(類QThread)

    Qt5.9實(shí)現(xiàn)簡(jiǎn)單的多線程實(shí)例(類QThread)

    Qt開啟多線程,主要用到類QThread。用一個(gè)類繼承QThread,然后重新改寫虛函數(shù)run()。具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-09-09
  • C語(yǔ)言之復(fù)雜鏈表的復(fù)制方法(圖示詳解)

    C語(yǔ)言之復(fù)雜鏈表的復(fù)制方法(圖示詳解)

    下面小編就為大家?guī)?lái)一篇C語(yǔ)言之復(fù)雜鏈表的復(fù)制方法(圖示詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • LintCode-排序列表轉(zhuǎn)換為二分查找樹分析及實(shí)例

    LintCode-排序列表轉(zhuǎn)換為二分查找樹分析及實(shí)例

    這篇文章主要介紹了LintCode-排序列表轉(zhuǎn)換為二分查找樹分析及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C++ 純虛函數(shù)詳解

    C++ 純虛函數(shù)詳解

    本文主要介紹了C++ 純虛函數(shù)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評(píng)論