C 虛函式練習題

2022-03-16 19:57:53 字數 1639 閱讀 3669

最近看了下c++虛函式的相關知識,現在想自己編寫**執行一下,可能在面試的時候有點小幫助,都是些基礎的不能再基礎的了

如下是基類與派生類的定義**,接下來的執行結果的分析,都是以此為依據:

1

class

base

4 ~base()

5virtual

void f(void)

6virtual

void g(void)

7virtual

void h(void) 8};

910class derived : public

base

13 ~derived()

14virtual

void f()

15virtual

void g1()

16virtual

void h1()

17 };

1、如果main函式是如下編寫:

1

intmain()

此時不會呼叫類中的建構函式,即不會任何輸出(如圖1所示)。說明,光是定義了類指標,並不會建立乙個類的例項

圖12、如果main函式如下編寫:

1

intmain() 則結果會如圖2所示,但是為什麼程式執行完,卻不執行base類的析構函式?我自己認為,new是分配堆區記憶體,而堆區是不能自動執行銷毀的,必須自己手動銷毀,所以這裡不會輸出base類中析構函式的執行語句;如果要想輸出base類中析構函式的執行語句,必須要加 delete b; b = null; 才可以實現,如圖3;說到這裡,我有個疑問,為什麼圖3中沒有輸出派生類derived中的析構函式語句「derived destructor」???請各位大神指教一下,我也是個菜鳥

圖2

圖3(注意,main函式裡面多加了兩句**)

圖4(注意**的修改)

注:上面的圖2,3,4 都是我一時興起編出來的,主要是面試的時候可以用到,並且可以幫助自己理解,下面才開始正式的虛函式呼叫

3、虛函式的呼叫

1

intmain()

這裡的指標b,只能呼叫到父類中的virtua1函式和子類中覆蓋父類的同名virtua1函式,也就是說,指標b在這裡並不能呼叫到子類函式中g1和h1兩個虛函式

執行結果如圖5;
圖5

圖6(區別就是沒有手動分配記憶體,這裡函式呼叫的情況和圖5一樣)

圖7(只是多加了子類物件d的相關呼叫)

函式練習題

1.打字軟體的正確率 編寫函式,計算字串匹配的準確率,類似於打字軟體 orginstr為原始內容,userstr為使用者輸入內容 2.模擬輪盤 遊戲 轉盤分為三部分 一等獎 二等獎和三等獎 輪盤轉的時候是隨機的,如果範圍在 0,0.08 之間,代表一等獎 如果範圍在 0.08,0.3 之間,代表二等...

python函式練習題

1 函式的定義 將可重複使用的,實現某種功能的 段組織在一起 2 函式的語法 def 函式名 引數 函式體 return 2.1 函式名是乙個變數,因此命名規則需遵守變數命名規則 3 函式的呼叫 函式名 4 函式的返回值 return 可空 none 單個 多個以tuple返回給呼叫者 5 函式的引...

遞迴函式練習題

1 寫乙個函式,接收乙個引數,用來返回這個函式的階乘並輸出 12345 def func num if num 1 return 1 ret func num 1 return num ret print func 5 2 寫乙個函式實現斐波那契數列 1,2,3,5,8,13,21,34,55,89...