C 多型繼承解析

2021-06-23 01:28:23 字數 1526 閱讀 2348

在c++中,類的概念是最重要的,類就是實物的乙個模版,或是一種抽象的方法和資料的封裝,每用類宣告乙個變數,那我們就叫做類的例項化,在類的生存區域,會呼叫建構函式,在臨界區則會呼叫析構函式,構造的物件在記憶體中的表示就是類中的資料成員依次構造,如class string;在記憶體中這個string類共有8位元組,那麼繼承又是如何呢,,當繼承了這個類後,在新增乙個int型別,則class mystring:public string;sizeof(mystring)的大小有12個位元組,因為要算在基類的兩個資料成員,那麼我們為什麼要說繼承呢?

因為乙個個單獨的類固然好用,但是要想盡可能的復用**,最好的方法事實上就是繼承,繼承後,我們就可以使用父類的public和protected的函式和資料成員,使用繼承的程式設計就是物件導向程式設計,如stack類繼承llist類就是乙個很好的方法,那麼繼承的作用是如此大可以復用**,現在就可以到此結束了嗎?

class employee ;};

class c_programmer:public employee;};

class cpp_programmer:public c_programmer

;class advanced_manager:public cpp_programmer

;

在上面的類體系中,我們層層繼承,每乙個更高階別的都會復用低階別的函式,因為在職場人員要懂得基本的禮儀,而後c程式設計師以及更高的職位需要更多的知識那麼我們想象一下,這些同學們來到菜市場買菜,而我們則是要測量他們的這也技能,那該怎麼辦呢,事先我們並不知道他們是做什麼的,那又如何來測量呢,我們可以根據基類的指標可以指向派生類的位址來做(因為派生類同時也是乙個基類物件,雖然複雜了一些),如employee *p=new cpp_programmer;p->ability();,呵呵這樣做看起來很好,可事實上卻只能測量出employee的技能,這是為什麼呢,我們不是指向了cpp_programmer的事例了嗎?

因為雖然指向了派生類也就是cpp_programmer的位址,但是基類並不知道派生類的內容,基類指標只知道sizeof(基類自己)的內容,它無法知道sizeof(派生類)的內容,這時我們必須在基類的內容中新增乙個指標保留派生類的內容,這就是virtual的作用了。

虛函式是一種可以讓派生類過載基類函式的機制,即通過乙個在類內部建立乙個指標指向一張表來維護函式指標,那麼當我們寫下employee *p=new cpp_programmer時,因為在cpp_programmer的內部建立了乙個指標,而指標是指向乙個構造了虛函式的表,而這個表是指向cpp_programmer的函式,所以它可以正確的呼叫,即呼叫實體的類型別而不是基類指標。

因此,我們可以這樣寫,

class employee ;};

class c_programmer:public employee;};

class cpp_programmer:public c_programmer;};

class advanced_manager:public cpp_programmer;};

int main()

C 多型 繼承多型

什麼是多型?個人理解為 在程式語言繼承關係中,子類能替代父類,表現出不同的行為。換句話說 在繼承關係中,乙個類被例項化被其子類替代,子類中有父類的虛方法重寫,或者有父類同名方法 new 呼叫相同方法時候,將表現出子類或者父類中不同行為 老闆,上 static void main string arg...

C 繼承多型

1 什麼是繼承?舉例說明 繼承 子類繼承父類,繼承而得到的類稱為派生類,被繼承的類叫做基類 public class humanity 基類 public string id public string name public string public int age public class s...

C 繼承多型

01 什麼是繼承?舉例說明 public class car public class gojiaoche car 02 什麼是多型?舉例說明 public class car public virtual void kai public class gojiaoche people 03 什麼是抽...