C++ 中的初始化列表

初始化列表

在这里插入图片描述
#前锋物联网逆战班#
也许你要早上七点起床,晚上十二点睡觉,日复一日,踽踽独行。但只要笃定而动情地活着,即使生不逢时,你人生最坏的结果,也只是大器晚成。

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

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

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();
}

运行结果:
在这里插入图片描述

类的对象作为另一个类的成员

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、先调用对象成员的构造函数,再调用本身的构造函数。 析构函数和构造函数调用顺序相反,先构造,后析构

发布了52 篇原创文章 · 获赞 42 · 访问量 4955

猜你喜欢

转载自blog.csdn.net/weixin_43288201/article/details/104953522
今日推荐