首先,给出结论:C++中 在构造函数与析构函数中都是可以调用虚函数的,只是该调用并不发生多态行为,仅仅是调用自身类中定义的版本。
对于该结论不应怀疑,C++primer第四版中文版 497页有说明!
下面给出代码解释:
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "A构造函数";
Test();
}
virtual ~A()
{
cout << "A析构函数";
cout << "A::Test()" << endl;
}
virtual void Test()
{
cout << "A::Test()" << endl;
}
};
class B :public A
{
public:
B()
{
cout << "B构造函数";
Test();
}
~B()
{
cout << "B析构函数";
Test();
}
virtual void Test()
{
cout << "B::Test()" << endl;
}
};
int main(int argc, char* argv[])
{
cout << "构造对象:" << endl;
A* pA = new B();
cout << endl<< "动态调用:" << endl;
pA->Test();
cout << endl;
cout << "析构对象:" << endl;
delete pA;
return 0;
}
两个类中都是一个 Test 虚函数,在各自的构造函数、析构函数中都有调用,但下面的结果很明显,调用的都是自己类的版本。