实验目的
最近突然好奇,如果在构造函数中调用虚函数会怎么样?
主要是因为构造函数过程会做这样几个事:
- 变量初始化
- 调用父类构造
- 虚函数表地址赋值给this指针
所以很好奇,为什么构造函数可以调用虚函数(之前的理解是,这个时候应该还没有虚函数表才对)
实验过程
- C++实验设计
class base {
public:
virtual void test() { cout << "test\n" << endl; };
};
class children:public base
{
public:
int x;
children():x(15)
{
cout << (this) << endl;
this->test();
}
virtual void test() { cout << "children\n" << endl; };
};
class grandchildren:public children
{
public:
int x;
grandchildren() :x(15) {
cout << (this) << endl;
this->test();
}
virtual void test() {
cout << (this) << endl;
cout << "grandchildren\n" << endl; };
};
void main() {
base* ly = new grandchildren;
}
- 对应的汇编代码

实验结论
根据汇编代码可以了解到
- 先得到this指针
- 调用父类构造函数
- 虚函数表地址 赋值 给this指针
- 类变量初始化
本文探讨了在C++中构造函数内部调用虚函数的现象,通过实例和汇编代码解析,揭示了构造函数如何在继承和虚函数表的作用下完成初始化过程。
712

被折叠的 条评论
为什么被折叠?



