cpp筆試 virtual函式類繼承問題

2021-08-13 04:16:47 字數 602 閱讀 2644

0x00筆試題

class a

};class b :public a

virtual void test() };

class c :public b

};int main()

0x01解析

((b*)(&func))->func()
這個看過設計模式就知道有乙個原則叫做黎克特制替換原則(

黎克特制替換原則(liskov substitution principle lsp)物件導向設計的基本原則之一。 黎克特制替換原則中說,任何基類可以出現的地方,子類一定可以出現。 lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為

)所以這個結果輸出是:

cout << "c func" << endl;

((b)func).func();
每個派生類物件包含乙個基類部分,強轉派生類(由大轉小)將丟失派生類的特性 所以這個結果輸出是:

cout << "b func" << endl;

總結 筆試中常見virtual函式問題

c 中的虛函式 virtual function 1.簡介 虛函式是c 中用於實現多型 polymorphism 的機制。核心理念就是通過基類訪問派生類定義的函式。假設我們有下面的類層次 class a class b public a 那麼,在使用的時候,我們可以 a a new b a foo ...

總結 筆試中常見virtual函式問題

c 中的虛函式 virtual function 1.簡介 虛函式是c 中用於實現多型 polymorphism 的機制。核心理念就是通過基類訪問派生類定義的函式。假設我們有下面的類層次 class a class b public a 那麼,在使用的時候,我們可以 a a new b a foo ...

類中static函式能否virtual

關於類中靜態函式能否為虛函式問題,有給出解釋很有道理,與大家共同分享一下 解釋一 oophaisky 首先,從 巨集觀 上來說,static成員函式其實並不算 成員 它相當於在類域中定義了乙個全域性函式 哈哈,好像有點兒自相矛盾,但是相信大家能夠理解 所以static成員函式與物件是沒有 耦合 關係...