virtual繼承和不繼承

2022-10-07 20:33:11 字數 560 閱讀 5443

用virtual修飾的虛函式,用來繼承重寫,沒有virtual修飾的,取決於父類

定義 父類 *x=new 子類

首先父類不能呼叫子類的函式,自能呼叫本身的函式,所以,只有兩種情況,1.無virtual修飾,呼叫本身函式。2.有virtual修飾,呼叫子類重寫的函式

定義 子類 *y=new 子類

子類對父類的函式,如果沒有同型函式,直接繼承父類的函式,如果型名,有virtual修飾,則重寫,無virtual修飾,則呼叫子類的。

特別的:如果子類和父類有同名但不同型,則不能呼叫父類的同名函式,不能繼承或重寫的同時還過載

總結:對於父類函式(virtual、非virtual),如果子類沒有同名函式,則正常繼承

對於父類函式(virtual、非virtual),如果子類有同名函式,無同型(形參不同)函式,則不能呼叫父類函式

對於父類函式(virtual、非virtual),如果有同型函式:

----非virtual函式由指標型別決定呼叫哪個,既和父類一致,編譯時確定

----virtual函式由指標指向的物件決定呼叫哪個(執行時決定)和子類一致,執行時確定

多重繼承 virtual

虛擬繼承可以使繼承自自己的class避免重複包含subobject of parent s parent,既包括member data,也包括member function.如果不使用virtual繼承,那在多重繼承的時候就會有多份copy在物件中,那呼叫parnent member functio...

virtual的使用,虛繼承

在c 中建立乙個函式 func parent base name 如果沒有使用virtual繼承,那麼呼叫該函式的時候只是呼叫父類中的name函式,如果寫了,那麼在呼叫函式的時候會相應的進行查詢是父類的物件進行呼叫還是子類的物件 過載重寫重定義 函式的使用 過載 乙個類中 重寫 父類子類中,如果子類...

css繼承性和不繼承的屬性。

在css中並不是所有的屬性都是能夠繼承的,因此在使用時一定要了解哪些是能夠繼承的哪些是不能夠繼承的。visibility和cursor能夠被所有元素繼承 letter spacing,word spacing,white space,line height,color,font,font famil...