做视频网站视频加载过慢,论坛型网站 建站,阿里云模板建站教程,线上培训课程类的数据成员不但可以是基本类型#xff0c;也可以是其它类的对象。 组合类就是指一个类包含其他类的对象作为该类的数据成员。 当组合类创建对象时#xff0c;其中包含的各个数据成员对象应首先被创建。因此#xff0c;在创建类的对象时#xff0c;既要对本类的基本… 类的数据成员不但可以是基本类型也可以是其它类的对象。 组合类就是指一个类包含其他类的对象作为该类的数据成员。 当组合类创建对象时其中包含的各个数据成员对象应首先被创建。因此在创建类的对象时既要对本类的基本类型数据成员进行初始化同时也要对数据成员对象成员进行初始化。 组合类构造函数的定义格式为
类名类名形参表成员对象1形参表成员对象2形参表,……
{//类的初始化
} 需要注意以下几点。 1类的构造函数不仅要考虑对本类数据成员的初始化工作而且也要考虑成员对象的初始化工作。 2在创建一个组合类的对象时不仅它自身的构造函数将被调用且其成员对象的构造函数也将被调用。这时构造函数调用的顺序为 ● 调用成员对象的构造函数调用顺序按照成员对象在类的声明中出现的先后顺序依次调用(考点)与初始化表中顺序无关 ● 执行本类构造函数的函数体 ● 析构函数的调用顺序与构造函数刚好相反。 3若调用缺省构造函数即无形参的则成员对象的初始化也将调用相应的缺省构造函数。 4组合类同样有拷贝构造函数。若无则调用默认的拷贝构造函数。 例:组合类的应用 #include iostream
#include string
using namespace std;class Date
{
public:Date(int y, int m, int d) :year(y), month(m), day(d) //构造函数{cout Date构造函数,对象的地址: this endl;}//拷贝构造函数Date(const Date date) :year(date.year), month(date.month), day(date.day){cout Date拷贝构造函数,对象的地址: this endl;}~Date(){cout Date析构函数,对象的地址: this endl;}
private:int year; //年int month;//月int day; //日
};class Student
{
public:Student(string n, int i, int y,int m,int d) :name(n), id(i), bir(y,m,d){cout Student构造函数,对象的地址: this endl;}Student(const Student s) :name(s.name), id(s.id), bir(s.bir){cout Student拷贝构造函数,对象的地址: thisendl;}~Student(){cout Student析构函数,对象的地址: this endl;}
private:string name;//姓名int id; //学号Date bir; //出生年月
};int main()
{Student stu1{张三,12345,2004,6,13};cout stu1的地址: stu1 endl;Student stu2(stu1);cout stu2的地址: stu2 endl;return 0;
}
执行结果如下: 分析: 1.第50行,定义对象stu1,需要调用Student的构造函数,但由于它包含Date类成员,所以在调用Student的构造函数前先调用Date的构造函数,然后再调用Student本身的构造函数。 2.第53行,通过stu1拷贝构造stu2,这是先调用其成员对象的拷贝构造函数,然后再调用Student本身的拷贝构造函数。 3.析构函数的调用刚好和构造函数的调用过程相反。
例如:组合类成员对象构造的顺序 #include iostream
#include string
using namespace std;class Date
{
public:Date(int y, int m, int d) :year(y), month(m), day(d) //构造函数{cout Date构造函数 endl;}~Date(){cout ~Date析构函数 endl;}
private:int year; //年int month;//月int day; //日
};class Address //地址
{
public:Address(string p, string c) :province(p), city(c){cout Address构造函数 endl;}~Address(){cout ~Address析构函数 endl;}
private:string province;//省份string city;//市
};class Student
{
public:Student(string n, int i, int y,int m,int d,string p,string c) :addr(p,c),name(n), id(i), bir(y,m,d){cout Student构造函数 endl;}~Student(){cout ~Student析构函数 endl;}
private:string name; //姓名int id; //学号Date bir; //出生年月Address addr;//家庭住址
};int main()
{Student stu1{张三,12345,2004,6,13,陕西省,西安市};return 0;
}
程序执行结果如下: