19_初始化列表

目录

 

1、概述

2、类的对象作为另一个类的成员 时 对象成员 会使用初始化列表


1、概述

构造函数和其他函数不同,除了有名字,参数列表,函数体之外还有初始化列表

注意:初始化成员列表(参数列表)只能在构造函数使用

class Data
{
private:
    int m_a;
    int m_b;
    int m_c;
public:
    //成员名(形参名)
    Data(int a,int b,int c):m_a(a),m_b(b),m_c(c)
    {
        //m_a = a;
       // m_b = b;
        //m_c = c;
        cout<<"有参构造"<<endl;
    }
    ~Data()
    {
        cout<<"析构函数"<<endl;
    }
    void showData(void)
    {
        cout<<m_a<<" "<<m_b<<" "<<m_c<<endl;
    }
};
void test01()
{
    Data ob(10,20,30);
    ob.showData();
}

运行结果:

2、类的对象作为另一个类的成员 时 对象成员 会使用初始化列表

class A
{
private:
    int m_a;
public:
    A()
    {
        cout<<"A无参构造函数"<<endl;
    }
    A(int a)
    {
        m_a = a;
        cout<<"A有参构造函数"<<endl;
    }
    ~A()
    {
        cout<<"A析构函数"<<endl;
    }
};
class B
{
private:
    int m_b;
public:
    B()
    {
        cout<<"B无参构造函数"<<endl;
    }
    B(int b)
    {
        m_b = b;
        cout<<"B有参构造函数"<<endl;
    }
    ~B()
    {
        cout<<"B析构函数"<<endl;
    }
};

class Data
{
private:
    A oba;//对象成员
    B obb;//对象成员
    int data;//基本类型成员
public:
    Data()
    {
        cout<<"Data无参构造"<<endl;
    }

    //初始化列表:对象名+() 显示调用 调用对象成员的构造函数
    Data(int a, int b, int c):oba(a),obb(b),data(c)
    {
        //data =c;
        cout<<"有参构造"<<endl;
    }
    ~Data()
    {
        cout<<"Data析构函数"<<endl;
    }

};
void test01()
{
    //先调用 对象成员的构造-->自己的构造函数-->析构自己--->析构对象成员
    //Data ob1;

    //系统默认调用的是 对象成员的无参构造
    //必须在Data的构造函数中 使用初始化列表 使其对象成员 调用有参构造
    Data ob2(10,20,30);
    
}

运行结果“

注意:

1、按各对象成员在类定义中的顺序(和参数列表的顺序无关)依次调用它们的构造函数

2、先调用对象成员的构造函数,再调用本身的构造函数。 析构函数和构造函数调用顺序相反,先构造,后析构

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值