预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共60页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
教学目标●动态生成与删除对象●指定const对象与const成员函数●了解友元函数与友元类的用途●了解如何使用static数据成员和成员函数●了解容器类的概念●了解遍历容器类元素的迭代类概念●了解this指针的用法7.1简介本章继续介绍类与数据抽象。我们要介绍更高级的课题并为第8章介绍类与运算符重载奠定基础。第6章到第8章的讨论鼓励程序员使用对象,我们称之为基于对象编程(object-basedprogramming,OBP)。然后,第9章和第10章介绍继承与多态,这是真正面向对象编程(object-orientedprogramming,OOP)的技术。本章和后面几章要使用第5章介绍的C语言式字符串,帮助读者掌握C语言指针的复杂课题.以便在工作中处理近二十年来积累的遗留代码。第19章将介绍新的字符串样式,将字符串作为完全成熟的类对象。这样,读者将熟悉C++中生成和操作字符串的两种最主要方法。7.2const(常量)对象与const成员函数我们一直强调,最低权限原则(principleofleastprivilege)是良好软件工程的最基本原则之一。下面介绍这个原则如何应用于对象。有些对象需要修改,有些不需要。程序员可以用关键字const指定对象不能修改,且修改时会产生语法错误。例如:constTimenoon(12,O,O);声明Time类对象noon为const,并将其初始化为中午12时。软件工程视点7.1将对象声明为const有助于实现最低权限原则,这样试图修改就会产生编译时错误不是执行时错误。软件工程视点7.2使用const是正确的类设计、程序设计与编码的关键。性能提示7.1声明变量和对象为const不仅是有效的软件工程做法,而且能提高性能,因为如今复杂的优化编译器能对常量进行某些无法对变量进行的优化。C++编译器不允许任何成员函数调用const对象,除非该成员函数本身也声明为const,即使get成员函数不修改对象时也是这样。声明const的成员函数不能修改对象,因为编译器不允许其修改对象。函数在原型和定义中指定为const,即在函数参数表和函数定义的左花括号之间插入const关键字。例如,下列类A的成员函数:intA::getValue()const{retureprivateDataMember);只是返回一个对象的数据成员值,可以声明为const。常见编程错误7.1定义修改对象数据成员的const成员函数是个语法错误。常见编程错误7.2定义调用同一类实例的非const成员函数的const成员函数是个语法错误。常见编程错误7.1对const对象调用非consc成员函数是个语法借误。软件工程视点7.3const成员函数可以用非const版本重载。编译器根据对象是否为const自动选择所用的重载版本。这里对构造函数和析构函数产生了一个有趣的问题,两者都经常需要修改对象。const对象的构造函数和析构函数不需要const声明。构造函数应允许修改对象,才能正确地将对象初始化。析构函数应能在对象删除之前进行清理工作。常见编程错误7.4将构造函数和析构函数声明为const是个语法错误。图7.1的程序实例化两个Time对象,一个非const对象和一个const对象。程序想用非const成员函数setHour(第100行)和printStandard(第106行)修改const对象noon。程序还演示了另外三个成员函数调用对象的组合,一个非Const成员函数调用非const对象(第98行)、一个const成员函数调用非const对象(第102行)和一个const成员函数调用const对象(第104与第105行)。输出窗口中显示了一个非const成员函数调用const对象时编译器产生的消息。编程技巧7.1将所有不需要修改当前对象的成员函数声明为const,以便在需要时调用const对象。1//Fig.7.1:time5.h2//DeclarationoftheclassTime.3//Memberfunctionsdefinedintime5.cpp4#ifndefTIME5_H5#defineTIME5_H67classTime{8public:9Time(int=0,int=0,int=0);//defaultconstructor1011//setfunctions12voidsetTime(int,int,int);//settime13voidsetHour(int);//sethour14voidsetMinute(int);//setminut15voidsetSecond(int);//setsecond1617//getfunctions(normallydeclaredconst)18intgetHour()