C++程的序设计教程9.ppt

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

C++程序设计教程(第二版) 第九章 对象生灭 Chapter 9 Object Birth & Death 第九章内容 9.1 构造函数设计 9.1.1 初始化要求 变量的初始化:虽然在定义的同时并不一定需要进行初始化,但无论如何在参加后续计算前必须先要给定初值 int month; int month=1; 对象与变量的不同在于对象对应于事物,要求从诞生之时起便有明确的意义. 对象若无初始化,将发生以下情况: 全部对象:全0位的模式 局部对象:随机值 举例:f0901 对象必须建立一种初始化机制,以满足针对不同条件下的赋初值操作的要求 9.1 构造函数设计 9.1.2 封装性要求 结构体变量初始化时的公有成员特性 struct Point; Point d={2,3}; Point d; d.x=2; d.y=3; // OK!!! C++中的类具有封装的特性 class Point; Point d={2,3}; // 错误!!! 对象创建过程中的特殊性: 数据成员一般是私有的; 传递的不仅仅是一个简单的值,可能是一种信息; 初始化的过程中除了计算操作以外,还需要进行必要的验证工作; 封装性要求对象创建过程中按传递的信息进行一个过程化的初始化工作 9.1 构造函数设计 9.1.3 函数形式 初始化的操作应该是一个过程,必须由函数才能完成; 构造函数:类定义中专门用于完成对象创建和初始化的特殊成员函数 构造函数的命名 应该是唯一的; 调用构造函数必须用对象名进行激活,但使用对象名作为构造函数是不现实的; 使用类名成为最佳选择; 举例 9.1 构造函数设计 9.1.4 构造函数的返回值问题 变量创建失败的后果及其处理方法 对象创建失败后的处理方法: 程序捕捉异常 直接终止程序的执行 构造函数不应该有表示任何意义的返回值 构造函数也不是空类型(void)的函数 构造函数中禁止出现return语句 9.1.5 set的缺憾及其改进 两种模式的对比 Date d(2005,12,28); Date d; d.set(2005,12,28); 改进后的程序举例 f0902 9.1 构造函数设计 9.1.6 一次性对象 在创建对象时不给出对象名,而直接以类名调用构造函数,则将产生一个无名的一次性对象 举例 cout << Date(2003,12,23); 使用场合:一般用在创建后不需要反复使用的场合(如参数传递时) 9.2 构造函数的重载 9.2.1 重载构造函数 构造函数可以重载,也可以参数默认 程序举例:f0903 无参构造函数调用时的特殊形式 Date g( ); 形式上的歧义,和函数声明混淆 为了加以区分,C++语法体系规定采用以下形式: Date g; //去掉括号 对以下形式的正确理解 int a; int b( ); Date g; Date f( ); 有参构造函数调用和函数声明在形式上的比较 Date e(2002); Date e(int y); 9.2 构造函数的重载 9.2.1 重载构造函数 在构造函数重载中,可以将各构造函数中通用的校验工作的代码分离出来,单独成为一个成员函数并供所有版本的构造函数调用。举例 f0904 9.2.2 无参构造函数 对象创建必须而且只能通过构造函数 前面第8章的程序没有任何错误的原因:默认的无参构造函数 9.2 构造函数的重载 9.2.2 无参构造函数 默认的无参构造函数的使用规则: 若某类未定义任何一个构造函数,则系统将提供一个默认的无参构造函数 无参构造函数仅能完成对象空间的申请工作,不能完成其它任何的初始化工作 若某类定义乐任何一个构造函数,则系统将不再提供默认的无参构造函数;若此时仍然需要,则需用户自己定义 class Date{ public: Date(int y, int m, int d); // ... }; int main(){ Date d; // error } 9.3 类成员初始化 9.3.1 默认调用的无参构造函数 类成员的概念:类中的某个数据成员是另外一个类的对象 类成员初始化时的简单处理方法及其执行过程的分析 f0905 如果不加特殊处理,则肯定调用类成员的无参构造函数 9.3.2 初始化的困惑 一种企图及其初始化目的的破灭 f0906 常量成员和引用成员初始化时也存在一种特殊性 9.3 类成员初始化 9.3.2 初始化的困惑 class Silly { const int ten; int &ra; public: Silly(int x, int &

文档评论(0)

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

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

1亿VIP精品文档

相关文档