6.1 填空
a)结构定义用关键字——引入。
b)类成员通过——运算符和类对象名或通过——运算符和类对象指针访问。
c)指定为——的类成员只能由类的成员函数和友元访问。
d)——是个特殊成员函数,用于初始化类的数据成员。
e)类成员的默认访问模式为——。
f)——函数用于向类的private数据成员赋值。
g)——可以将一个类对象赋给相同类的另一对象。
h)类的成员函数通常指定为——,类的数据成员通常指定为——。
i)——函数用于读取类的private数据值。
j)类的public成员函数集称为类的——。
k)类的实现方法对客户隐藏,也称为——。
l)关键字——和——可以引入类定义。
m)指定为——的类成员可以在类对象所在范围中的任何位置访问。
6.2 寻找下列各题的错误并说明如何纠正。
a)假设Time类中声明下列原型:
void ~Time( int );
b)下面是Time类的部分定义:
class Time{ public: // function prototypes private: int hour = 0; int minute = O; int second = O; };
c)假设Employee类中声明下列原型:
int Employee(const char*,const char* );
6.1 a)struct。b)圆点(.)、箭头(->)。c)private。d)构造函数。e)private。f)set。g)默认的成员复制(用赋值运算符进行)。h)public、private。i)get。j)接口。k)封装。l)class、struct。 m)public。
6.2 a)不正确:析构函数不能取得参数或返回数值。
纠正:删除声明中的返回类型void和参数int。
b)不正确:成员不能在类定义中初始化。
纠正:从类定义中删除初始化并在构造函数中初始化数据成员。
c)不正确:构造函数不允许返回数值。
纠正:从声明中删除返回类型int。
6.3 作用域运算符的作用是什么
6.4 比较C++中的struct和class。
6.5 提供一个构造函数,用time()函数中的当前时间初始化Time类对象,time()在C标准库的头文件time.h中声明。
6.6 生成complex类,进行复数的运算。编写一个驱动程序,测试这个类。
复数的形式如下:
realpart + lmaginaryPart * i
其中i为:
(-1)1/2
用浮点变量表示类的privale数据。提供一个构造函数,让这个类的对象在声明时初始化。
不提供初始化值时,构造函数应包含默认值。对下列情况提供public成员函数:
a)两个complex值相加:实数部分相加,虚数部分相加。
b)两个complex值相减:实数部分相减,虚数部分相减。
c)打印形如(a,b)的complex值,其中a为实数部分.b为虚数部分。
6.7 生成一个Rational类,进行带分数的运算。编写一个驱动程序,测试这个类。
用整数变量表示类的private数据(分子和分母),提供一个对所声明对象初始化的构
造函数。不提供初始化值时,构造函数应包含默认值并将分数存放成简化形式,例如分数:
2/4
应在对象中存放成分子1和分母2的形式。对下列情况提供public成员函数:
a)两个Rational值相加,结果保存成简化形式。
b)两个Rational值相减,结果保存成简化形式。
c)两个Rational值相乘,结果保存成简化形式。
d)两个Rational值相除,结果保存成简化形式。
e)按a/b形式打印Rational值,其中a为分子,b为分母。
f)按浮点数形式打印Rational值。
6.8 修改图6.10的Time类,用—个tick成员函数将Time对象中存放的时间递增1秒。Time 对象应该总是保持一致状态。编写一个驱动程序,在循环中测试tick成员函数,按标准格式打印时间,从而演示tick成员函数的工作情况。要保证测试下列情况:
a)递增到下一分钟。
b)递增到下一小时。
c)递增到下一天(即11:59:59PM到12:00:00AM)。
6.9 修改图6.12的Date类,对数据成员month、day和year的的初始化值进行错误检查。并提供成员函数nextDay将日期递增1天。Date对象应该总是保持一致状态。编写一个驱动程序,在循环中测试nextDay成员函数,按标准格式打印日期,演示nextDay成员函数的工作情况。要保证测试下列情况:
a)递增到下一月。
b)递增到下一年。
6.10将练习6.8修改的Time类和练习6.9修改的Date类合并成DateAndTime类(第9章将介绍继承,方便地完成这个工作而不必修改现有类定义)。修改tick函数,在时间递增到下一天时调用nextDay函数。修改函数printStandard和printMilitary.不仅输出时间,也输出日期。编写一个驱动程序,测试新类DateAndTime(特别要测试时间递增到下一天时的情况)。
6. 11修改图6.10的set函数,在Time类对象的数据成员要设置为无效值时返回相应错误值。
6. 12生成一个Rectangle类,这个类的length和width属性默认为1,其成员函数计算长方形的perimeter(周长)和area(面积)。为该类的length和width设置set和get函数。set函数应验证length和width均为0.0到20.0之间的浮点数。
6.13生成比上一练习更复杂的Rectangle类,这个类只保存长方形4个角的直角坐标值。构造函数调用一个set函数,接受四组坐标并验证它们均在第一象限中,x、y坐标均不大于20.0,该函数还验证提供的坐标确实构成长方形。成员函数计算length、width、perimeter和area。长度为两个值中较大者。用一个判定函效square确定是否为正方形。
6.14修改练习6.13的Rectangle类,用draw函数在矩形所在第一象限的25 x 25闭合框中显示这个长方形。用setFillCharacter函数指定绘制长方形外部的字符。用setPerimeterCharacter函数指定绘制长方形四边的字符。还可以加上函数对长方形进行比例缩放、旋转和在第一象限指定范围中移动。
6.15生成HugeInteger类,用40个元素的数字数组存放最多40位的整数值。提供成员函数inputHugeInteger、outputHugeInteger、addHugeIntegers和substractHugeIntegers。要比较HugeInteger对象,提供函数isEqualTo、isNotEqualTo、isGreaterThan、isLessThan、IsGreaterThanorEqualTo和isLessThanOrEqualTo,这些判定函数在两个大数间的关系成立时返回true,关系不成立时返回false。该类还提供判定函数isZero,也可以提供成员函数 multiplyHugeIntegers、divideHugeIntegers和modulusHugeIntegers。
6.16生成一个TicTacToe类,编写完成三连棋游戏的程序。这个类包含一个3 x 3整型数组作为private数据,构造函数将空棋盘全部初始化为0。允许两个人玩游戏。第一个人走棋时,将1放在指定格中;第二个人走棋时,将2放在指定格中,每次只准移动到空白格。
走棋之后,确定是否有人赢了(即3个1连成一条线或3个2连成一条线),或是否打了个平手。还可以将程序修改成人机进行游戏,允许游戏者决定他是先走还是后走。甚至可以开发一个程序,在4 x 4 x 4棋盘上玩三维三连棋游戏(注意:这个项目相当难,可能要好几个星期才能完成)。