C++构造函数调用虚函数的有关问题

求教:C++构造函数调用虚函数的问题
本帖最后由 lc19890709 于 2013-10-17 16:52:01 编辑
今天去某公司面试遇到的题目:
父类中有一个虚函数,有实现,并在构造函数中调用该虚函数;子类中重新实现了这个虚函数;现在定义一个子类型的对象,问在构造这个对象时父类的构造函数调用的是哪个虚函数?
我回答说是父类的,说出于安全考虑,虚机制在构造函数中不起作用。
然后又问编译器是怎么做到这一点的?
这个我就不会了,就开始猜,说一般编译器碰到虚函数会动态绑定,通过虚指针去查虚函数表来确定要调用哪一个函数。但如果虚函数在构造函数中的话,那么编译器就会静态绑定,也就是编译时绑定。然后就被鄙视了。。

请教下各位大神,编译器到底是如何做到在构造函数中让虚机制失效的?
C++ 虚函数 继承 构造函数

------解决方案--------------------
这个时候只构造了父类,未构造子类呢,所以虚函数指针指向的是父类的虚函数地址;当构造子类时,发现有重写的虚函数,即会将子类虚函数地址覆盖父类的虚函数地址,也就是说:虚函数地址永远指向当前已构造的实例的虚函数地址。

所以不管在哪里通过指针或引用调用虚函数都是动态绑定;而通过具体实例调用虚函数则是静态绑定。

可能不是很清楚。