關於繼承的乙個問題

2021-05-18 00:07:21 字數 962 閱讀 2362

class a

virtual ~a()

};class b : public a

virtual ~b()

};class c : public b

virtual ~c()

};int fun(int n)

char   *   last4hex(unsigned   int   num,   char   a[5])  

int main(int argc, char* argv)

p->func();

a* q = new c;

delete q;

fun(12345);

b* m = new c;

delete m;

//c* c = new c;

/*unsigned   long   num   =   0x00102000;  

char   a[5],   b[5];  

printf(  

"%s   %s/n",  

last4hex(num   >>   0x10,   a),  

last4hex(num,   b)  

);   */

return 0;

}結果輸出 :

a* q = new c;

delete q;是三個類的構造和a的析構,為了構造出a,所以要進行三次構造,而指標畢竟是a的指標,所以只會呼叫a的析構。

b* m = new c;

delete m;

會呼叫兩兩次構造,即b和c,而會呼叫兩次析構,a和b

這樣做是很危險的,如果c裡面的構造在堆上new了一片空間, 那麼將會造成記憶體的洩露

如果將析構函式都設定為虛函式

那麼a* q = new c;做法是安全的

但是b得做法仍然是不安全的,他會呼叫三次析構,因為new的是c,但是使用b的指標指向了c,所以只會構造b和c。

關於繼承的乙個問題

關於繼承的乙個問題 liupq 2009.12.5 下面程式中的f2 函式為什麼是錯誤的 include include using namespace std class abc protected int n class def public abc error void f3 def b pr...

JAVA中關於繼承和隱藏的乙個另類問題。

成員變數的隱藏 如果在子類中對從父類繼承來的成員變數進行重新定義,即出現了子類變數對父類變數的隱藏。所謂隱藏是指子類擁有兩個相同名字的變數,乙個是繼承自父類,另乙個是由自己定義的。當子類執行它自己定義的方法時,如果操作該變數,所操作的是它自己定義的變數,而把繼承自父類的變數 隱藏 起來。當子類執行從...

乙個關於 include的問題

2001年05月03日 12 04 00 乙個關於 include的問題 趙湘寧 問題 我試圖將乙個標頭檔案包含在工程的資源檔案中。為此在.rc檔案中新增了如下一行 include myfile.h 雖然執行沒有問題,但是每次在visual studio中開啟資源時,它都把這一行 刪除掉了。我之所以...