西安石油大学大二(上)C++面向对象程序设计课件各章习题

习题5

基本概念题: 9.1 填空题:

(1)派生类的成员函数可以直接访问基类的 成员,不能直接访问基类的 ______成员。

(2)当保护继承时,基类的 成员在派生类中成为保护成员,派生类对象不能直接访问基类的 ____成员。

(3)在定义一个派生类时,使用__________关键字或者不显式地使用它则表示为__________继承。

(4)若多个基类及其派生类中都定义了同名成员函数,要访问相应函数时,就需要在函数名前加上______和类区分符。

(5)若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以____________的方式直接继承它。

9.2 选择题:

(1)从一个基类派生出的各个类的对象之间( )。

A. 共享所有成员变量,每个对象还包含基类的所有属性 B. 共享部分成员变量,每个对象还包含基类的所有属性 C. 不共享任何成员变量,但每个对象还包含基类的所有属性 D. 共享部分成员变量和成员函数

(2)如果是类B在类A的基础上构造,那么,就称( )。 A. 类A为基类或父类,类B为超类或子类

B. 类A为基类、父类或超类,类B为派生类或子类 C. 类A为派生类,类B为基类

D. 类A为派生类或子类,类B为基类、父类或超类 (3)C++的继承性允许派生类继承基类的( )。

A. 部分特性,并允许增加新的特性或重定义基类的特性 B. 部分特性,但不允许增加新的特性或重定义基类的特性 C. 所有特性,并允许增加新的特性或重定义基类的特性 D. 所有特性,但不允许增加新的特性或重定义基类的特性 (4)派生类的成员函数可以直接访问基类的( )成员。

A. 所有 B. 公有和保护 C. 保护和私有 D. 私有 (5)对于公有继承,基类的公有和保护成员在派生类中将( )成员。 A. 全部变成公有 B. 全部变成保护

C. 全部变成私有 D. 仍然相应保持为公有和保护 (7)对于公有继承,基类中的私有成员在派生类中将 ( )。

A. 能够直接使用成员名访问 B. 能够通过成员运算符访问

26

C. 仍然是基类的私有成员 D. 变为派生类的私有成员

(8)当保护继承时,基类的( )在派生类中成为保护成员,在类作用域外不能够通过派生类的对象来直接访问该成员。

A. 任何成员 B.公有成员和保护成员 C. 保护成员和私有成员 D.私有成员

(9)在定义一个派生类时,若不使用保留字显式地规定采用何种继承方式,则默认为( )方式。

A. 私有继承 B. 非私有继承 C. 保护继承 D. 公有继承

(10)建立包含有类对象成员的派生类对象时,自动调用构造函数的执行顺序依次为( )的构造函数。

A. 自己所属类、对象成员所属类、基类 B. 对象成员所属类、基类、自己所属类 C. 基类、对象成员所属类、自己所属类 D. 基类、自己所属类、对象成员所属类

(11)当派生类中有和基类一样名字的成员时,一般来说,( )。

A. 将产生二义性 B. 派生类的同名成员将覆盖基类的成员 C. 是不能允许的 D. 基类的同名成员将覆盖派生类的成员 (12)C++中的虚基类机制可以保证:( )。 A. 限定基类只通过一条路径派生出派生类

B. 允许基类通过多条路径派生出派生类,派生类也就能多次继承该基类 C. 当一个类多次间接从基类派生后,派生类对象能保留多份间接基类的成员 D. 当一个类多次间接从基类派生后,其基类只被一次继承 (13)下列对派生类的描述中错误的说法是:( )。 A. 派生类至少有一个基类

B. 派生类可作为另一个派生类的基类

C. 派生类除了包含它直接定义的成员外,还包含其基类的成员 D. 派生类所继承的基类成员的访问权限保持不变 (14)派生类的对象对其基类中( )可直接访问。 A. 公有继承的公有成员 B. 公有继承的私有成员 C. 公有继承的保护成员 D. 私有继承的公有成员

9.3 什么叫基类?什么叫派生类?基类中保护成员的访问权限有什么意义? 9.4 公有继承、私有继承和保护继承方式下,基类中的私有成员、保护成员和公有成员,在派生类内和在类外两种情况下的访问权限是什么? 9.5 某个类的对象能直接调用该类的私有成员和保护成员吗? 9.6 什么叫派生类中的基类子对象?

9.7 从基类公有继承产生派生类时,基类中的构造函数和析构函数能被派生类继承吗?

27

9.8 怎样设计派生类的构造函数?

9.9 什么叫派生类覆盖基类的成员函数?派生类覆盖基类的成员函数有什么设计要求?

9.10 什么叫派生类重载基类的成员函数?派生类重载基类的成员函数有什么设计要求?

9.11 叙述基类和派生类的赋值兼容规则。赋值兼容规则有什么意义?

9.12 12.比较派生类对基类成员函数重载和派生类对基类成员函数覆盖两者的相同点和不同点。

9.13 什么叫多重继承?什么叫公共基类?举例说明多重继承中成员变量的二义性问题和成员函数的二义性问题。

9.14 什么叫虚基类?怎样解决多重继承中成员变量的二义性问题?怎样解决多重继承中成员函数的二义性问题?

9.15 下面的类中,哪些成员函数是重载?哪些成员函数是覆盖?

class Car { public: };

class SportsCar: public Car { public: };

SportsCar() {}

SportsCar(int s) {}

void f(int c) {}

void f(float d) {} Car() {}

void f(int c) {}

void d() {}

9.16 对于上题的Car类和SportsCar类,如果增加如下主函数,说明系统匹配各对象调用的成员函数分别是什么?

void main(void)

28

{ Car myCar;

SportsCar mySportsCar; int c = 5; float d = 5.0; myCar.f(c); mySportsCar.f(c); mySportsCar.f(d); mySportsCar.d();

}

程序阅读和设计题:

9.17 阅读程序,给出运行结果: (1)

#include \class A {

private: int a,b; public:

A(int i,int j) { a=i; b=j;

}

void move(int x,int y) { a+=x; b+=y; }

void show() { cout<

};

class B: private A {

private:

29

int x,y;

public:

B(int i,int j,int k,int l):A(i,j) { x=k; y=l;

}

void show() { cout<

void fun() { move(2,4);

}

void f1() { A::show(); }

};

void main() { A a1(10,10); a1.show(); B b1(5,5,6,6); b1.fun(); b1.show(); b1.f1(); }

2)

#include class Point { int x,y; public: Point(int x1=0, int y1=0) :x(x1), y(y1) { cout<<\

}

~Point() {

30

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4