程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 解讀C++編程中派生類的組成和創立

解讀C++編程中派生類的組成和創立

編輯:關於C++

解讀C++編程中派生類的組成和創立。本站提示廣大學習愛好者:(解讀C++編程中派生類的組成和創立)文章只能為提供參考,不一定能成為您想要的結果。以下是解讀C++編程中派生類的組成和創立正文


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(公有的)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved