C 繼承與多型(1)

2021-09-14 03:27:58 字數 3129 閱讀 4423

繼承:繼承是使**可以復用的重要手段,也是物件導向程式設計的核心思想之一。

例子:

先看這樣一段**:

#includeusing namespace std;

class a

private:

int ma;

};class b :public a// :繼承列表

private:

int mb;

};int main()

列印結果:

可見,b繼承了a的資料。解釋如下

當基類、派生類有相同的成員變數時,派生類物件訪問成員變數,訪問的是派生類中的,若訪問基類的需加上基類的訪問限定。

#includeusing namespace std;

class a

void show()

public:

int ma;

};class b :public a// :繼承列表

public:

int ma;

};int main()

列印結果

繼承了什麼?

#includeusing namespace std;

class a

void show()

static void print(a &lhs)

public:

int ma;

};class b :public a

public:

int ma;

};int main()

列印結果:

說明靜態成員方法,普通成員方法都可以被繼承。

那什麼不可以被繼承??

構造、析構、友元關係(父親的朋友不是兒子的朋友)

繼承的特點:

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

private:只允許在本類中使用。

類和類的關係:

1.組合關係 has_a / apart of    桌腿是桌子的一部分

2.繼承關係 is_a / a kind of      男人是人的一種

3.**關係(容器、介面卡的實現)

限制了底層的介面,對外提供了一種新的特性。

同名函式的關係:

1.過載: overlkoad

1)   同作用域

2)同名

3)引數列表不同

2. 隱藏: overhide

1)作用域不同、繼承關係

2)隱藏了基類中所有的同名函式

3. 覆蓋: override  (虛函式)

**解釋:

#includeusing namespace std;

class base//這個類中,兩個show()是過載關係

void show()

void show(int rhs)

protected://可以擴充套件,且不能在類外訪問

int ma;

};class derive :public base

void show()

private:

int mb;

};int main()

基類和派生類的構造和析構順序:

#includeusing namespace std;

class base//這個類中,兩個show()是過載關係

base(int a):ma(a)

void show()

void show(int rhs)

~base()

protected://可以擴充套件,且不能在類外訪問

int ma;

};class derive :public base

void show()

~derive()

private:

int mb;

};int main()

列印結果:

得出:先基類構造,後派生類構造。(先構造的後析構,後構造的先析構)

思考:基類和派生類的相互指向

int main()

總結:基類的指標可以指向派生類的物件,派生類的指標不可以指向基類的物件(不允許)

解釋:  小範圍可以指向大範圍。

C 繼承與多型

派生類繼承基類 又稱父類 超類 的屬性和方法,在此基礎上可以進行修改或新增新的屬性和方法。class 派生類名 繼承方式 基類名 為了保護基類的資料封裝性,無論哪種繼承方式,積累的私有成員在派生類中都是不可見的。1.public繼承 基類的訪問許可權在派生類中不變。公有還是公有,保護還是保護,派生類...

C 繼承與多型

1 分析菱形繼承的問題。2 剖析虛繼承是怎麼解決二義性和資料冗餘的 首先,我們先來看乙個菱形繼承的程式。為了解決以上問題,我們引入虛繼承的語法。可以有效的解決菱形繼承的資料冗餘和二義性問題。1.虛繼承解決了菱形繼承體系裡子類物件包含多份父類物件的資料冗餘問題和浪費空間的問題。2.虛繼承看起來複雜,但...

C 繼承與多型

c 是一種物件導向的語言,最重要的乙個目的就是 提供可重用的 而類繼承就是c 提供來擴充套件和修改類的方法。類繼承就是從已有的類中派生出新的類,派生類繼承了基類的特性,同時可以新增自己的特性。實際上,類與類之間的關係分為三種 組合和繼承。以下是三種關係的 為了更好的理解 基類可以派生出派生類,基類也...