C 中繼承,虛函式的呼叫問題

2021-07-11 15:36:36 字數 452 閱讀 1429

類繼承**如下

問:呼叫輸出的結果是什麼

class ca

void fun2()

};class cb:public ca

void fun2()

};void main()

呼叫輸出結果為:

cb::fun1

cb::fun1

ca::fun2

原因分析: 由於

ca *p =new cb();中,雖然p是ca指標,但是他指向的虛函式表是cb的虛函式表(多型),所以呼叫的虛函式是cb中的虛函式;

當子類有基類的同名成員,但是卻不是虛函式的時候基類的同名函式會被覆蓋掉(這個是link錯誤,或編譯錯誤)這個時候函式呼叫更具靜態型別(就是編譯時候的型別)

還有。。那個fun2裡不是又呼叫了一次fun1嘛,只要fun1是虛函式,在子類裡無論怎麼呼叫,

都應該是用子類定義的函式

C 中繼承與虛函式

一 類與類之間的關係 1 類與類之間可能會存在共性 2 類與類之間必定會有差異 3 為了節約開發時間和 量,我們在設計時可以把類的共項抽象出來形成乙個基礎類 基類 4 使用基類 差異生成乙個新的類叫派生類 二 繼承的語法 1 在設計乙個類時如果已有的類中有它需要的成員,它可以從已有的類中繼承哪些成員...

談談c 中繼承中的虛函式

c 是一種物件導向的程式語言的乙個很明顯的體現就是對繼承機制的支援,c 中繼承分很多種,按不同的分類有不同分類方法,比如可以按照基類的個數分為多繼承和單繼承,可以按照訪問許可權分為public繼承 protected繼承和private繼承,按照是否是虛擬繼承可以分為virtual繼承和non vi...

c 中繼承問題小結

1.c 中繼承有公有繼承,保護繼承,私有繼承 定義個基類 include using namespace std class base public void display cout huang endl protected int x private int y 定義乙個派生類 公有繼承 派生類...