习题6
一、填空题
- 多重继承可以视为是 单一继承 的扩展。
- 访问控制权限是 public,protected,private 3种。
二、单项选择题
- 保证编译器正确调用成员函数的规则是( C)。
A. 赋值兼容 B. 继承 C. 作用域 D. 支配 - 下面叙述不正确的是(A )。
A. 基类的保护成员在派生类中仍然是保护的。 B. 基类的保护成员在公有派生类中仍然是保护的。
C. 基类的保护成员在私有派生类中是私有的。 D. 对基类成员的访问必须是无二义性的。 - 下面叙述不正确的是( C)。
A. 成员的访问能力在私有派生类中和公有派生类中是不同的。 B. 基类的私有成员在派生类中不可访问。
C. 赋值兼容规则不适用于多重继承的组合。 D. 公有基类成员在保护派生类中是保护的。 - 下面叙述不正确的是( )。 error:本题应为,下面叙述正确的是( A)
A. 派生类可以有自己的构造函数 B. 派生类继承基类的构造函数
C. 派生类继承基类的析构函数 D. 派生类只能继承基类的一个构造函数
三、改错题
- 改正类定义中的错误。
class base { int m; public: base(int a) : m(a); int Getx() { return m; } }; class derived : private base { public: //error1:派生类不能访问基类的私有成员 //error2:{};分号没有意义,编译错误 //正确应为:derived(int b) : base(b) {} derived(int b) : m(b) {}; };
- 下面的程序含有二义性,要求不修改主程序,通过重定义成员函数Show的方法解决名字冲突。
#include <iostream.h> class Base1 { protected: int m; public: void Show() { cout << m << endl; } }; class Base2 { protected: int n; public: void Show() { cout << n << endl; } }; class Derived : public Base1, public Base2 { public: void Set(int x, int y) { m = x; n = y; } /* void Show(){cout<<"m:"<<m<<","<<"n:"<<n<<endl;} //在派生类中增加对Show函数的冲定义,解决二义性问题 //也可改为:void Show(){Base1::Show();Base2::Show();} */ }; void main() { Derived Obj; Obj.Set(45, 87); Obj.Show(); Obj.Base1::Show(); }
四、编程题
- 设计一个基类,从基类派生圆,从圆派生圆柱,设计成员函数输出它们的面积和体积。
- 下面是某公司经理、兼职人员、销售经理和销售员的工资计算方法,设计合适的基类和派生类,实现这一工资管理任务。
- 定义一个线段类为矩形的基类,基类有起点和终点坐标,有输出坐标和长度以及线段和x轴的夹角的成员函数。矩形类用线段对象的两个坐标作为自己一条边的位置,它具有另外一个边长,能输出矩形的4个顶点坐标。给出类的定义并用程序验证他们的功能。
- 基类是使用极坐标的点类,从它派生一个圆类,圆类用点类的坐标作为圆心,圆周通过极坐标原点,圆类有输出圆心直角坐标、圆半径和面积成员函数。完成类的设计并验证之一。
- 设计一个线段基类,当创建无参数对象时,才要求用户输入长度。同样,其派生的直角三角形类也是产生对象时要求输入两个直角边的长度。直角三角形再派生矩形类,矩形类的参数也由键盘输入。设计这些类并测试它们的功能。
历史上的今天:
- 2021: begin主题最近读者源码解析(6)
本文章百度已收录,若发现本站有任何侵犯您利益的内容,请及时邮件或留言联系,我会第一时间删除所有相关内容。
2018年3月9日 23:19 沙发
记得以前什么语言都学过,都会hello world ,现在连TM hello world 都不会了