提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
初始化列表的主要作用是给类中的成员属性进行一个初始化的一个操作,联系前一天学习的构造函数也是给成员属性做一个初始化的操作,那么初始化列表是我们的另一个方法。
一、语法(构造函数与初始化列表的对比)
常用方法:构造函数赋值
1、固定赋值
person(int age,int height)
{
m_age = age;
m_height = new int(height);//2、用new在堆区为传入参数开辟内存,返回地址用m_height接收,堆区开辟的空间由程序员自己释放
cout << "调用有参构造函数" << endl;
}
person() :m_age(10), m_height(new int(160))
{
}
2、灵活赋值
person(int a,int b) :m_age(a), m_height(new int(b))
{
}
二、类对象作为类的成员
1.赋值+调用顺序
代码如下(示例):
#include<iostream>
using namespace std;
#include<string>
class phone
{
public:
string phone_name;
phone(string name)
{
phone_name = name;//利用构造函数给成员属性赋值
cout << "调用phone类构造函数" << endl;
}
~phone()
{
cout << "phone类析构函数的调用" << endl;
}
};
class person
{
public:
string m_name;
phone m_phone;//其它类对象作为该类的成员,叫做对象成员
person(string pname, string hname) :m_name(pname), m_phone(hname)//利用成员初始列表给成员属性赋值
{
cout << "调用person类构造函数" << endl;
}
~person()
{
cout << "person类析构函数的调用" << endl;
}
};
void test01()
{
person p1("张三", "max-phone");//其中值传递phone m_phone="max-phone",相当于隐式调用
cout << p1.m_name << "拿着" << p1.m_phone.phone_name << endl;
}
int main()
{
test01();
}
构造函数调用:先调用作为对象成员的类,析构函数的调用顺序原则:先进后出