C 繼承(總結)

2021-09-12 17:37:35 字數 2878 閱讀 8020

類的繼承:解決**的復用

已存在的類稱為「父類」或「基類」

新建立的類稱為「子類」或「派生類」

乙個類從已有的類中獲取已有特性叫做類的繼承

從已有的類產生乙個新的子類叫做類的派生

乙個派生類只從乙個基類中派生,這稱作單繼承

派生類是基類的具體化,基類是派生類的抽象化

繼承方式:公用繼承(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 繼承總結

繼承概念 在原有的類不變的基礎之上,新增一些函式,對功能進行拓展 繼承特點 是物件導向程式設計的的層次結構 是實現由簡單到複雜的認知過程 基類 被繼承的類 派生類 在繼承之後產生的新類 例子 手機系統會不斷更新,然而,我們的手機更新之後的功能只是對原來的功能進行優化和新增 繼承格式 派生類名 繼承許...