C++_类及对象.ppt

  1. 1、本文档共64页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
子对象析构函数的设计和执行次序 同样,当含有子对象的类存在析构函数时,特别要注意析构函数的调用次序。在含有子对象的类A中,设计析构函数如下: ~A() { 函数体; } 其执行次序是:先执行函数体,再以子对象在类A中说明的相反次序调用各类的析构函数。 前向引用声明 C++的类应当先声明,然后再使用。但是在处理相对复杂的问题时,很可能遇到两个类相互引用的情况,这时候,就必然要有一个类在定义之前就被引用,解决这一问题的方法是使用前向引用声明。 前向引用声明是在引用未定义的类之前对该类进行声明,它只是为程序引入一个代表该类的标识符,类的具体定义可以在程序的其他地方。 * * * 目的:解决程序中函数调用的效率问题。 1.普通函数? 2.编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换。 3.增加代码量,优化效率 内联函数的定义方法 使用内联函数的方法很简单,只要在函数定义的开头加上关键字inline即可。内联函数的定义方法与一般函数一样,例如: inline int add_int(int x,int y,int z) { return x+y+z; } 和宏比较: 1.类型和作用域规则。 2.调试。 外联函数 对于大的成员函数而言,直接把代码放在类定义中使用起来十分不便。为了避免这种情况,C++允许在类定义之外定义成员函数,这就是外联函数。 外联函数变成内联函数的方法很简单,只要在函数开头加上关键字inline就可以了。 一个对象的生存期 如同一个变量一样,对象从被创建到被释放为止的时间称为对象的生存期。一个对象的生存期如图所示。 第2天 类和对象(二) 常对象和常对象成员 常对象 常对象是指对象常量,其一般定义格式如下: 类名 const 对象名; 或者: const 类名 对象名; 使用常对象成员时需要注意以下几点: 在定义常对象时必须进行初始化。 常对象的数据成员不能被更新。 常对象成员 常对象成员包括常成员函数和常数据成员。 1. 常成员函数 使用const关键词声明的函数为常成员函数,常成员函数声明格式如下: 类型 函数名(参数表) const; 使用常对象成员时需要注意以下几点: const是函数类型的一个组成部分,因此在实现部分也要带const关键词。 常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。 如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,而不能调用其他成员函数。 const关键词可以参与区分重载函数。例如,在类中有如下说明: “void print(); void print() const;”,则这是对print的有效重载。 2. 常数据成员 与一般数据相同,类的成员数据也可以是常量和常引用,使用const说明的数据成员称为常数据成员。如果在一个类中说明了n个常数据成员,那么构造函数就只能通过初始化列表对该数据成员进行初始化,其一般格式如下: 构造函数(参数表):常数据成员1(参数1),常数据成员2(参数2),…, 常数据成员n(参数n) 其中,冒号后面是一个数据成员的初始化列表,它包含一个初始化项,当有多个初始化项时,要用逗号分隔开。“参数1”~“参数n”均为“参数表”中的某个参数。这样,在执行构造函数时自动将“常数据成员1”赋值为“参数1”的值,“常数据成员2”赋值为“参数2”的值,…,“常数据成员n”赋值为“参数n”的值。 2. 常数据成员 (1)可以定义const常量,具有不可变性。 例如: const int Max=100; int Array[Max]; (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改; (3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,一变都变! (4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,编译器就会报错; 例如: void f(const int i) { i=10;//error! } (5) 可以节省空间,避免不必要的内存分配. (6) 提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存

文档评论(0)

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

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

1亿VIP精品文档

相关文档