3.1 C++繼承的概念及語法
參考:http://www.weixueyuan.net/view/6358.html、
總結:
繼承可以理解為一個類從另一個類獲取方法(函數)和屬性(成員變量)的過程。
被繼承的類稱為父類或基類,繼承的類稱為子類或派生類。
由於派生類可以將基類的代碼繼承過來,無需重新設計,因而繼承解決了代碼重用的問題,大大提高了軟件的開發效率
采用公用繼承方式,則基類的公有成員變量和成員函數的屬性繼承到派生類後不發生變化。
如果在繼承過程中不指名繼承方式時,編譯器系統會默認繼承方式為private或protected屬性。
雖然我們可以繼承到book類的私有成員,但是book類的私有成員變量在派生類中我們是無法直接訪問的,只能通過間接的方式訪問。
-----------------------------------
繼承是類與類之間的關系,是一個很簡單很直觀的概念,與現實世界中的繼承(例如兒子繼承父親財產)類似。
繼承可以理解為一個類從另一個類獲取方法(函數)和屬性(成員變量)的過程。如果類B繼承於類A,那麽B就擁有A的方法和屬性。被繼承的類稱為父類或基類,繼承的類稱為子類或派生類。
在上一章中我們例舉了不少book類相關的示例,book類中有兩個成員變量:title和price,即書的名字和價格。如果此時我們要按照編程語言將這些書進行分類,此時我們需要第三個成員變量language,這個時候我們沒有必要重新設計一個全新的類,只需要在book類的基礎上加上language屬性及其相關的方法即可。
此時就可以將我們需要的codingbook類繼承book類就可以得到book類的成員變量及成員函數,繼承後在添加需要的language屬性和相關的方法。新類codingbook叫做book類的派生類或子類
由於派生類可以將基類的代碼繼承過來,無需重新設計,因而繼承解決了代碼重用的問題,大大提高了軟件的開發效率。同時如果這些代碼在基類中運行無誤,則繼承之後到派生類中運行也是不會有問題的。
繼承並非只能進行一層,可以是任意層次的。比如codingbook繼承自book類,如果我們需要對codingbook類繼續添加某一新屬性時,同樣可以設計一個類繼承自codingbook類。
從book類中派生出codingbook類的語法如下例所示。
例1:
enum language{cpp, java, python,javascript, php, ruby}; class book { public: void setprice(double a); double getprice()const; void settitle(char* a); char * gettitle()const; void display(); private: double price; char * title; }; class codingbook: public book { public : void setlang(language lang); language getlang(){return lang;} private: language lang; };
為了方便起見,我們先在類定義前聲明了一個全局的枚舉類型language,用於表示編程語言。book類我們已經很熟悉了,關鍵是codingbook類的定義。在定義codingbook類時多出了“: public book”,除此之外codingbook類的定義和上一章介紹的類定義方法沒有什麽差別。其中關鍵字public指明繼承方式屬於公有繼承,book為被繼承的類名。采用公用繼承方式,則基類的公有成員變量和成員函數的屬性繼承到派生類後不發生變化。例如book類的公有的setprice和settitle成員函數繼承到codingbook類後,這兩個成員變量的屬性仍將是public屬性。如果在繼承過程中不指名繼承方式時,編譯器系統會默認繼承方式為private或protected屬性。
在本例中因為已經定義過一個book類,具有book類的基本屬性:書名和書的價格。現在需要一個新的類codingbook來描述編程類書籍,為此我們繼承book類中的所有成員及成員函數,並新增language屬性及相應的操作函數。雖然我們可以繼承到book類的私有成員,但是book類的私有成員變量在派生類中我們是無法直接訪問的,只能通過間接的方式訪問。間接訪問則是通過getprice、gettitle、setprice和settitle函數來實現的,因為這些函數在派生類中是public屬性的。如下表所示為codingbook類中的所有成員的一覽。
codingbook類成員 | 成員屬性 | 來源 |
---|---|---|
price | 不可訪問 | 繼承自book類 |
title | 不可訪問 | 繼承自book類 |
lang | private | codingbook新增 |
setprice | public | 繼承自book類 |
settitle | public | 繼承自book類 |
getprice | public | 繼承自book類 |
gettitle | public | 繼承自book類 |
dispaly | public | 繼承自book類 |
setlang | public | codingbook新增 |
getlang | public | codingbook新增 |
3.1 C++繼承的概念及語法