2006/12/13

Constructor 裡呼叫 virtual function

猜猜看下面這段程式會輸出啥?


#include <stdio.h>

class A
{
public:
A()
{
f();
}

virtual void f(void)
{
printf("A\n");
}
};

class B : public A
{
public:
B() : A()
{
}

void f(void)
{
printf("B\n");
}
};

int main(int argc, char *argv[])
{
B b;
return 0;
}




答案是 A。
我的結論是,constructor 裡呼叫的函式會是自己或 parent 的,即使它被 overwrite,而且被呼叫的函式不能宣告成 pure virtual。

沒有留言: