C 九 類和物件(多型)知識點

2021-10-18 19:23:28 字數 2509 閱讀 7495

文章內容是把黑馬的課堂筆記選擇性的複製過來,便於後期學習,非原創!

1、多型

多型分為兩類

靜態多型和動態多型區別:

class

animal};

class

cat:

public animal};

class

dog:

public animal};

//我們希望傳入什麼物件,那麼就呼叫什麼物件的函式

//如果函式位址在編譯階段就能確定,那麼靜態聯編

//如果函式位址在執行階段才能確定,就是動態聯編

void

dospeak

(animal & animal)

//位址早繫結,在編譯階段就能確定函式位址。如果想執行讓貓說話,函式位址不能提前繫結。需要在執行階段繫結,位址晚繫結。

////多型滿足條件:

//1、有繼承關係

//2、子類重寫父類中的虛函式 函式名相同,引數不一樣叫過載,函式名及引數相同叫重寫。子類中virtual可寫可不寫

//多型使用:

//父類指標或引用指向子類物件

void

test01()

intmain()

多型滿足條件

多型使用條件

重寫:函式返回值型別 函式名、引數列表完全一致稱為重寫

函式名相同,引數不一樣叫過載,函式名及引數相同叫重寫

此時大小變成了4,因為類內部結構發生改變,內部多了乙個指標。

沒重寫時

重寫後多型的優點:

//多型實現

//抽象計算器類

//多型優點:**組織結構清晰,可讀性強,利於前期和後期的擴充套件以及維護

class

abstractcalculator

//實現計算器抽象類。

int m_num1;

int m_num2;};

//加法計算器,繼承抽象類

class

addcalculator

:public abstractcalculator};

//減法計算器

class

subcalculator

:public abstractcalculator};

//多型使用條件:父類指標或引用指向子類物件。試試指標。

void

test02()

2、純虛函式和抽象類抽象類特點

class

base

;void

test01()

父類指標或引用指向子類物件:

//業務函式

void

dowork

(abstractdrinking* drink)

void

test01()

3、虛析構與純虛析構

class

animal

virtual

void

speak()

=0;//析構函式加上virtual關鍵字,變成虛析構函式

//virtual ~animal()

//virtual

~animal()

=0;//需要宣告也需要寫具體實現,因為父類中可能也有堆區釋放問題};

animal::

~animal()

//和包含普通純虛函式的類一樣,包含了純虛析構函式的類也是乙個抽象類。不能夠被例項化。

class

cat:

public animal

virtual

void

speak()

~cat()

}public

: string *m_name;};

void

test01()

intmain()

可以結合課件例子來看

C 知識點 類和物件

c 知識點目錄索引 1.類和物件 2.類和物件的特點 3.具體例子 3.1 類的定義 類內定義成員函式 class person 類外定義成員函式 class person void date show 類外寫成員函式必須指明函式屬於哪乙個類域 void test 4.類的作用域 例 類的宣告 cl...

C 類 物件知識點

在類體內不允許對成員函式進行初始化。定義類時,類的資料成員不佔記憶體空間 但是,建立類的物件時,只為每個物件分配用於儲存資料成員的記憶體,不為函式成員分配記憶體。在定義類時,不能定義該類的變數,只能定義該類型別的指標成員和該類型別的引用成員。淺拷貝和深拷貝的區別 當類的資料成員是指標型別時,深拷貝能...

C 物件導向知識點十二 多型

物件導向的三大特性 封裝性是基礎,繼承性是關鍵,而多型性是補充。多型是建立在虛函式的基礎之上的。靜態多型 函式過載,運算子過載,函式模板和類模板 動態多型 也稱為執行時多型,即在程式執行時刻才能決定的東西。靜態聯編 聯編出現在編譯連線階段,又稱為早期聯編,以實現靜態多型。動態聯編 程式中若出現函式呼...