類的繼承:解決**的復用
已存在的類稱為「父類」或「基類」
新建立的類稱為「子類」或「派生類」
乙個類從已有的類中獲取已有特性叫做類的繼承
從已有的類產生乙個新的子類叫做類的派生
乙個派生類只從乙個基類中派生,這稱作單繼承
派生類是基類的具體化,基類是派生類的抽象化
繼承方式:公用繼承(public)、私有繼承(private)、受保護繼承(protected),預設為私有繼承
公用繼承:基類的公用、私有成員在派生類中保持原有的訪問屬性,私有成員仍為基類私有
私有繼承:基類的公用、保護成員在派生類中成了私有成員,私有成員仍為基類私有
受保護繼承:基類的公用、保護成員在派生類中成了保護成員,私有成員仍為基類私有
派生類的構成:從基類中接收成員、調整從基類接收的成員、在宣告派生類時增加的成員
多級派生時的訪問屬性:與上面一致,層層剝選(最常用的還是公有繼承)
接下來是乙個公有繼承的栗子:
#include#includeclass person
void display()
private:
std::string _name;
int _age;
};class student : public person
protected:
int _stuid;
};class teacher :public person
protected:
int _jobid;
};int main()
當然應該注意的是:派生類後一定是引數的總表
派生類的建構函式和析構函式:
基類的建構函式是不能繼承的,所以對基類成員的初始化工作也要由派生類的建構函式承擔
有子物件的派生類的建構函式:
1、對基類資料成員初始化
2、對子物件資料成員初始化
3、對派生類資料成員初始化
執行派生類建構函式的順序:
1、呼叫基類的建構函式,對基類資料成員初始化
2、呼叫子物件建構函式,對子物件資料成員初始化
3、呼叫派生類建構函式,對派生類資料成員初始化
在這裡有必要解釋一下----子物件: 子物件是物件的物件(可以理解為結構體型別的成員可以是結構體變數)
再來個栗子:
class student
void display()
private:
int _num;
std::string _name; };
class student1 :public student
void show() }
void show_monitor()
private:
student monitor;//定義子物件monitor
int _age;
std::string _addr;
};int main()
**說明一切。.
派生類建構函式的特殊形式:
1)不需要對派生類新增的成員函式進行任何初始化操作時,派生類的建構函式的函式體可以為空,即建構函式為空函式
2)基類中沒有定義建構函式,或定義無參的建構函式,在定義派生類建構函式時可以不寫基類的建構函式
多重繼承:乙個派生類有兩個或多個基類,派生類從兩個或多個基類中繼承所需的屬性
class d:public a,private b,protected c
派生類建構函式名(總參數列):基類1建構函式(參數列),基類2建構函式(參數列)
派生類中新增資料成員初始化
多重繼承的二義性:不同基類中有同名的資料成員
引用類的直接派生類名來指出訪問哪個資料成員 c1.a::a = 3
為了解決多重繼承的二義性,c++引入了虛基類
虛基類:在繼承間接共同基類時只儲存乙份成員
虛基類並不是在宣告基類時宣告的,而是在宣告派生類時,指定繼承方式時宣告的
虛基類的初始化:
如果虛基類中定義了帶引數的建構函式,而且沒有定義預設建構函式,則在其所有派生類中,通過建構函式的初始化表對虛基類進行初始化。
注意:在最後的派生類中不僅要負責對其直接基類進行初始化,還要負責對虛基類初始化
因為多重繼承存在二義性,因此如果能用單一繼承解決的問題就不要使用多重繼承
來個虛基類的簡單栗子:
class person
protected:
string _name;
int _age;
char _***;
};class teacher :virtual public person
protected:
string _title;
};class student :virtual public person
protected:
float _score;
};class graduate :public teacher, public student
void show()
private:
float _wage;//津貼
};int main()
虛繼承就是將類的重複部分保留乙份,達到去重的效果,此**中原本student類和teacher類中都繼承了person類的成員,再由graduate類繼承,原本應該是有兩份person類成員的,但是這裡是使用虛繼承,因此重複部分只保留乙份,虛繼承關鍵字virtual。 C 繼承總結
繼承是物件導向程式設計中軟體重用的關鍵技術。繼承機制使用已定義的類作為基礎建立新的類定義,新的類是原有類的資料及操作與新類所增加的資料及操作的組合。新的類把原有的類作為基類引用,而不需要修改原有類的定義。新的類作為派生類引用。這種可擴充 可重用技術大大降低了大型軟體的開發難度。c 中描述類繼承關係的...
C 繼承總結
一 基類和派生類 類繼承關係的語法形式 class 派生類名 基類名錶 資料成員和成員函式說明 其中,基類名錶 的語句格式如下 訪問控制 基類名1,訪問控制 基類名2,訪問控制 是表示繼承許可權的關鍵字,稱為訪問描述符。可以是 如果省略訪問描述符,則c 認為是私有繼承。如果用關鍵字struct 而不...
C 繼承總結
繼承概念 在原有的類不變的基礎之上,新增一些函式,對功能進行拓展 繼承特點 是物件導向程式設計的的層次結構 是實現由簡單到複雜的認知過程 基類 被繼承的類 派生類 在繼承之後產生的新類 例子 手機系統會不斷更新,然而,我們的手機更新之後的功能只是對原來的功能進行優化和新增 繼承格式 派生類名 繼承許...