初始化列表
#前锋物联网逆战班#
也许你要早上七点起床,晚上十二点睡觉,日复一日,踽踽独行。但只要笃定而动情地活着,即使生不逢时,你人生最坏的结果,也只是大器晚成。
构造函数和其他函数不同,除了有名字,参数列表,函数体之外还有初始化列表。 初始化列表简单使用:
注意:初始化成员列表(参数列表)只能在构造函数使用
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、先调用对象成员的构造函数,再调用本身的构造函数。 析构函数和构造函数调用顺序相反,先构造,后析构