C 繼承和多型1

2021-09-25 23:29:49 字數 2441 閱讀 1097

1.繼承

本質:**復用

#includeusing namespace std;

class a

private:

int ma;

}class b: public a

private:

int mb;

}

2.繼承關係class b : public  a

繼承類:

繼承方式(public、private、protect)

被繼承類

繼承類稱為父類或基類;被繼承類稱為子類或派生類;基類派生了派生類,派生類繼承基類。

3.派生類的記憶體布局

執行上面的**,結果為a類為4個位元組,b類為8個位元組。將這兩個類的記憶體布局畫出來如下:

4.派生類繼承了基類什麼?

能繼承:成員變數,及類作用域,靜態成員方法(除構造和析構以外的所有成員)

不能繼承:構造,析構,友元關係

5.派生類物件的生成/銷毀方式

前面也提到,派生類將基類中除去建構函式和析構函式的其他方法繼承了過來,那麼對於派生類物件中自己的成員變數和來自基類的成員變數,它們的構造方式是怎樣的呢?

答案是:1.先呼叫基類建構函式,構造基類部分成員變數,再呼叫派生類建構函式構造派生類部分的成員變數。2.基類部分成員的初始化方式在派生類建構函式的初始化列表中指定。3.若基類中還有成員物件,則先呼叫成員物件的建構函式,再呼叫基類建構函式,最後是派生類建構函式。析構順序和構造順序相反。見下:

#include using namespace std; 

class test

//預設值"= 0",對基類初始化

void show()

private:

int ma;

};class b : public a

b(int b = 0) :mb(b), a(b){}

private:

int mb;

};

若基類沒有預設值,在派生類中的初始化列表上指明基類的構造方式

b(int b):mb(b),a(b)
6.繼承的方式public:          任意位置

protected:    只允許在本類中 或子類中訪問

private:        只允許在本類中訪問(可以被繼承)

基類中不同訪問限定符下的成員  以不同的繼承方式 繼承 在派生類中的訪問限定(繼承過來的成員許可權不能超過繼承方式和父類原有許可權)

總的來說,父類成員的訪問限定符通過繼承派生到子類中之後,訪問限定符的許可權小於、等於原許可權。其中,父類中的private成員只有父類本身及其友元可以訪問,通過其他方式都不能進行訪問,當然就包括繼承。protected多用於繼承當中,如果對父類成員的要求是——子類可訪問而外部不可訪問,則可以選擇protected繼承方式。private繼承了只是不可見(有乙個,組合);public(是乙個)

7.類和類的關係

8.同名函式

派生類從基類中繼承過來的成員(函式、變數)可能和派生類部分成員(函式、變數)重名。1.前面提到,派生類從基類中繼承了基類作用域,所以同成員名變數可以靠作用域區分開(隱藏)。2.同名成員函式則有三種關係:過載、隱藏和覆蓋。

函式過載有三個條件,一函式名相同,二形參型別、個數、順序不同,三相同作用域。根據第三個條件,可知函式過載只可能發生在乙個類中,見下:

分析:base類和derive類的大小就是他們各自包含的成員變數的總大小,derive類繼承了base類中的成員變數,所以要比base類大4個位元組。在上面提到,這裡的方法呼叫都是依據指標的型別,所以我們可以看到 對基類指標p解引用得到的型別只和指標本身的型別相關。

C 繼承與多型(1)

繼承 繼承是使 可以復用的重要手段,也是物件導向程式設計的核心思想之一。例子 先看這樣一段 includeusing namespace std class a private int ma class b public a 繼承列表 private int mb int main 列印結果 可見,...

C 繼承和多型

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

C 繼承和多型

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