您的当前位置:首页正文

C++检测试题(二)

2024-09-13 来源:步旅网
C++面向对象程序设计检测试题(二)

继承与派生

班级: 学号: 姓名:

注:本试卷共6页,满分100分,考试时间120分钟 一、选择题(每题3分,共30分) 1. 下列对派生类的描述中,( )是错误的。 A.、一个派生类可以做另一个派生类的基类 B、派生类至少有一个基类

C、派生类的成员除了它自己的成员外,还包含了他的基类的成员 D.派生类中继承的基类的成员的访问权限到派生类保持不变 2.继承具有( ),即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员

A.规律性 B、传递性 C、重复性 D、多样性 3.对基类和派生类的关系描述中,( )是错误的

A、派生类是基类的具体化 B、派生类是基类的子集 C、派生类是基类定义的延续 D、派生类是基类的组合 4.派生类的构造函数的成员初始化列表中,不能包含()

A、基类的构造函数 B、派生类中子对象的初始化 C、基类的子对象初始化 D、派生类中一般数据成员的初始化

5.基类的( )不能为派生类的成员访问,基类的( )在派生类中性质和继承的性质一样,而基类的( )在私有继承时在派生类中成为私有成员,在公有和保护继承时在派生类中仍为保护对象。

A、公有成员 B、私有成员 C、私有成员函数 D、保护成员

6.在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则( )

A、完全相同 B、完全不同 C、部分不同,部分相同 D、以上都不对 7.在派生类对基类的继承的传递性中,( )是错误的

A、在公有继承方式下,直接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员。

B、在公有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员。

C、在私有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员。

D、不管是私有继承还是公有继承,基类的私有成员在派生类的作用域内都是不可见的 8..关于多继承二义性的描述中,( )是错误的

A、一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员进行访问可能出现二义性

B、解决二义性最常用的方法是用“类名::”指定成员名所属类 C、基类和派生类中出现的同名成员函数,也存在二义性的问题

D、一个派生类是从两个基类派生而来,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性

1

9.若要用派生类的对象访问基类的保护成员,以下观点正确的是()。

A、可采用公有继承 B、可采用私有继承 C、可采用保护继承 D、不可能实现 10.设置虚基类的目的是( )

A、简化程序 B、消除二义性 C、提高运行效率 D、减少目标代码 二、判断题(每题2分,共10分)

1.在私有继承中,基类中所有成员函数对间接派生类的对象都是不可见的。 ( ) 2.公有继承的对象时可以访问基类的私有成员的。 ( ) 3.构造函数和析构函数都不能被继承 ( ) 4.单继承情况,派生类中对基类成员的访问也会出现二义性。 ( ) 5.虚基类是用来解决多继承中公有积累在派生类中只产生一个基类成员对象的问题( ) 三、填空题(每题2分,共10分)

1.一个类可以从直接类或间接类的祖先中继承所有属性和方法。采用这个方法提高了软件的

2.如果一个派生类只有一个唯一的基类,则这样的继承关系称为

3.对于派生类的构造函数,在定义对象时构造函数的执行顺序为:先调用 构造函数,再执行调用 的构造函数(如果有的话),最后执行派生类的构造函数体中的内容。 4.通过C++语言中类的 ,可以扩充和完善已有类以适应新的要求。

5.不同对象可以调用相同名称的函数,但导致完全不同的行为的现象称为 四、写出下列程序的运行结果(前三题每题5分,第四题10分,共计25分)。 1. 派生类的构造函数和析构函数的用法 #include class Point{ public:

Point(int a,int b){X=a;Y=b;cout<<\"Point Constructor.\\n\";} showXY(){cout<<\"X=\"<class Rectangle:public Point{ public:

Rectangle(int a,int b,int c,int d ,int h,int w):Point(a,b),p(c,d)

{H=h;W=w;cout<<\"Rectangle.\\n\";}

~Rectangle(){cout<<\"Delete Rectangle.\\n\";}

void show(){p.showXY();cout<<\"H=\"<void main(){

Rectangle R(1,3,5,7,9,11); //定义一个派生类的对象 R.showXY(); //访问基类的成员函数

R.show(); //访问派生类自己的成员函数

2

}

2.多重继承派生类构造函数和析构函数的使用 #include class Base1{ public:

Base1(int i)

{x=i;cout<<\"Base1 Constructor.\"<{cout<<\"Base1 Destructor.\"<{cout<<\"x=\"<class Base2{ public:

Base2(int k)

{y=k;cout<<\"Base2 Constructor.\"<{cout<<\"Base2 Destructor.\"<{cout<<\"y=\"<class Derived:public Base2,public Base1{ public:

Derived(int a,int b,int c,int d):Base1(a),Base2(b),aa(c){ z=d;

cout<<\"Derived Constructor.\"<{ cout<<\"Derived Destructor.\"<{Base1::Print(); Base2::Print();

cout<<\"z=\"<private: int z; Base2 aa; };

void main(){

3

Derived p(1,2,3,4); p.Print();}

3.含有虚基类的构造函数的使用

#include class A{ public: A(int x0){

}

a=x0;

cout<<\"Call A:a=\"<protected: int a; };

class A1:virtual public A{ //定义虚基类 public:

A1(int x0,int x1):A(x0){

} int a1;

a1=x1;

cout<<\"Call A1:a1=\"<protected: };

class A2:virtual public A{ public:

A2(int x0,int x2):A(x0){

} int a2;

a2=x2;

cout<<\"Call A2:a2=\"<//定义虚基类

protected: };

class A3:public A1,A2{ public:

A3(int x0,int x1,int x2,int x3):A(x0),A1(x0,x1),A2(x0,x2){

a3=x3; } int a3;

cout<<\"Call A3:a3=\"<//派生类声明

protected: };

void main(){

A3 obj(12,18,28,58); //定义对象obj }

4.含有虚基类的多重继承(综合试题)。

4

#include class P{ public:

P(int p1,int p2){pri1=p1;pri2=p2;} int inc1(){return ++pri1;} int inc2(){return ++pri2;} void display(){

cout<<\"pri1=\"<int pri1,pri2; };

class D1:virtual private P{ public:

D1(int p1,int p2,int p3):P(p1,p2){pri3=p3;} int inc1(){return P::inc1();} int inc3(){return ++pri3;} void display(){ P::display();

cout<<\"pri3=\"<int pri3; };

class D2:virtual public P{ public:

D2(int p1,int p2,int p4):P(p1,p2){pri4=p4;} int inc1(){ P::inc1(); P::inc2();

return P::inc1();}

int inc4(){return ++pri4;} void display(){ P::display();

cout<<\"pri4=\"<int pri4; };

class D12:private D1,public D2{ public:

D12(int p11,int p12,int p13,int p21,int p22,int p23,int p) :D1(p11,p12,p13),D2(p21,p22,p23),P(p11,p21){ pri12=p;} int inc1(){ D2::inc1();

return D2::inc1();}

5

int inc5(){return ++pri12;} void display(){

cout<<\"D2::display()\"<cout<<\"pri12=\"<int pri12; };

void main(){

D12 d(1,2,3,4,5,6,7); d.display(); d.inc1(); d.inc4(); d.inc5();

d.D12::inc1(); d.display();}

五.程序设计题(25分)

试编写程序定义几何图形类Shape作为基类,并在基类的基础上派生出圆形Circle类和矩形Rectangle类,两个类都用函数CalculateArea计算几何图形的面积(程序不唯一,符合题意即可) 2011年5月28日

6

7

因篇幅问题不能全部显示,请点此查看更多更全内容