欢迎来到天天文库
浏览记录
ID:62071160
大小:145.50 KB
页数:5页
时间:2021-04-16
《派生类的构造函数及其对象的初始化.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、个人收集整理勿做商业用途派生类的构造函数及其对象的初始化由于构造函数不能被继承,因此,派生类的构造函数中除了对派生类中数据成员进行初始化外,还必须通过调用直接基类的构造函数来对基类中数据成员初始化,一般地将,对派生类中数据成员初始化放在该派生类构造函数的函数体内,而调用基类构造函数的基类中数据成员初始化放在该构造函数的成员初始化表中。派生类构造函数的格式如下表示:<派生类构造函数名>(〈参数表>) : 〈成员初始化表〉{ <派生类构造函数的函数体〉}其中,〈派生类构造函数名>同该派生类的类名。〈成员初始化表〉中包含如下的初始化项:①
2、基类的构造函数,用来给基类中数据成员初始化;②子对象的类的构造函数,用来给派生类中子对象的数据成员初始化;③派生类中常成员的初始化。<派生类构造函数的函数体〉用来给派生类中的数据成员初始化。派生类构造函数的调用顺序如下:①基类构造函数;②子对象的构造函数;③成员初始化表中其他初始化项;④派生类构造函数的函数体。在基类中有默认构造函数时,派生类的构造函数中可隐含调用基类中的默认构造函数。派生类中析构函数由于析构函数也不能继承,因此派生类的析构函数中将调用直接基类的析构函数.执行派生类析构函数的顺序正好与指向派生类的构造函数的顺序相反。先
3、调用派生类的析构函数,再调用子对象类的析构函数,最后调用直接基类的析构函数。例如:分析下列程序的输出结果,掌握派生类构造函数的定义格式和执行顺序,以及派生类析构函数的调用方法。 1#include4、 a=i;14 cout〈〈"Constructor called。 A”;15 }16个人收集整理勿做商业用途 ~A()17 {18 cout〈〈”Destructor called. A";19 }20 void Print()21 {22 cout〈〈a〈<”,";23 }24 int Geta()25 {26 return a;27 }28private:29 int a;30};31class B5、:public A32{33public:34 B()35 {36 b=0;37 cout<〈"Default constructor called. B";38 }39 B(int i,int j,int k);40 ~B()41 {42 cout〈<"Destructor called. B";43 }44 void Print()45 {46 A::Print();47 cout<〈b<<”,”〈〈6、aa.Geta()〈〈endl;48 }49private:50 int b;51 A aa;52};5354B::B(int i,int j,int k):A(i),aa(j),b(k)55{56 cout〈〈”Constructor called。 B”;57}58int main()59{60个人收集整理勿做商业用途 B bb[2];61 bb[0]=B(8,3,9);62 bb[1]=B(17,-18,19);63 int i;64 for(i=0;i<2;i++)657、 bb[i].Print();66 return 0;67}68文档为个人收集整理,来源于网络运行结果为:Default constructor calledA.Default constructor calledA.Default constructor calledB.Default constructor calledA。Default constructor calledA。Default constructor calledB。Constructor called。 AConstructor called8、. AConstructor called. BDestructor called。 BDestructor called。 ADestructor called. AConstructor called。 AConst
4、 a=i;14 cout〈〈"Constructor called。 A”;15 }16个人收集整理勿做商业用途 ~A()17 {18 cout〈〈”Destructor called. A";19 }20 void Print()21 {22 cout〈〈a〈<”,";23 }24 int Geta()25 {26 return a;27 }28private:29 int a;30};31class B
5、:public A32{33public:34 B()35 {36 b=0;37 cout<〈"Default constructor called. B";38 }39 B(int i,int j,int k);40 ~B()41 {42 cout〈<"Destructor called. B";43 }44 void Print()45 {46 A::Print();47 cout<〈b<<”,”〈〈
6、aa.Geta()〈〈endl;48 }49private:50 int b;51 A aa;52};5354B::B(int i,int j,int k):A(i),aa(j),b(k)55{56 cout〈〈”Constructor called。 B”;57}58int main()59{60个人收集整理勿做商业用途 B bb[2];61 bb[0]=B(8,3,9);62 bb[1]=B(17,-18,19);63 int i;64 for(i=0;i<2;i++)65
7、 bb[i].Print();66 return 0;67}68文档为个人收集整理,来源于网络运行结果为:Default constructor calledA.Default constructor calledA.Default constructor calledB.Default constructor calledA。Default constructor calledA。Default constructor calledB。Constructor called。 AConstructor called
8、. AConstructor called. BDestructor called。 BDestructor called。 ADestructor called. AConstructor called。 AConst
此文档下载收益归作者所有