一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - 解析C++中派生的概念以及派生類成員的訪問屬性

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

2021-03-14 15:02C++教程網 C/C++

這篇文章主要介紹了解析C++中派生的概念以及派生類成員的訪問屬性,是C++入門學習中的基礎知識,需要的朋友可以參考下

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Student
{
public:
  void display( )  //對成員函數display的定義
  {
   cout<<"num: " <<num<<endl;
   cout<<"name: "<< name <<endl;
   cout <<"sex: "<<sex<<endl;
  }
private:
  int num;
  string name;
  char sex;
};

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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];
};

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

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

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

以上介紹的是最簡單的情況:一個派生類只從一個基類派生,這稱為單繼承(single inheritance),這種繼承關系所形成的層次是一個樹形結構,如圖所示。
解析C++中派生的概念以及派生類成員的訪問屬性
一個派生類不僅可以從一個基類派生,也可以從多個基類派生。也就是說,一個派生類可以有一個或者多個基類。一個派生類有兩個或多個基類的稱為多重繼承(multiple inheritance)。關于基類和派生類的關系,可以表述為派生類是基類的具體化,而基類則是派生類的抽象。

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

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

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

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

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

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

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

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

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

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

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

延伸 · 閱讀

精彩推薦
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
主站蜘蛛池模板: 国产三级精品三级男人的天堂 | 99久久无色码中文字幕 | 国产精品久久久精品日日 | 亚洲男人的天堂网 | 波多野结衣xxxx性精品 | leslessexvideos日本| 亚洲人成在线播放 | 色综合久久天天综合观看 | 视频一本大道香蕉久在线播放 | 欧美日本一道高清二区三区 | 99久久香蕉国产线看观香 | 亚洲色图150p | 王的视频vk | 美女模特被c免费视频 | 99ri在线精品视频 | 香蕉91| 激情视频激情小说 | 波多野结衣178部中文字幕 | 92在线视频| 美女扒开屁股让我桶免费 | 日韩国产欧美一区二区三区 | 国产欧美精品一区二区三区–老狼 | 四虎免费影院4hu永久免费 | 日本中出视频 | 毛片资源站 | 精品国产国偷自产在线观看 | 丝瓜黄瓜茄子西红柿秋葵榴莲 | 99成人国产精品视频 | 青春草视频在线免费观看 | 免费午夜网站 | 婷婷激情综合五月天 | 天美传媒传媒免费观看 | 国产精品高清视亚洲一区二区 | yy111111免费观看| 四虎1515hhh co m| 亚洲色图第一页 | 国产精品久久久久久久久久久久久久 | tobu8中国在线播放免费 | 天天做天天爱天天一爽一毛片 | 欧美白虎逼 | 青青青手机视频在线观看 |