7.16 自助练习题
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 类,将时间表示为从午夜算起的秒数,证明类的客户看不到功能性的变化。