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成員函式與物件是沒有 耦合 關係...