C 繼承和多型

2021-09-20 12:52:46 字數 3398 閱讀 5781

繼承是使**復用的一種機制。(本質)

單繼承:乙個派生類乙個基類派生。

多繼承:乙個派生類有兩個人或者多個基類。(如:馬與驢雜交所生的騾子就有兩個基類,騾子既繼承了馬的一些特徵,也繼承了驢的一些特徵)

構造派生類包括:

1、從基類接收成員;(派生類接收基類的全部成員,沒有選擇)

2、調整從基類接收的成員;(可以改變基類成員在派生類中的訪問屬性(通過繼承的方式實現))

3、在宣告派生類時增加的成員(體現派生類對基類功能的擴充套件)

#include#include#include#if0

class base

protected:

int ma;

};class derive:public base //派生了derive

private:

int mb;

};int main()

#endif

class people

void eat()

void sleep()

void play(std::string name)

static void show()

static int count;

protected:

std::string mname;//28

int mage;//4

bool m***;//1

};int people::count = 0;

class student:public people

private:

std::string mid;

};int main()

繼承與派生類的關係:派生類是基類的具體化,而基類是派生類的抽象。

1、派生類繼承了基類的什麼東西?

派生類繼承了除基類構造以外的所有成員

2、繼承方式:public、private、protected

3、訪問限定符:

public:在任意位置可見;

private:在本類類中訪問;

protected:在本類類中和子類類中。

基類中不同訪問限定符下的成員以不同的繼承方式繼承後在派生類中的訪問情況:

繼承      \   訪問限定

public

protected

private

public

public

protected

不可訪問

protected

protected

protected

不可訪問

private

private

private

不可訪問

(1)類和類的關係:

1、組合關係;has_a關係      a part of

2、繼承關係;is_a關係         a kind of(私有繼承不是is_a的關係,是has_a的關係)

protetced/private繼承是乙個實現繼承,基類的部分成員並非完全成為子類介面的一部分,是 has-a 的關係原則。晚餐有香蕉,香蕉不是晚餐

3、**關係;

class a//基類

public:

int ma;

protected:

int mb;

private:

int mc;

};class b : private a /*protected/private繼承是乙個實現繼承, 基類的部分成員 並非完全成為子類介面 的一部分, 是 has-a 的關係原則, 所以非特殊情況下不會使用這兩種繼承關係, 在絕大多數的場景下使用的 都是公有繼承。

基類的private成員 在派生類中是不能被訪問的, 如果基類成員 不想在類外直接被訪問, 但需要 在派生類中能訪問, 就定義為protected。 可以看出保護成員 限定符是因繼承才出現的。*/

void show() };

class c :public b // public繼承是乙個介面繼承,保持is-a原則,每個父類可用的成員對子類也可用, 因為每個子類物件也都是乙個父類物件。

void show() };

int main()

(2)同名函式的關係:1、過載 overload

①同作用域;

②同名;

③引數列表不同。 

2、隱藏  overhide

①作用域不同   繼承關係

隱藏了基類中所有同名函式。(隱藏:繼承關係、同名)

3、覆蓋   override 

派生類中同名同參的虛函式覆蓋基類中同名同參的虛函式

①繼承;

②虛函式;

③同名同參。

(3)基類和派生類指標或者引用的相互指向或者引用

允許基類指標指向或者引用派生類物件;

不允許派生類指標指向或者引用基類物件;

(4)派生類的構造和析構順序(先構造後析構)

構造順序:

1、呼叫基類建構函式,對基類資料成員初始化;

2、呼叫子物件建構函式,對子物件資料成員初始化;

3、再執行派生類建構函式本身,對派生類資料成員初始化。

析構順序:(與建構函式相反)

1、先執行派生類自己的析構函式,對派生類新增加的成員進行清理;

2、呼叫子物件的析構函式,對子物件進行清理;

3、呼叫基類的析構函式,對基類進行清理。

同一介面指向不同形態

定義:同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果(就是用基類的引用指向子類的物件)

特點:①提高程式的可復用性;(不必為每乙個派生類編寫功能呼叫,只需對抽象基類進行處理)

②提高可擴充性和可維護性

三要素: 繼承、重寫和父類引用指向子類物件;

父類引用指向不同的子類物件時,呼叫相同的方法呈現出不同的行為就是類多型的特性。

C 繼承和多型

在c 的物件導向的大家庭裡,我感覺繼承算是很重要的了,因為有很多的東西都是依賴於繼承和多型的,所以單獨的在第三篇部落格裡做總結和昇華。繼承在面相物件的地方是乙個很是重要的東西,可以說在物件導向的世界裡沒有了繼承就沒有了這麼多的東西,而沒有了多型就沒有了多彩的世界。類的繼承是最為普遍的事情了,可是類又...

C 繼承和多型

剛學習了c 繼承和多型,對virtual override seal override new有點了解,在此寫下這篇文章以供以後參考,若有錯誤或不足,還望各位指出。這裡有3個類,分別是grandfather father son。好,我們現在來分析一下grandfather的遺產怎麼讓father繼...

c 繼承和多型

01 什麼是繼承?舉例說明 public class em public int age public class eb em public int yearof 02 什麼是多型?舉例說明 public virtual string sauhi public override string say...