网站大量收购闲置独家精品文档,联系QQ:2885784924

c9关于类和对象的进一步讨论.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c9关于类和对象的进一步讨论

第9章 关于类和对象的进一步讨论 9.1 构造函数 9.2 析构函数 9.3 调用构造函数和析构函数的顺序 9.4 对象数组 9.5 对象指针 9.6 共用数据的保护 9.7 对象的动态建立和释放 9.8 对象的赋值和复制 9.9 静态成员 9.10 友元 9.11 类模板 9.1 构造函数 9.1.1 对象的初始化 注意: 类的数据成员是不能在声明类时初始化。 类的公用成员可以在定义对象时对数据成员进行初始化。在一个花括号内顺序列出各公用数据成员的值,两个值之间用逗号分隔。 如果数据成员是私有的,或者类中有private或protected的成员,就不能用这种方法初始化。 9.1.2 构造函数的作用 解决对象中私有成员的初始化问题。 只要创建一个对象,必将调用构造函数。 构造函数的名字必须与类名同名,不返回任何值。 构造函数功能由用户定义,可根据初始化的要求设计函数体和函数参数。 关于构造函数的说明: (1) 定义对象时,自动调用构造函数。 (2) 构造函数没有返回值,不需在定义构造函数时声明类型。 (3) 构造函数不能被用户调用。 (4) 在构造函数的函数体中不仅可以对数据成员赋初值,而且可以包含其他语句。 (5) 如果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。 9.1.3 带参数的构造函数 在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数,以实现不同的初始化。 构造函数首部的一般格式为: 构造函数名(类型 1 形参1, 类型2 形参2, …) 定义对象的一般格式为: 类名 对象名(实参1, 实参2, …); 例9.2 有两个长方柱,其长、宽、高分别为: (1)12,20,25;(2)10,14,20。求它们的体积。编一个基于对象的程序,在类中用带参数的构造函数对对象初始化。 9.1.4 用参数初始化表对数据成员初始化 在构造函数首部实现数据成员初始化,而不在构造函数体内实现。 例9.2中定义构造函数可以改用以下形式: Box::Box(int l,int w,int h): length(l) ,height(h) ,width(w){ } 这种写法方便、简练,尤其当需要初始化的数据成员较多时更显其优越性。 9.1.5 构造函数的重载 在一个类中可以定义多个构造函数,以便对类对象提供不同的初始化的方法,供用户选用。这些构造函数具有相同的名字,而参数的个数或参数的类型不相同。这称为构造函数的重载。 说明: 无参的构造函数属于默认构造函数。一个类只能有一个默认构造函数。 定义对象时采用无参数构造函数,应写成 Box box1; 不能写成 Box box1( ); (3) 尽管在一个类中可以包含多个构造函数,但是对于每一个对象来说,建立对象时只执行其中一个构造函数,并非每个构造函数都被执行。 9.1.6 使用默认参数的构造函数 构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值。 例9.4 将例9.3程序中的构造函数改用含默认值的参数,长、宽、高的默认值均为10。 说明: (1) 应该在声明构造函数时指定默认值,而不能只在定义构造函数时指定默认值,默认值不能重复指定。 (2) 声明构造函数时,形参名可以省略。 Box(int =10,int =10,int =10); (3) 在一个类中定义默认参数的构造函数和重载构造函数时,要避免二意性。 构造函数和普通成员函数的区别: 定义一个对象时(从无到有),系统自动调用构造函数,不由用户调用。 存在一个对象后,用户方可调用该对象的普通成员函数。 9.8 对象的赋值和复制 9.8.1 对象的赋值 对象之间的赋值也是通过赋值运算符“=”进行的。 其功能是将一个对象的成员值一一复制给另一对象的对应成员。 格式为: 对象名1 = 对象名2; 注意:对象名1和对象名2必须属于同一个类。 例如 Student stud1, stud2; //定义两个同类的对象 ┆ stud2 = stud1; //将stud1赋给stud2 说明: (1) 对象的赋值只对其中的数据成员赋值,而不对成员函数赋值。 (2) 类的数据成员中不能包括动态分配的数据,否则在赋值时可能出现严重后果。 9.8.2 对象的复制(复制构造函数或拷贝构造函数) 用一个已有的对象复制出一个完全相同的新对象。 如: Box box2(box1); 作用:用已有的对象box1克隆出一个新对象box2。 一般形式为: 类名

文档评论(0)

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

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

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档