- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
apl03.类:深入剖析(II).ppt
高级语言程序设计-2 谭火彬 第三章 类:深入剖析(II) 内容安排 常量 组成:对象作为类的成员 友元函数和友元类 this指针和动态内存分配 静态类成员 内容安排 常量 组成:对象作为类的成员 友元函数和友元类 this指针和动态内存分配 静态类成员 常量 const类型修饰符:常量说明符 是constant的缩写, “恒定不变”的意思,被其修饰的东西都受到强制保护,可以预防意外的变动,提高程序健壮性 在变量说明语句中,const 用于冻结一个变量,使其在程序中不能被修改 在用const 声明变量时, 必须对该变量进行初始化 很多C++程序设计书籍建议:“Use const whenever you need” const关键字主要使用场合 1. 修饰一个简单的变量 2. 修饰函数的输入参数 3. 修饰函数的返回值 4. 修饰类的成员函数 1. 修饰一个简单的变量 const_cast转换常量性 2. 修饰函数的输入参数 const修饰输入参数,不能修饰输出参数: 输入参数采用“指针传递”,那么加const修饰可以防止意外地改动该指针,起到保护作用 输入参数采用“值传递”,由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加const修饰 对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const 引用传递”,目的是提高效率。例如将void Func(T a) 改为void Func(const T a) ,如类的拷贝构造函数 3. 修饰函数的返回值 如果给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const修饰的同类型指针 如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const修饰没有任何价值 函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数中,目的是为了实现链式表达 ;如果将赋值函数的返回值加const修饰,那么该返回值的内容不允许被改动 4. 修饰类的成员函数 任何不会修改数据成员的成员函数都应该声明为const类型 const关键字放在成员函数定义的最后 如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误 为时间类添加const约束 使用const对象 常量数据的初始化 常量在程序运行期间不允许修改,在何时为其指定初值? 只能在定义时初始化 const int i=10; const Time noon(12, 0, 0); 如果类中有常量数据成员,如何初始化? class Increment{…… private:const int increment=0; //??? }; 类的常量数据成员,只能在构造函数中初始化,但又不能在构造函数体内初始化,需采用成员初始化器的方式进行初始化 const变量初始化问题 const成员函数常见错误总结 常见错误 定义修改对象数据成员的const成员函数是个语法错误 定义调用同一类实例的非const成员函数的const成员函数是个语法错误 const成员函数调用非const成员函数是个语法错误 将构造函数和析构函数声明为const是语法错误 不为const数据成员提供成员初始化器是一个语法错误 mutable类成员 标准C++提供了一个存储类说明符mutable代替const_cast,即使在const对象和const成员函数中,mutable数据成员也是可以修改的 内容安排 常量 组成:对象作为类的成员 友元函数和友元类 this指针和动态内存分配 静态类成员 组成:对象作为类的成员 组成(Composition) 类的数据成员可以是简单数据类型,也可以是自定义的类类型 把其它类的对象作为类的数据成员,是一种重要的软件复用技术 类成员的初始化 组成的类成员需要初始化 在构造函数中初始化,但是却不能在函数体中初始化 作为类成员的对象也必须通过它的构造函数初始化 构造函数不同于普通的函数,不能被直接调用,只能在声明类的对象时自动调用 只能在构造函数的成员初始化器中初始化(和const数据成员一样) 没有在成员初始化器进行初始化的数据成员将调用缺省构造函数进行初始化 为Employee的Date初始化 使用Employee对象 组成的基本实现原理 如右图的类定义 组成中构造和析构的过程 类对象和数据成员对象的构造顺序 基本原则:先别人,后自己 先构造数据成员,再构造自身 类对象和数据成员对象的析构顺序 基本原则:同一作用域内先构造的后析构,后构造的先析构 仔细阅读p404页fig10.14的程序 考虑类的构造和析构顺序? 为什么Date Obj
文档评论(0)