目录
[9.5 初始化列表](#9.5 初始化列表)
[9.5.1 对象成员](#9.5.1 对象成员)
[9.5.2 初始化列表](#9.5.2 初始化列表)
9.5 初始化列表
9.5.1 对象成员
在类中定义的数据成员一般都是基本的数据类型。但是类中的成员也可以是对象,叫做对象成员。
先调用对象成员的构造函数,再调用本身的构造函数。析构函数和构造函数调用顺序相反,先构造,后析构。
类会自动调用对象成员的无参构造
下例中,B类中定义了A类的对象,ob就是B类中的对象成员,构造顺序是先构造成员对象的无参构造,再构造自身的无参构造函数。但是析构的时候则相反的,先析构自身的,再析构A类的析构函数。
代码:
cpp
#include <iostream>
#include "string.h"
using namespace std;
class A{
public:
int mA;
public:
A(){
cout<<"A类的无参构造"<<endl;
}
A(int num){
cout<<"A类的有参构造 mA="<<mA<<endl;
}
~A(){
cout<<"A类的析构函数"<<endl;
}
};
class B{
public:
int mB;
A ob;//对象成员
public:
B(){
cout<<"B类的无参构造"<<endl;
}
~B(){
cout<<"B类的析构函数"<<endl;
}
};
void test05(){
B ob1;
}
int main()
{
test05();
return 0;
}
9.5.2 初始化列表
类想调用对象成员有参构造,必须使用初始化列表
那么调用这个对象成员的有参构造函数去传递值,这时候就像下面这样写的一样。
那么怎么使用呢?下面这个写就可以调用成员对象的有参构造方法了。
对比下之前的写法:此时会调用无参构造,无法调用有参构造
代码:
cpp
#include <iostream>
#include "string.h"
using namespace std;
class A{
public:
int mA;
public:
A(){
cout<<"A类的无参构造"<<endl;
}
A(int num){
mA = num;
cout<<"A类的有参构造 mA="<<mA<<endl;
}
~A(){
cout<<"A类的析构函数"<<endl;
}
};
class B{
public:
int mB;
A ob;//对象成员
public:
B(){
cout<<"B类的无参构造"<<endl;
}
//B类的有参构造
B(int a,int b):ob(a) //初始化列表
{
//ob.mA = a;
mB = b;
cout<<"B类的有参构造"<<endl;
}
~B(){
cout<<"B类的析构函数"<<endl;
}
};
void test05(){
B ob1(10,20);
}
int main()
{
test05();
return 0;
}
多个对象成员,使用初始化列表,调有参构造的时候,使用 "," 英文的逗号隔开