目录
9.5 初始化列表
9.5.1 对象成员
代码:
9.5.2 初始化列表
9.5 初始化列表
9.5.1 对象成员
在类中定义的数据成员一般都是基本的数据类型。但是类中的成员也可以是对象,叫做对象成员。
先调用对象成员的构造函数,再调用本身的构造函数。析构函数和构造函数调用顺序相反,先构造,后析构。
类会自动调用对象成员的无参构造
下例中,B类中定义了A类的对象,ob就是B类中的对象成员,构造顺序是先构造成员对象的无参构造,再构造自身的无参构造函数。但是析构的时候则相反的,先析构自身的,再析构A类的析构函数。
代码:
#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 初始化列表
类想调用对象成员有参构造,必须使用初始化列表
那么调用这个对象成员的有参构造函数去传递值,这时候就像下面这样写的一样。
那么怎么使用呢?下面这个写就可以调用成员对象的有参构造方法了。
对比下之前的写法:此时会调用无参构造,无法调用有参构造
代码:
#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;
}
多个对象成员,使用初始化列表,调有参构造的时候,使用 “,” 英文的逗号隔开