国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

解讀C++編程中派生類的構成和創建

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

C++派生類的構成
派生類中的成員包括從基類繼承過來的成員和自己增加的成員兩大部分。從基類繼承的成員體現了派生類從基類繼承而獲得的共性,而新增加的成員體現了派生類的個性。正是這些新增加的成員體現了派生類與基類的不同,體現了不同派生類之間的區別。

在基類中包括數據成員和成員函數 (或稱數據與方法)兩部分,派生類分為兩大部分:一部分是從基類繼承來的成員,另一部分是在聲明派生類時增加的部分。每一部分均分別包括數據成員和成員函數。

實際上,并不是把基類的成員和派生類自己增加的成員簡單地加在一起就成為派生類。構造一個派生類包括以下3部分工作。

1) 從基類接收成員

派生類把基類全部的成員(不包括構造函數和析構函數)接收過來,也就是說是沒有選擇的,不能選擇接收其中一部分成員,而舍棄另一部分成員。 從定義派生類的一般形式中可以看出是不可選擇的。

這樣就可能出現一種情況:有些基類的成員,在派生類中是用不到的,但是也必須繼承過來。這就會造成數據的冗余,尤其是在多次派生之后,會在許多派生類對象中存在大量無用的數據,不僅浪費了大量的空間,而且在對象的建立、賦值、復制和參數的傳遞中, 花費了許多無謂的時間,從而降低了效率。這在目前的C++標準中是無法解決的,要求我們根據派生類的需要慎重選擇基類,使冗余量最小。不要隨意地從已有的類中找一個作為基類去構造派生類,應當考慮怎樣能使派生類有更合理的結構。事實上,有些類是專門作為基類而設計的,在設計時充分考慮到派生類的要求。

2) 調整從基類接收的成員

接收基類成員是程序人員不能選擇的,但是程序人員可以對這些成員作某些調整。例如可以改變基類成員在派生類中的訪問屬性,這是通過指定繼承方式來實現的。如可以通過繼承把基類的公用成員指定為在派生類中的訪問屬性為私有(派生類外不能訪問)。此外,可以在派生類中聲明一個與基類成員同名的成員,則派生類中的新成員會覆蓋基類的同名成員。但應注意,如果是成員函數,不僅應使函數名相同,而且函數的參數表(參數的個數和類型)也應相同,如果不相同,就成為函數的重載而不是覆蓋了。用這樣的方法可以用新成員取代基類的成員。

3) 在聲明派生類時增加的成員

這部分內容是很重要的,它體現了派生類對基類功能的擴展。要根據需要仔細考慮應當增加哪些成員,精心設計。例如在前面例子中(請查看:C++派生類的聲明方式),基類的display函數的作用是輸出學號、姓名和性別,在派生類中要求輸出學號、姓名、性別、年齡和地址,不必單獨另寫一個輸出這5個數據的函數,而要利用基類的display 函數輸出學號、姓名和性別,另外再定義一個display_1 函數輸出年齡和地址,先后執行這兩個函數。也可以在 display_1 函數中調用基類的display函數,再輸出另外兩個數據,在主函數中只需調用一個display_1函數即可,這樣可能更清晰一些,易讀性更好。

此外,在聲明派生類時,一般還應當自己定義派生類的構造函數和析構函數,因為構造函數和析構函數是不能從基類繼承的。

通過以上的介紹可以看出:派生類是基類定義的延續。可以先聲明一個基類,在此基類中只提供某些最基本的功能,而另外有些功能并未實現,然后在聲明派生類時加入某些具體的功能,形成適用于某一特定應用的派生類。通過對基類聲明的延續,將一個抽象的基類轉化成具體的派生類。因此,派生類是抽象基類的具體實現。

C++派生類的聲明方式(定義方式)
先通過一個例子來說明怎樣通過繼承來創建派生類,先從最簡單的單繼承開始。

class Student1: public Student //聲明基類是Student{public:  void display_1( ) //新增加的成員函數  {   cout<<"age: "<<age<<endl;   cout<<"address: "<<addr<<endl;  }private:  int age; //新增加的數據成員  string addr; //新增加的數據成員};

假設已經聲明了一個基類Student(基類Student的定義見上節:C++繼承與派生的概念),在此基礎上通過單繼承建立一個派生類Student1:
仔細觀察第一行:

  class Student1: public Student


在class后面的Student1是新建的類名,冒號后面的Student表示是已聲明的基類。在Student之前有一關鍵宇public,用來表示基類Student中的成員在派生類Studeml中的繼承方式。基類名前面有public的稱為“公用繼承(public inheritance)”。

請大家仔細閱讀以上聲明的派生類Student1和基類Student,并將它們放在一起進行分析。

聲明派生類的一般形式為:
   

 class 派生類名:[繼承方式] 基類名  {    派生類新增加的成員  };

繼承方式包括public (公用的)、private (私有的)和protected(受保護的),此項是可選的,如果不寫此項,則默認為private(私有的)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永州市| 洛川县| 万盛区| 崇礼县| 璧山县| 通榆县| 布拖县| 盖州市| 正阳县| 潮州市| 香格里拉县| 渭南市| 汤阴县| 叶城县| 乌鲁木齐市| 安陆市| 平顶山市| 岢岚县| 和政县| 若尔盖县| 蓝田县| 开阳县| 永寿县| 深水埗区| 临颍县| 淳化县| 通道| 兴国县| 醴陵市| 五指山市| 武安市| 清苑县| 湟中县| 富源县| 宜兴市| 永靖县| 永平县| 黄骅市| 长春市| 沂源县| 鲜城|