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中開啟資源時,它都把這一行 刪除掉了。我之所以...