6_1_构造中调虚函数.cpp
#include <iostream>
using namespace std;
class A361
{
public:
A361() { func(); } // 构造函数中调用虚函数是直接调用A361的func(),不会走虚函数表
virtual ~A361() {}
virtual void func() // 非构造函数,若此函数在A361构造函数中调用,那么还是按在构造函数中调用一样的规则,不会走虚函数表(不同编译器可能行为不同。)
{
cout << "A361 func()." << endl;
test();
}
virtual void test() { cout << "A361 test()." << endl; }
void go() { test(); } // 非构造函数中调用虚函数是走的虚函数表,会发生多态
};
class B361 : public A361
{
public:
virtual void func() { cout << "B361 func()." << endl; }
virtual void test() { cout << "B361 test()." << endl; }
};
int main_3_6_1()
{
/* 打印:
A361 func().
A361 test().
B361 test().
*/
A361 *pa = new B361();
pa->go();
// objdump -h xxx.o // linux下查看中间文件的头部信息(-h)
return 0;
}