[問題] Virtual函數在Destructor內的問題
#include <stdio.h>
class A
{
public:
~A() { kerker(); }
virtual void kerker() { printf("A is kerkering\n"); }
};
class B : public A
{
public:
virtual void kerker() { printf("B is kerkering\n"); }
};
int main()
{
B* b = new B;
A* a = b;
a->kerker();
b->kerker();
delete b;
return 0;
}
程式如上,執行結果為
B is kerkering
B is kerkering
A is kerkering
B 是 A 的 subclass,A 和 B 都有 kerker() 這個函數且為 virtual
A 的 destructor 內也會呼叫 kerker()
現在造出一個 B 的 instance b
直接呼叫 b->kerker() 執行的當然是 class B 的 kerker()
就算轉型成 A 再呼叫,執行到的還是 class B 的 kerker()
但是當 delete B 時,會執行到 A 的 destructor
這時候 A 的 destructor 呼叫的 kerker() 卻變成是 class A 的 kerker() 了
這是為什麼呢?
請各位高手不吝賜教Orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.215.187
→
07/07 16:45, , 1F
07/07 16:45, 1F
→
07/07 16:48, , 2F
07/07 16:48, 2F
→
07/07 16:48, , 3F
07/07 16:48, 3F
→
07/07 16:49, , 4F
07/07 16:49, 4F
→
07/08 23:45, , 5F
07/08 23:45, 5F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):