文章內容是把黑馬的課堂筆記選擇性的複製過來,便於後期學習,非原創!
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 物件導向知識點十二 多型
物件導向的三大特性 封裝性是基礎,繼承性是關鍵,而多型性是補充。多型是建立在虛函式的基礎之上的。靜態多型 函式過載,運算子過載,函式模板和類模板 動態多型 也稱為執行時多型,即在程式執行時刻才能決定的東西。靜態聯編 聯編出現在編譯連線階段,又稱為早期聯編,以實現靜態多型。動態聯編 程式中若出現函式呼...