问题描述
我知道constructor是先基类,下面这段代码可以用父类的成员变量给基类赋值,是不是先为父类分配变量空间?
#include<iostream>using namespace std;class Base{public: Base(int& a) :_base_a(a){ cout << 'Base:'<<endl; } virtual ~Base(){};private: int& _base_a;};class Parent : public Base{public: Parent() :Base(_par_a){ cout << 'Parent: '<<endl; } int _par_a;};void main(){ Parent p; p._par_a = 1;}
问题解答
回答1:分配空间是先于初始化的,先完成空间的分配,然后再初始化成员变量。
回答2:当你构造一个p的时候,C++先开辟了一个大小为sizeof(Parent)的空间,然后先执行了Base(_par_a)。但是这个时候_par_a并没有初始化,所以里面的值是不确定的,你可以试试在Base的构造函数里打印传进来的值。