C++课后习题答案第七章

  • 格式:doc
  • 大小:37.00 KB
  • 文档页数:5

下载文档原格式

  / 14
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++作业答案

第7章继承

7.1 选择题

1.在c++中,类与类之间的继承关系具有( c )。

(a) 自反性 (b) 对称性 (c) 传递性 (d) 反对称性

2.下列关于类的继承描述中,( a,b )是错误的。

(a) 派生类可以访问基类的所有数据成员,调用基类的所有成员函数

(b) 派生类也是基类,所以基类具有派生类的全部属性和方法

(c) 继承描述类的层次关系,派生类可以具有与基类相同的属性和方法

(d) 一个基类可以有多个派生类,一个派生类可以有多个基类

3.当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的( a )。

(a) public 成员 (b)private成员

(c) protected成员 (d)友员

4.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( b )。

(a) public 成员 (b)private成员

(c) protected成员 (d)友员

5.当一个派生类保护继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( c )。

(a) public 成员 (b)private成员

(c) protected成员 (d)友员

6.不论派生类以何种方式继承基类,都不能使用基类的( b )。

(a) public 成员 (b)private成员

(c) protected成员 (d)public 成员和protected成员

7.下面描述中,错误的是( b, c )。

(a) 在基类定义的public成员在公有继承的派生类中可见,也能在类外被访问

(b) 在基类定义的public和protected成员在私有继承的派生类中可见,在类外可以被访问

(c) 在基类定义的public和protected成员在保护继承的派生类中不可见

(d) 在派生类中不可见的成员要变成可访问的需进行访问声明

8.在c++中,不能被派生类继承的函数是( b,c )。

(a) 成员函数 (b)构造函数

(c) 析构函数 (d)静态成员函数

9.在创建派生类对象时,构造函数的执行顺序是( d )。

(a) 对象成员构造函数、基类构造函数、派生类本身的构造函数

(b) 派生类本身的构造函数、基类构造函数、对象成员构造函数

(c) 基类构造函数、派生类本身的构造函数、对象成员构造函数

(d) 基类构造函数、对象成员构造函数、派生类本身的构造函数10.当不同的类具有相同的间接基类时,有特点( d )。

(a) 各派生类对象将按继承路线产生自己的基类版本

(b) 派生类对象无法产生自己的基类版本

(c) 为了建立惟一的间接基类版本,应该必须改变类格

(d) 为了建立惟一的间接基类版本,应该声明虚继承

7.2 阅读下列程序,写出执行结果

1.#include

class BASE

{ public:

void get( int i,int j,int k,int l )

{ a = i; b = j; x = k; y = l; }

void print()

{ cout << "a = "<< a << '\t' << "b = " << b << '\t'

<< "x = " << x << '\t' << "y = " << y << endl;

}

int a,b;

protected:

int x, y;

};

class A: public BASE

{ public:

void get( int i, int j, int k, int l )

{ BASE obj3;

obj3.get( 50, 60, 70, 80 );

obj3.print();

a = i;

b = j; x = k; y = l;

u = a + b + obj3.a ; v = y - x + obj3.b;

}

void print()

{ cout << "a = " << a << '\t' << "b = " << b << '\t'

<< "x = " << x << '\t' << "y = " << y << endl;

cout << "u = " << u << '\t' << "v = " << v << endl;

}

private:

int u, v ;

};

void main()

{ BASE obj1;

A obj2;

obj1.get( 10, 20, 30, 40 );

obj2.get( 30, 40, 50, 60 );

obj1.print();

obj2.print();

}

答案:

a = 50

b = 60 x = 70 y = 80

a = 10

b = 20 x = 30 y = 40

a = 30

b = 40 x = 50 y = 60

u = 120 v = 70

2. #include

class BASE1

{ public:

BASE1( int i ) { cout << "调用基类BASE1的构造函数:" << i << endl ; }

};

class BASE2

{ public:

BASE2( int j ) { cout << "调用基类BASE2的构造函数:" << j << endl ; }

};

class A: public BASE1, public BASE2

{ public:

A( int a, int b, int c, int d ) : BASE2(b), BASE1(c), b2(a), b1(d) { cout << "调用派生类A的构造函数:" << a+b+c+d << endl; } private:

BASE1 b1;

BASE2 b2;

} ;

void main()

{ A obj( 1, 2, 3, 4 ); }

答案:

调用基类BASE1的构造函数:3

调用基类BASE2的构造函数:2

调用基类BASE1的构造函数:4

调用基类BASE1的构造函数:1

调用派生类A的构造函数:10

7.3 编程题

1.定义一个rectangle类,它包含两个数据成员length和width;以及包含用于求长方形面积的成员函数。再定义rectangle的派生类rectangular,它包含一个新数据成员height和用来求长方体体积的成员函数。在main函数中,使用两个类,求某个长方形的面积和某个长方体的体积。

解答: