用户在声明类时可以不定义构造函数资料.docx

用户在声明类时可以不定义构造函数资料.docx

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用户在声明类时可以不定义构造函数,系统会自动设置一个默认的构造函数,在定义类对象时会自动调用这个默认的构造函数。这个构造函数实际上是一个空函数,不执行任何操作。如果需要对类中的数据成员初始化,应自己定义构造函数。构造函数的主要作用是对数据成员初始化。在设计派生类的构造函数时,不仅要考虑派生类所增加的数据成员的初始化,还应当考虑基类的数据成员初始化。也就是说,希望在执行派生类的构造函数时,使派生类的数据成员和基类的数据成员同时都被初始化。解决这个问题的思路是: 在执行派生类的构造函数时,调用基类的构造函数。任何派生类都包含基类的成员,简单的派生类只有一个基类,而且只有一级派生(只有直接派生类,没有间接派生类),在派生类的数据成员中不包含基类的对象(即子对象)。例11.5 简单的派生类的构造函数。#include iostream#includestringusing namespace std;class Student//声明基类Student{public:Student(int n,string nam,char s) //基类构造函数{num=n;name=nam;sex=s;}~Student( ){ } //基类析构函数protected : //保护部分int num;string name;char sex ;};class Student1: public Student //声明派生类Student1{public : //派生类的公用部分Student1(int n,string nam,char s,int a,string ad):Student(n,nam,s)//派生类构造函数{age=a; //在函数体中只对派生类新增的数据成员初始化addr=ad;}void show( ){cout″num: ″numendl;cout″name: ″nameendl;cout″sex: ″sexendl;cout″age: ″ageendl;cout″address: ″addrendlendl;}~Student1( ){ } //派生类析构函数private : //派生类的私有部分int age;string addr;};int main( ){Student1 stud1(10010,″Wang-li″,′f′,19,″115 Beijing Road,Shanghai″);Student1 stud2(10011,″Zhang-fun″,′m′,21,″213 Shanghai Road,Beijing″);stud1.show( ); //输出第一个学生的数据stud2.show( ); //输出第二个学生的数据return 0;}运行结果为num:10010name:Wang-lisex:faddress: 115Beijing Road,Shanghainum:10011name:Zhang-funsex:maddress: 213Shanghai Road,Beijing请注意派生类构造函数首行的写法: Student1(int n, string nam, char s, int a, string ad):Student(n, nam, s)其一般形式为派生类构造函数名(总参数表列):基类构造函数名(参数表列){派生类中新增数据成员初始化语句}在main函数中,建立对象stud1时指定了5个实参。它们按顺序传递给派生类构造函数Student1的形参。然后,派生类构造函数将前面3个传递给基类构造函数的形参。在上例中也可以将派生类构造函数在类外面定义,而在类体中只写该函数的声明:Student1(int n, string nam, char s, int a, string ad);在类的外面定义派生类构造函数:Student1∷Student1(int n,string nam,char s,int a,string ad):Student(n,nam,s){age=a;addr=ad; }请注意: 在类中对派生类构造函数作声明时,不包括基类构造函数名及其参数表列(即Student(n, nam, s))。只在定义函数时才将它列出。在以上的例子中,调用基类构造函数时的实参是从派生类构造函数的总参数表中得到的,也可以不从派生类构造函数的总参数表中传递过来,而直接使用常量或全局变量。例如,派生类构造函数首行可以写成以下形式:Student1(string nam,char s,int a,string ad):Student(10010,nam,s)即基类构造函数3个实参中,有一个是常量10010,另外两个从派生类构造函数的总参数表传递过来。请回顾一下在前面介绍过的构造函数初始化表的例子:

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档