- 1、本文档共63页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
定义对象时,自动调用构造函数。.ppt
第9章 关于类和对象的进一步讨论;注意: 类的数据成员是不能在声明类时初始化。;类的公用成员可以在定义对象时对数据成员进行初始化。在一个花括号内顺序列出各公用数据成员的值,两个值之间用逗号分隔。
如果数据成员是私有的,或者类中有private或protected的成员,就不能用这种方法初始化。;9.1.2 构造函数的作用;关于构造函数的说明:
(1) 定义对象时,自动调用构造函数。
(2) 构造函数没有返回值,不需在定义构造函数时声明类型。
(3) 构造函数不能被用户调用。
(4) 在构造函数的函数体中不仅可以对数据成员赋初值,而且可以包含其他语句。
(5) 如果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。;在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数,以实现不同的初始化。
构造函数首部的一般格式为:
构造函数名(类型 1 形参1, 类型2 形参2, …)
定义对象的一般格式为:
类名 对象名(实参1, 实参2, …);;例9.2 有两个长方柱,其长、宽、高分别为: (1)12,20,25;(2)10,14,20。求它们的体积。编一个基于对象的程序,在类中用带参数的构造函数对对象初始化。
;在构造函数首部实现数据成员初始化,而不在构造函数体内实现。
例9.2中定义构造函数可以改用以下形式:
Box::Box(int l,int w,int h): length(l) ,height(h) ,width(w){ }
这种写法方便、简练,尤其当需要初始化的数据成员较多时更显其优越性。;在一个类中可以定义多个构造函数,以便对类对象提供不同的初始化的方法,供用户选用。这些构造函数具有相同的名字,而参数的个数或参数的类型不相同。这称为构造函数的重载。;说明:
无参的构造函数属于默认构造函数。一个类只能有一个默认构造函数。
定义对象时采用无参数构造函数,应写成
Box box1; 不能写成 Box box1( );
(3) 尽管在一个类中可以包含多个构造函数,但是对于每一个对象来说,建立对象时只执行其中一个构造函数,并非每个构造函数都被执行。;class My
{
public:
My(char one):flag(one){ };
printpage( ){ };
private:
char flag;
void printdoc( ){ };
};
int main( )
{
My hp, ca(A);
ca.printdoc( );
return 0;
};构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值。
例9.4 将例9.3程序中的构造函数改用含默认值的参数,长、宽、高的默认值均为10。
;说明:
(1) 应该在声明构造函数时指定默认值,而不能只在定义构造函数时指定默认值,默认值不能重复指定。
(2) 声明构造函数时,形参名可以省略。
Box(int =10,int =10,int =10);
(3) 在一个类中定义默认参数的构造函数和重载构造函数时,要避免二意性。;例:设计一个类Cdateinfo,其私有数据成员有year(年)、month(月)、day(日),要求其满足下述要求。
(1)、要求有一个无参数的构造函数,其初始的年、月、日分别为:2000,1,1。
(2)、要求有一个带参数的构造函数,起参数分别对应年、月、日。
(3)、要求用一个成员函数实现日期的设置。
(4)、要求用一个成员函数实现日期的输出。
?
;构造函数和普通成员函数的区别:;对象之间的赋值也是通过赋值运算符“=”进行的。
其功能是将一个对象的成员值一一复制给另一对象的对应成员。;格式为: 对象名1 = 对象名2;
注意:对象名1和对象名2必须属于同一个类。
例如
Student stud1, stud2; //定义两个同类的对象
┆
stud2 = stud1; //将stud1赋给stud2;说明:
(1) 对象的赋值只对其中的数据成员赋值,而不对成员函数赋值。
(2) 类的数据成员中不能包括动态分配的数据,否则在赋值时可能出现严重后果。;用一个已有的对象复制出一个完全相同的新对象。
如: Box box2(box1);
作用:用已有的对象box1克隆出一个新对象box2。
一般形式为:
类名 对象2(对象1);
用对象1复制出对象2。;注意: 对象的复制和对象的赋值的区别。
对象的赋值是对一个已经存在的对象赋值,因此必须先定义被赋值的对象,才
您可能关注的文档
最近下载
- 某某医院手术质量安全提升行动方案(2023-2025年).docx
- 草乌采收及初加工技术规范.pdf
- 标准图集-20S515-钢筋混凝土及砖砌排水检查井.pdf VIP
- 嗜铬细胞瘤和副神经节瘤诊断治疗专家共识1护理课件.pptx VIP
- (全国Ⅰ卷)2017-2020年高考英语全国卷1试卷试题真题及答案.pdf
- 国开电大 《24211 学前儿童社会教育活动指导》期末考试题库(按字母排版) (1).pdf
- 嗜铬细胞瘤和副神经节瘤诊断治疗专家共识1.pptx VIP
- 嗜铬细胞瘤和副神经节瘤诊断治疗专家共识2020版.pptx VIP
- (全国Ⅱ卷)2017-2020年高考英语全国卷2试卷试题真题及答案.pdf
- 第八单元 第1课时 几分之一(教学课件)三年级数学上册人教版.ppt
文档评论(0)