7.1 填空:
a)——语法用于初始化类的常量成员。
b)成员函数应声明为类的——才能访问这个类的private数据成员。
c)——运算符对指定类型对象动态分配内存并返回该类型的——。
d)常量对象应——,不能在生成之后修改。
e)——数据成员表示类范围信息。
f)对象的成员函数能访问对象的“自我指针”,称为——指针。
g)关键字——指定对象或变量初始化之后不可修改。
h)如果类的成员对象不提供成员初始化值,则调用该对象的——。
i)如果成员函数不访问——类成员.则可以声明为static。
j)成员对象在所在类对象之——构造。
k)——运算符删除前面用new分配的内存。
7.2找出下列各题的错误并说明如何纠正:
a) class Example { public: Example{ int y = 10 ) { data = y; } int getIncrementedData() const { return ++data; } static int getCount() { cout << "Data is "<< data << endl; return count; } private: int data; static int count; b) char *string; string = new chaar[ 20 ]; free( string );
7.1 a)成员初始化值。b)友元。c)new、指针。d)初始化。e)static。f)this。g)const。h)默认构造
函数。i)非static。j)前。k)delete。
7.2 a)不正确:Exsample的类定义有两个错误。第一个在getIncrementedData函数中,函数声明为const,但其修改对象。
纠正:要纠正第一个错,删除getIncrementedData定义中的const关键字。
不正确:第二个错在getCount函数中。函数声明为static,因此不能访问类的非static成员。
纠正:要纠正第二个错,删除getCount定义中的输出行。
b)不正确:new动态分配的内存用C标准库函数free删除。
纠正:用C++的delete运算符释放内存。C语言式动态内存分配运算符不能与C++的
new和delete运算符混用。
7.3 比较C++的new和delete运算符动态内存分配与C标准库函数malloc和free运算符动态内存分配。
7.4 说明C++友元关系的概念,说明友元关系的副作用。
7.5 正确的Time类定义能否同时包括下列构造函数如果不能,为什么
Time( int h = 0, int m = 0, int s= 0 );
Time();
7.6 构造函数或析构函数指定返回类型(即使void)时,会发生什么情况
7.7用下列条件生成Date类:
a)用多种格式输出日期,例如:
DDD YYYY
MM/DD/YY
June 14,1992
b)用重载的构造函数生成Date对象,用a)中的日期格式初始化。
c)生成一个Date构造函数,用time.h头文件的标准库函数读取系统日期和设置Date成员。
第8章将介绍如何生成运算符,测试两个日期的相等性和比较两个日期的前后顺序。
7.8 生成一个SavingsAceount类。用static数据成员包含每个存款人的annualInterestRate(年利率)。类的每个成员包含一个private数据成员savingsBalanee,表示当前存款额。提供一个calculateMontMyInterest成员函数,计算月利息,用balanee乘以annuaUnlterestRate除以12取得,并将这个月息加进savingsBalance中。提供一个static成员函数
modifyInterestRate,将static annualInterestRate设置为新值。实例化两个不同的SavingsAecount对象saver1和savver2,结余分别为2000.00和3000.00。将annualInterestRate设置为3%,计算每个存款人的月息并打印新的结果。然后将annualInterestRate设置为4%,再次计算每个存款人的月息并打印新的结果。
7.9 生成一个IntegerSet类。IntegerSet类的每个对象可以保存0到100之间的整数值。一个集合内部表示为0和1的数组。数组元素a[i]为1表示整数i在集合中,数组元素a[j]为0表示整数j不在集合中。默认构造函数将集合初始化为“空集”,即所有元素都是0。
提供常用集合操作的成员函数。例如,提供一个unionOfIntegerSets成员函数,生成两个现有集合的并集(即只要其中一个集合的元素为1,则并集的元素就是1,如果两个集合的元素均为0,则并集的元素就是0)。
提供intersectionOfIntegerSets成员函数生成两个现有集合的交集(即只要其中一个集合的元素为0,交集的元素就是0,如果两个集合的元素均为1,则交集的元素就是1)。
提供一个insertElement成员函数,在集合中插入新整数k(将a[k]设置为1)。提供deleteElement删除整数m(将a[m]设置为0)。
提供一个setPrint成员函数,将集合表示的值打印为以空格分隔的列表,只打印集合中存在的元素(即对应值为1的位置),空集打印———。
提供一个isEqualTo成员函数,确定两个集合是否相等。
提供其他构造函数,取五个整数参数,可以初始化一组对象。如果提供的元素不到五个,其他元素用默认参数-1。
编写一个驱动程序,测试IntegerSet类。实例化几个integerSet对象。测试所有成员函数能否正确工作。
7. 10 图7.8的Time类可以在内部将时间表示为从午夜算起的秒数而不是三个整数值hour、minute和second。客户可以用相同的public方法并取得相同结果。修改图7.8的Time类,将时间表示为从午夜算起的秒数,证明类的客户看不到功能性的变化。