多型的好處
多型的好處
擴充套件性提高 組織性強 可讀性強
如果父類中有了虛函式,子類並沒有重寫父類的虛函式,那麼這樣的**是毫無意義的
如果子類不重寫父類虛函式,那麼沒有用到多型帶來的好處,而且內部結構還變得更為複雜
#include
using
namespace std;
class
calculator
}int m_a;
int m_b;
protected
:private:}
;// 開閉原則 ——對擴充套件進行開放 對修改進行關閉
// 利用多型實現計算器
class
abstractcalcylator
int m_a;
int m_b;};
class
addcalculator
:public abstractcalcylator};
class
subcalculator
:public abstractcalcylator};
class
multicalculator
:public abstractcalcylator};
void
test01()
// 多型的好處
// 擴充套件性提高 組織性強 可讀性強
// 如果父類中有了虛函式,子類並沒有重寫父類的虛函式,那麼這樣的**是毫無意義的
// 如果子類不重寫父類虛函式,那麼沒有用到多型帶來的好處,而且內部結構還變得更為複雜
intmain()
抽象類和純虛函式
純虛函式 vir tual void f() = 0;
如果乙個類中有純虛函式出現,那麼這個類就無法例項化物件了,有純虛函式的類,也稱為抽象類
如果子類繼承了抽象類,那麼子類必須要重寫父類中的純虛函式,否則子類也屬於抽象類
虛析構和純虛析構
如果子類中有屬性建立在堆區,那麼多型情況不會呼叫子類的析構**,導致記憶體洩露
解決方案:利用虛析構或者純虛析構
純虛析構 類內表明,類外必須實現
如果乙個類中有了純虛析構函式,那麼這個類也屬於抽象類
#include
using
namespace std;
class
animal
virtual
void
speak()
/* virtual ~animal() // 虛析構解決的問題是當子類中有堆區內容,釋放的時候導致釋放不乾淨,記憶體洩漏
*/// 純虛析構 有宣告 也必須有實現 如果乙個類中 有了純虛析構函式 那麼這個類也屬於抽象類
virtual
~animal()
=0;}
;animal::
~animal()
class
cat:
public animal
void
speak()
~cat()
}char
* m_name;
// 貓的姓名};
void
test01()
intmain()
向上向下型別轉換
父類轉子類 向下型別轉換 不安全
子類轉父類 向上型別轉換 安全
如果發生多型,總是安全的
C 多型學習(二)完整定義 什麼是多型?
函式過載,是一種多型現象,通過命名傾軋在編譯階段決定,故稱為靜多型。動多型,不是在編譯器階段決定,而是在執行階段決定,故稱為動多型。動多型形成的條件如下 1,父類中有虛函式。2,子類override 覆寫 父類中的虛函式。3,將子類物件位址賦給父類的指標,並發生虛函式呼叫。如果不用指標,用引用必須一...
C 學習筆記之多型 多型的學習 多型學習
c 學習筆記之多型 多型的學習 多型學習 多型分為兩類 靜態多型 函式過載和運算子過載屬於靜態多型,復用函式名 動態多型 派生類和虛函式實現執行時多型 靜態多型和動態多型的區別 靜態多型的函式位址早繫結 編譯階段確定函式位址 動態多型的函式位址晚繫結 執行階段確定函式位址 動態多型滿足條件 動態多型...
C 多型學習
純虛函式,0是告訴編譯器函式沒有主體 virtual int area 0 這個學習中有個點不懂,是關於指標的,先看 class shape virtual int area 純虛函式 virtual int area 0 class rectangle public shape int area ...