填空题
(1) 基派生
(2) 单继承多继承
(3) 私有继承方式
(4) 公有保护
(5) 多继承
(6) 支配规则
(7) 解决二义性
(8) 使用作用域运算符引进虚基类
选择题
(1) B (2) C D (3) A B C (4) C (5) A
(6) C (7) B (8) D (9) A D (10) A
判断题
(1) f (2) t (3) f (4) t (5) f (6) f
简答题
(1)
面向对象技术中,类是数据和操作的集合,它们之间有3种主要关系:Has-A,Uses-A和Is-A。Has-A表示类的包含关系,用以描述一个类由多个“部件类”构成。在面向对象技术中,实现has-A关系用类成员表示。
Uses-A表示一个类部分地使用另一个类。在面向对象技术中,这种关系通过类之间成员函数的相互联系或对象参数传递实现。另外,通过定义友员也能实现这种关系。
Is-A表示一种分类方式,描述类的抽象和层次关系。继承可以表达is-A关系。
(2)
所谓赋值兼容规则是指在公有继承情况下,一个派生类的对象可以作为基类的对象来使用的地方。具体来说,就是下面3种情况:
1) 派生类的对象可以赋给基类的对象。
2) 派生类的对象可以初始化基类的引用。
3) 派生类的对象的地址可以赋给指向基类的指针。
(3)
当类的继承方式为公有继承时,在派生类中,基类的公有成员和保护成员被继承后分别作为派生类的公有成员和保护成员,这样使得派生类的成员函数可以直接访问它们,而派生类成员函数无法直接访问基类的私有成员。在类外部,派生类的对象可以访问继承下来的基类公有成员。
当类的继承方式为私有继承时,在派生类中,基类的公有成员和保护成员作为派生类的私有
成员,派生类的成员函数可以直接访问它们,而派生类的成员函数无法直接访问基类的私有成员。在类外部,派生类的对象无法访问基类的所有成员。
当类的继承方式为保护继承时,在派生类中,基类的公有成员和保护成员作为派生类的保护成员,派生类的成员函数可以直接访问它们,而派生类的成员函数无法直接访问基类的私有成员。在类外部,派生类的对象无法访问基类的所有成员。
(4)
首先基类构造函数被调用,子对象所在类构造函数次之,最后执行派生类构造函数。(5)
若派生类有构造函数而基类没有,当创建派生类的对象时,派生类的相应构造函数被自动调用。
若派生类没有构造函数而基类有,则基类必须拥有缺省构造函数。只有这样,当创建派生类的对象时,才能自动执行基类的默认构造函数。
若派生类有构造函数,且基类有缺省构造函数,则创建派生类的对象时,基类的缺省构造函数会自动执行,除非当前被调用的派生类构造函数在其初始化段中显式地调用了基类的有参构造函数。
若派生类和基类都有构造函数,但基类没有缺省构造函数,则派生类的每一个构造函数必须在其初始化列表中显式地调用基类的某个构造函数。只有这样,当创建派生类的对象时,基类的构造函数才能获得执行机会。
程序分析题
(11,12)
(26,29)
15,16
(26,29)
程序设计题
//xiti4_1.cpp
#include
class Point //定义基类
{
protected:
int x,y;
public:
Point(int myx,int myy){x=myx;y=myy;}
void displayxy()
{
cout<<"The postion of point:";
cout<<"("< } }; class Rectangle:public Point //定义派生类,公有继承方式 { private: int l,w; public: