定义对象时,自动调用构造函数。.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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。;注意: 对象的复制和对象的赋值的区别。 对象的赋值是对一个已经存在的对象赋值,因此必须先定义被赋值的对象,才

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档