虛函式有關問題分析

2021-08-26 23:26:42 字數 997 閱讀 4063

#include#includeusing namespace std;

class foo

; virtual void func11()

void func2()

virtual void func3()

int data1;

static int data2;

};int foo::data2=1;

class afoo:public foo

void func11()

void func2()

void func3()

virtual void func4()

};class bfoo:public afoo

void func11()

void func2()

void func3()

void func4()

};int main(void)

輸出結果:

分析:(1)malloc和new的區別,malloc只分配記憶體,new不僅分配記憶體,還執行建構函式。

(2)如果乙個類中包含了虛函式,那麼它的每個物件就有乙個虛函式表,用乙個指標vptr指向這個虛表,虛表中的每一項指向乙個虛函式(你上面的例子只有乙個虛函式,所以虛表就一項)

(3)這個虛表的建立是在建構函式中完成的(這個過程我們看不到)

(4)(5)要想實現虛函式的特性,必須將基類函式定義為虛函式,帶有虛函式的子類函式不加virtual修飾符也具有虛函式的特性

#includeclass d{};

class e;

class a

f2()

};class b:public a

f2()

};void main()

結果:

TEC EXAM 有關虛析構函式的問題

以多繼承中基類中的析構函式是否是virtual有關.多型的形式呼叫base1 p new derived 或者 derived der base1 p der 最後delete p的時,是否呼叫了其他的的如之類der中的函式以及base2的析構函式相關。可以看出如果沒有virtual的話,屬於安全有...

有關虛(virtual)析構函式

記得有一次在面試的時候被問到虛析構函式的作用,當時回答得不是很好,故現在想重新整理下。先看下下面的 include iostream using namespace std class base base 大家關鍵是看這句 virtual void f class derived public ba...

虛函式有關面試題

class a virtual void p virtual a class b public a void p b int main int,char 這段程式的輸出 abba 題目想構造乙個b類的物件,b繼承自a,所示首先構造a,a中構造函式呼叫p,雖然p是虛函式,按理來說應該動態繫結,但是此時...