c++基类和父类的空间分配是按照什么顺序进行的

浏览:37日期:2023-05-17

问题描述

我知道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的构造函数里打印传进来的值。

相关文章: