cout< cout< 9.18 设计一个点类,它仅包含两个属性:横坐标和纵坐标。通过继承点类再设计一个圆类,它除了有一个圆心,还有半径,还应该能够计算圆的周长和面积等。编写一个测试程序来测试所设计的类能否实现预定的功能。 9.19 设计一个动物类,它包含一些动物的属性,例如名称、大小、重量等,动物可以跑或走。然后设计一个鸟类,除了动物的基本属性外,它还有自己的羽毛、翅膀等,鸟除了跑或走外,它还可以飞翔。为了继承动物类的特性,鸟类应该继承动物类。编写一个测试程序来测试所设计的鸟类能否实现预定的功能。 9.20 先设计一个长方形类,再通过继承长方形类设计一个正方形类,正方形类中通过覆盖父类的成员函数得到一些新的功能。 9.21 先设计一个基本账户类,再通过继承基本账户类设计一个储蓄帐户类,储蓄帐户类中增加一个静态成员变量(年利率),并增加如下成员函数: (1)计算月利息:存款金额*年利率/12 (2)更改利率(静态方法):重新设置年利率 最后,编写一个测试程序来测试所设计的储蓄帐户类能否实现预定的功能。 9.22 先设计一个基本账户类,再通过继承基本账户类设计一个储蓄帐户类,储蓄帐户类中增加密码、地址、最小余额和利率等成员变量,并增加一些银行帐户经常用到的成员函数,要求: (1)类中的成员函数具有输入、输出储户上述信息的功能。 (2)将账号设计成不可更改。 (3)修改密码时要提供原密码。 9.23 在阅读5.6.1节内容的基础上,进一步分析图书馆的图书和杂志管理和借阅方式,设计一个基本符合图书馆实际工作方式的图书和杂志借阅系统。 36 习题6 基本概念题: 9.1 什么叫运行时的多态性?动态绑定和运行时的多态性有什么关系? 9.2 什么叫虚函数?虚函数怎样实现运行时的多态性? 9.3 虚函数方法和派生类对基类成员函数覆盖方法有哪些相同之处和不同之处? 9.4 虚析构函数有什么作用? 9.5 什么叫抽象类?抽象类有什么用途? 9.6 怎样用纯虚函数方法设计抽象类? 9.7 空的虚函数和纯虚函数有什么区别? 9.8 虚函数怎样实现运行时的多态性? 9.9 纯虚函数可以实现运行时的多态性吗? 程序阅读和设计题: 9.10 阅读程序,给出运行结果: #include virtual void Set(int b){x=b;} virtual int Get(){ return x;} private: int x; }; class Derived: public Base { public: void Set(int d){y = d;} int Get(){return y;} private: int y; }; void main( ) { 37 Base B_obj; Derived D_obj; Base *p=&B_obj; p->Set(100); cout<<\ p=&D_obj; p->Set(200); cout<<\ p->Base::Set(300); cout<<\ p->Set(p->Get()+200); cout<<\} 9.11 编写计算正方体、圆柱体、球体的表面积和体积的类。要求: (1)这三个类有一个公共的基类; (2)这三个类计算正方体、圆柱体、球体的表面积和体积的成员函数名字相同; (3)按照运行时的多态性方法设计一个测试主函数,并进行测试。 9.12 设计一个异质链式堆栈类。要求堆栈中既可以保存int类型数据,也可以保存char类型数据。 (提示:(1)设计一个结点基类,再公有派生int类型的结点类和char类型的结点类;(2)主函数中用运行时的多态性方法构造链式堆栈。这样就可以构造出异质链式堆栈。) 9.13 设计一个异质链式队列类。要求队列中既可以保存int类型数据,也可以保 存char类型数据。 38 习题7 基本概念题: 9.1 常规方法是怎样设计处理方法相同、仅参数的数据类型不同的通用函数的? 9.2 什么叫参数多态性?什么叫模板?模板方法是怎样解决参数多态性问题的? 9.3 解释函数模板和模板函数。 9.4 解释类模板和模板类。类模板和模板类,哪个可以用来创建对象? 9.5 解释模板形参、模板实参和参数实例化。 9.6 写出函数模板的语句格式。说明函数模板的使用方法。 9.7 写出类模板的语句格式。说明类模板的使用方法。 程序设计题: 9.8 设计一个分数类模板。要求: (1)分数类模板中包含的分数运算有:两个分数的加、减、乘、除运算。 (2)分数的输出格式是:分子/分母。 (3)测试程序中分子和分母既可以同时为int类型,也可以同时为float类型。 9.9 设计一个在三个数值中找出最大数值的函数模板。并设计一个测试程序进行测试。测试程序中三个数值既可以同时为int类型,也可以同时为float类型。 9.10 设计复数类模板。要求: (1)复数类模板中包含的复数运算有:两个复数的加、减、乘、除运算,一个复数和一个实部数值的加、减、乘、除运算。 (2)设计一个测试程序进行测试。 9.11 设计单链表类模板。要求: (1)单链表类模板中包含的单链表操作有:在单链表的某个位置插入一个数据元素,删除单链表某个位置中的数据元素。 (2)设计一个测试程序进行测试。 39 习题8 基本概念题: 9.1 什么是异常?举出程序中常见异常的例子。 9.2 简述异常处理的基本思想和方法? 9.3 对比传统异常处理的设计方法和本章讨论的异常处理的设计方法,说明本章讨论的异常处理有什么优点? 9.4 简述throw语句、try语句和catch语句的功能。 9.5 简述异常类的作用和设计方法。 9.6 当同时可能出现多个异常时, try-catch的不同排列顺序对异常处理有什么影响? 9.7 异常抛出和处理的方式有几种?在什么情况下,应该采用第一种方式?在什么情况下,应该采用第二种方式? 9.8 异常处理和程序的健壮性有什么关系? 9.9 C++异常处理的基本思想和基本方法是什么? 9.10 C++的throw-try-catch异常处理方法和C语言if语句的错误处理方法相比,有什么优点? 9.11 说明异常抛出和处理的两种方式。说明当异常类非空时,异常类在异常处理中有什么作用? 程序设计题: 9.12 设计一个考虑异常情况的模板堆栈类。并设计一个测试程序进行测试。 9.13 设计一个包括考虑异常情况的分数类和一个测试程序。 要求:(1)异常的抛出和处理采用第一种方式; (2)异常的抛出和处理采用第二种方式。 9.14 设计一个考虑邮件地址异常情况的邮件地址类。当用户输入的邮件地址不合法时,抛出异常。并设计一个包括异常处理的测试程序。 40