線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1255
推到 Plurk!
推到 Facebook!

class

答題得分者是:aftcast
ioeouyvl
一般會員


發表:1
回覆:2
積分:0
註冊:2011-03-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-05-06 20:03:37 IP:175.96.xxx.xxx 訂閱
請問  有沒有其他方法可以呼叫B的解構子(如果不用virtual)
[code cpp]
請在此區域輸入程式碼
[/code]
class A
{
public:
A(){cout <<"A 建構子" < virtual ~A(){cout <<"A 解構子" <};
class B:public A
{
public:
B(){cout <<"B 建構子" < ~B(){cout << "B 解構子" <}
int main()
{
A *pa=new B();
delete pa;
}


aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-05-12 17:33:00 IP:210.64.xxx.xxx 訂閱

((B*)pa)->~B();

===================引 用 ioeouyvl 文 章===================
請問 有沒有其他方法可以呼叫B的解構子(如果不用virtual)
[code cpp]
請在此區域輸入程式碼
[/code]
class A
{
public:
A(){cout <<"A 建構子" <
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
ioeouyvl
一般會員


發表:1
回覆:2
積分:0
註冊:2011-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-05-12 22:51:44 IP:175.96.xxx.xxx 訂閱
請問前輩  這麼寫的要怎麼解釋阿???為什麼它可以這樣做????
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-05-19 20:14:32 IP:122.126.xxx.xxx 訂閱

int main()
{
A *pa=new B();
delete pa;
}


因為你new的時候就採取了向上轉型,即把子類別以父類別來看待、使用。就某些情形下這是好的使用方式。

然而你一但把 b 當父類別的a 來用使,b因伴演父類,所以就無法使用子類的東西。

但是,你知道的,b本就是用new B();生出來的,他100%就是b。所以,一定可以使用b的法方。但你得要讓compiler知道,它要換回原來的角色。

所以,那寫法就是把b物件,再轉回原來的b類別,如此就可以直接隨作b的方法,包含它的解構了!




===================引 用 ioeouyvl 文 章===================
請問前輩 這麼寫的要怎麼解釋阿???為什麼它可以這樣做????
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
ioeouyvl
一般會員


發表:1
回覆:2
積分:0
註冊:2011-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-05-23 23:34:52 IP:175.96.xxx.xxx 訂閱
謝謝前輩的教導。解決我的疑惑
系統時間:2024-03-29 5:12:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!