c++初始化成员列表

疑问:初始化成员列表什么时候必须要使用呢?

1、成员变量是引用的时候

2、成员变量被const修饰的时候

3、成员变量是另外一个类的实例化对象,且对应的类中没有实现无参构造函数的时候

构造对象是先在内存中分配空间,然后再调用构造函数对他进行赋值。一旦写在构造函数体内是赋值,引用和const修饰的变量需要提前初始化而不能赋值。所以要使用初始化成员列表,在分配内存的时候就初始化。

 

#include <iostream>

using  namespace std;

class C
{
public:
    int x;

    C(int a)
    {
        x = a;
    }
};

class Box
{
public:
    //无参构造函数 默认构造函数

    Box():p(_len),sum(100),n(100) //n(100)在构造n对象的时候传参,会调用C(int)有参的构造函数,从而绕过了调用C(){}无参构造函数
    {
        cout << "Box()" << endl;
        //对成员变量进行初始化: 设置一些默认值
        _len = 10;
        _w = 10;
        _h = 10;
//        p = _len; //不是定义引用了,对引用的对象进行赋值 还是没有初始化!!
    //    sum = 1000; //也不叫初始化,叫赋值
    }

    //有参构造函数
    Box(int len, int w, int h):_len(len), _w(w), _h(h),p(_len),sum(100),n(100)
    {
        cout << "Box(int len, int w, int h)" << endl;
     //   _len = len;
     //   _w = w;
      //  _h = h;
    }

    Box(int len, int w):p(_len),sum(100),n(100)
    {
        cout << "Box(int len, int w)" << endl;
        _len = len;
        _w = w;
        _h = 10;
    }

    int get_len(){return _len;}
    int get_w() {return _w;}
    int get_h() {return _h;}

private:
    int _len;
    int _w;
    int _h;

    int& p;
    const int sum;
    C n;
};

int main() {
    Box a, b; //自动调用无参(默认)构造函数  a.Box();

   // Box x[4];
/*
    Box c(); //不是实例化一个对象,而是声明一个函数 返回值是Box,函数的名字叫做c,函数的形参列表为空

    cout << a.get_len() << endl;
    cout << a.get_w() << endl;
    cout << a.get_h() << endl;

    Box b1(20, 10, 10); //自动触发Box(int len, int w, int h)有参构造函数的调用
    Box b2(20, 10); //自动触发Box(int len, int w)有参构造函数的调用

    Box b3(100, 20, 10);
    cout << b3.get_len() << endl;
    cout << b3.get_w() << endl;
    cout << b3.get_h() << endl;
*/

    return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值