C++习题3继承和多态.docx

上传人:b****7 文档编号:9793252 上传时间:2023-02-06 格式:DOCX 页数:12 大小:20.77KB
下载 相关 举报
C++习题3继承和多态.docx_第1页
第1页 / 共12页
C++习题3继承和多态.docx_第2页
第2页 / 共12页
C++习题3继承和多态.docx_第3页
第3页 / 共12页
C++习题3继承和多态.docx_第4页
第4页 / 共12页
C++习题3继承和多态.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C++习题3继承和多态.docx

《C++习题3继承和多态.docx》由会员分享,可在线阅读,更多相关《C++习题3继承和多态.docx(12页珍藏版)》请在冰豆网上搜索。

C++习题3继承和多态.docx

C++习题3继承和多态

习题3

一、选择题

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

A)自反性B)对称性C)传递性D)反对称性

2.在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(B)

A)受限制B)保持不变C)受保护D)不受保护

3.按解释中的要求在下列程序划线处填入的正确语句是:

(C)

#include

classBase{

public:

voidfun(){cout<<"Base:

:

fun"<

};

classDerived:

publicBase{

public:

voidfun()

{//在此空格处调用基类的函数fun()

cout<<"Derived:

:

fun"<

};

A)fun();B)Base.fun();C)Base:

:

fun();D)Base->fun();

4.在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(C)

A)受限制B)保持不变C)受保护D)不受保护

5.在哪种派生方式中,派生类可以访问基类中的protected成员(B)

A)public和privateB)public、protected和private

C)protected和privateD)仅protected

6.当一个派生类仅有protected继承一个基类时,基类中的所有公有成员成为派生类的(C)

A)public成员B)private成员C)protected成员D)友元

7.不论派生类以何种方法继承基类,都不能使用基类的(B)

A)public成员B)private成员C)protected成员D)public成员和protected成员

8下面叙述错误的是(S)。

A)基类的protected成员在派生类中仍然是protected的

B)基类的protected成员在public派生类中仍然是protected的

C)基类的protected成员在private派生类中是private的

D)基类的protected成员不能被派生类的对象访问

9.下列说法中错误的是(S)。

A)保护继承时基类中的public成员在派生类中仍是public的

B)公有继承时基类中的private成员在派生类中仍是private的

C)私有继承时基类中的public成员在派生类中是private的

D)保护继承时基类中的public成员在派生类中是protected的

10下面叙述错误的是(C)。

A)派生类可以使用private派生

B)对基类成员的访问必须是无二义性的

C)基类成员的访问能力在派生类中维持不变

D)赋值兼容规则也适用于多继承的组合

11派生类的构造函数的成员初始化列表中,不能包含(C)。

A)基类的构造函数B)派生类中子对象的初始化

C)基类中子对象的初始化D)派生类中一般数据成员的初始化

12.下列虚基类的声明中,正确的是:

(B)

A)classvirtualB:

publicAB)classB:

virtualpublicA

C)classB:

publicAvirtualD)virtualclassB:

publicA

13..实现运行时的多态性采用(D)

A)重载函数B)构造函数C)析构函数D)虚函数

14.若一个类中含有纯虚函数,则该类称为(D)

A)基类B)纯基类C)派生类D)抽象类

15.假设A为抽象类,下列声明(B)是正确的

A)Afun(int);B)A*p;C)intfun(A);D)AObj;

16.在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值(B)

A)不同B)相同C)相容D)部分相同

17.下面函数原型声明中,(C)声明了fun为普通虚函数

A)voidfun()=0;B)virtualvoidfun()=0;

C)virtualvoidfun();D)virtualvoidfun(){};

18.在下面四个选项中,(A)是用来声明虚函数的。

A)virtualB)publicC)usingD)false

19.实现运行时的多态性要使用(D)。

A)重载函数B)构造函数

C)析构函数D)虚函数

20.关于虚函数的描述中,正确的是(D)。

A)虚函数是一个静态成员函数

B)虚函数是一个非成员函数

C)虚函数既可以在函数说明时定义,也可以在函数实现时定义

D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型

二、填空题:

1.派生类对基类的继承有三种方式:

_public___、_protected___和__private___。

2.如果类Alpha继承了类Beta,则类Alpha称为__派生__类,类Beta称为__基_类。

