![定义构造函数的四种方法_第1页](http://file1.renrendoc.com/fileroot_temp2/2020-12/2/7aadc801-3032-4c49-8e20-e4235a16a9a2/7aadc801-3032-4c49-8e20-e4235a16a9a21.gif)
![定义构造函数的四种方法_第2页](http://file1.renrendoc.com/fileroot_temp2/2020-12/2/7aadc801-3032-4c49-8e20-e4235a16a9a2/7aadc801-3032-4c49-8e20-e4235a16a9a22.gif)
![定义构造函数的四种方法_第3页](http://file1.renrendoc.com/fileroot_temp2/2020-12/2/7aadc801-3032-4c49-8e20-e4235a16a9a2/7aadc801-3032-4c49-8e20-e4235a16a9a23.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、定义类的构造函数作者:lyb661 时间: 定义类的构造函数有如下几种方法: 1、使用默认构造函数(类不另行定义构造函数):能够创建一个类对象,但不能初始化类的各个成员。 2、显式定义带有参数的构造函数:在类方法中定义,使用多个参数初始化类的各个数据成员。 3、定义有默认值的构造函数:构造函数原型中为类的各个成员提供默认值。 4、使用构造函数初始化列表:这个构造函数初始化成员的方式显得更紧凑。例如:有一个学生类。其中存储了学生的姓名、学号和分数。class Student private: std:string name; long number; double scores;public:
2、Student()/1:default constructor Student(const std:string& na,long nu,double sc); Student(const std:;string& na=,long nu=0,double sc=0.0); Student(const std:;string& na=none,long nu=0,double sc=0.0):name(na),number(nu),scores(sc) . void display() const; /void set(std:string na,long nu,double sc);.Stu
3、dent:Student(const std:string& na,long nu,double sc) name=na; number=nu; scores=sc;void Student:display()const std:coutName: name, Number: number, Score: scoresnn; 这个学生类极为简单:除了创建和显示学生的姓名、学号、学分以外;什么工作也不做,什么工作也做不了。 这个类在此处的价值的就是说明类构造函数的工作方式。1、第一个构造函数,就是编译器合成的默认构造函数。它用于创建一个类对象而不显式地初始化各个类成员。 Student(). S
4、tudent st1; 这里创建一个学生类的对象st1。但对st1的姓甚名谁、学号大小、学分多少一无所知。 对于一个简单的类:我们无需显式地定义这个构造函数,因为编译器会隐式地调用它来创建类对象。为了创建一个具体的类对象,有时可定义一个私有成员函数来初始化类的各个成员。比如Set_name(string) , Set_score(double).2、第二个构造函数带有三个参数:分别对应于三个类成员。经过类方法中的定义,我们可以在用户程序中创建一个各个成员赋有初值的类对象。 Student(const string& na,long nu,double sc);. Student st2(Liu
5、Yang,0803,96.5); 这里创建了一个学生类st2。他的姓名、学号、学分分别为LiuYang , 0803 , 96.5。 值得注意的是:由于我们显式地定义了一个带有参数的构造函数,编译器合成的默认构造函数将不再工作。因此,在用户程序中声明一个没有成员值的学生类对象就不允许了。即下面的代码是非法的! Student st2;3、对于第二个构造函数的问题,我们有两种方法来解决:一是同时显式地调用默认的构造函数。即第1 第 2个构造函数同时调用。这样既可创建一个类对象,也能对其进行初始化。 另一个办法是定义一个参数带有默认值的构造函数。它兼有第1 第 2个构造函数的功能。即创建一个类对象
6、,同时为它赋初值。 Student(const std:string& na=none,long nu=0,double sc=0.0);. Student st3;/实际上st3也是有默认值的了 st3=Student(LiMing,0705,88.3); Student st3(LiMing,0705,88.3); /同理 在所有类型的构造函数中,带有默认值的构造函数最为实用,也最为简洁。4、正因为此,构造函数初始化列表的应用才被广泛地应用。 Student(const std:;string& na=none,long nu=0,double sc=0.0):name(na),numbe
7、r(nu),scores(sc) 不但因为它是带有默认参数的构造函数,也因为它初始化成员的方式最为直观,最为简洁。 这使构造函数也好像被封装在类声明里了。尽管构造函数初始化列表看起来简单,其实也能完成复杂的初始化工作。 例如有一个商品类: class ShangPin std:string PM;/品名 long SL;/数量 double DJ;/单价 double JE;/金额!;其成员有品名、数量、单价、金额。显然金额的初始化不是直接完成的,只有数量和单价已知后它才能确定。尽管工作有点麻烦,但初始化列表也能胜任。 可以在大括号中,调用一个私有的函数来完成金额的初始化工作。 ShangPin(const std:string& m_PM=nothing,long m_SL=0,double m_DJ=0.0):PM(m_PM),SL(m_SL),DJ(m_DJ)set_JE();. void ShangPin:set_JE() JE=SL*DJ; 类成员的初始化工作是十分重要的。有时我们编写好的程序,在运行时会输出些
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋买卖合同协议书范本下载
- 直播劳务的合同
- 图书销售合同
- 商铺转让租赁合同范本
- 提高团队协作能力的技能培训课程
- 鱼种产品购销合同书样本年
- 2025合同模板修缮修理合同范本
- 隧洞施工合同范本
- 装修房屋托管合同范本
- 购房协议合同
- 成人手术后疼痛评估与护理团体标准
- zemax-优化函数说明书
- 2021年《民法典担保制度司法解释》适用解读之担保解释的历程
- 第02讲 导数与函数的单调性(学生版)-2025版高中数学一轮复习考点帮
- 湖南财政经济学院《常微分方程》2023-2024学年第一学期期末试卷
- 游戏账号借用合同模板
- 2022年中考英语语法-专题练习-名词(含答案)
- 2011年公务员国考《申论》真题卷及答案(地市级)
- 多元化评价体系构建
- 商业模式的设计与创新课件
- AQ/T 4131-2023 烟花爆竹重大危险源辨识(正式版)
评论
0/150
提交评论