3.设置虚基类的目的是为了消除二义性,可通过_virtual标识虚基类。

4.类继承中,缺省的继承方式是__private_________。

5.当用protected继承从基类派生→个类时,基类的public成员成为派生类的_protected__________成员,protected成员成为派生类的_protected________成员。

6.指向基类的对象的指针变量也可以指向__公有派生类的对象。

三、程序题

1.继承的工作方式,完成以下代码。

要求:

(1)处继承方式为共有继承public,

(2)处填写基类的ai,(3)处填写派生类的bi,(4)对象b的数据成员有哪些?

ai,bi

#include

#include

classA{

public:

A(){ai=1;}

protected:

intai;

};

classB:

_____A{

public:

B(){bi=2;}

voiddisplay(){cout<<____

(2)____<<____(3)____<

private:

intbi;

};

intmain()

{

Bb;

b.display();

}

2.

派生类的构造。

派生类的构造总是由基类的初始化开始的。

填写代码,完成基类的初始化。

并且要求屏幕输出效果是:

#include

classA{

public:

A(inti){x=i;cout<<"CA:

"<

~A(){cout<<"DA"<

private:

intx;

};

classB:

publicA{

public:

B():

_A(90)_{y=0;cout<<"CB"<

~B(){cout<<"DB"<

private:

inty;

};

intmain()

{

Bb;

}

3.填写初始化列表,完成以下程序,使得屏幕输出:

#include

classA{

public:

A(inti){x=i;cout<

private:

intx;

};

classD{

public:

D(inti){m=i;cout<

private:

intm;

};

classB:

publicA{

public:

B():

_A(90),d(19)

{y=0;}

private:

inty;

Dd;

};

intmain()

{

Bb;

}

4.请问以下程序输出什么?

#include

classA{

public:

A(inti){x=i;}

intx;

};

classB:

publicA{

public:

B(inti):

A(i+1){y=i;}

inty;

};

voidf1(A&ra)

{

cout<

}

voidf2(A*pa)

{

cout<x<

}

intmain()

{

Bb(3);

f1(b);

f2(&b);

}

4答案:

5.请问以下程序输出什么?

#include

classA{

public:

voiddisplay(){cout<<"A"<

};

classB:

publicA{

public:

voiddisplay(){cout<<"B"<

};

voidf(A&r)

{

r.display();

}

intmain()

{

Bb;

f(b);

Aa;

f(a);

}

5.答案:

6.多态性,虚函数。

请问以下程序输出什么?

#include

classA{

public:

virtualvoiddisplay(){cout<<"A"<

};

classB:

publicA{

public:

virtualvoiddisplay(){cout<<"B"<

};

voidf(A&r)

{

r.display();

}

intmain()

{

Bb;

f(b);

Aa;

f(a);

}

6.答案:

7.请问以下程序输出什么?

#include

classA{

public:

virtualvoiddisplay(){cout<<"A"<

};

classB:

publicA{

public:

virtualvoiddisplay(){cout<<"B"<

};

classC:

publicA{

public:

virtualvoiddisplay(){cout<<"C"<

};

intmain()

{

Aa,aa;

Bb;

Cc,cc,ccc;

A*pa[6]={&a,&aa,&b,&c,&cc,&ccc};

inti=0;

for(i=0;i<6;++i)

pa[i]->display();

}

答案:

8.以下程序的屏幕输出是:

为何以下程序的屏幕输出中会输出DA呢?

请说明。

#include

classA{

public:

~A(){cout<<"DA";}

};

classB:

publicA{

public:

~B(){cout<<"DB";}

};

intmain()

{

Bb;

}

答案:

定义类B对象b时,先调用基类A的构造函数,再调用派生类类B的构造函数。

析构时正好相反,先析构B类,再析构A类。

 

1答案:

(1)public

(2)ai(3)bi(4)ai、bi

2.答案:

A(90)

3.答案:

A(90),d(19)

4答案:

5.答案:

6.答案:

7.答案:

8.答案:

定义类B对象b时,先调用基类A的构造函数,再调用派生类类B的构造函数。

析构时正好相反,先析构B类,再析构A类。

选择

CBCCBCBAACCBDDBBCADD

填空:

1.public__、___protected__和___private

2.派生,基类

3.为了消除二义性virtual

4.private

5._protected_protected

6.公有派生类

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1