第5章 多态性和虚函数

2019-01-19 13:22

《面向对象程序设计》习题

班级:学号:姓名:成绩:____________

第5章多态性和虚函数

一、选择题(共26分,每题2分)

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

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

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

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

D. 派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 2.编译时的多态性可以通过使用( )获得。

A.虚函数和指针B.重载函数和析构函数C.虚函数和对象 D.虚函数和引用 3.下面是类Shape的定义 Class Shape { public:

Virtual void Draw()=0; };

下列关于Shape类的描述中,正确的是()。 A.类Shape是虚基类 B.类Shape是抽象类类

C.类Shape中的Draw函数声明有误

D.语句“Shape s”能够建立Shape的一个对象 4. 下面4个选项中,()是用来声明虚函数的。

A.virtual B.public C.using D.false 5. 关于纯虚函数和抽象类的描述中,错误的是()。

A.纯虚函数是一种特殊的虚函数,它没有具体的实现 B.抽象类是指具体纯虚函数的类

C.一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类 D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 6. 下列描述中,()是抽象类的特征。

A.可以说明虚函数B.可以进行构造函数重载 C.可以定义友元函数D.不能说明其对象 7. 以下()成员函数表示虚函数。

A.virtual intvf(int); B.void vf(int)=0;

C.virtual void vf()=0; D.virtual void vf(int) { }; 8. 如果一个类至少有一个纯虚函数,那么就称该类为()。 A.派生类 B.虚函数C.抽象类D.以上都不对 9. 要实现动态联编,必须通过()调用虚函数。

A.对象指针 B.成员名限定 C.对象名 D.派生类名 10. 下面描述中,正确的是()。

1

A.virtual可以用来声明虚函数

B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类 C.即使基类的构造函数没有参数,派生类也必须建立构造函数 D.静态数据成员可以通过成员初始化列表来初始化 11. 有如下的程序

#include using namespace std; class Base{ public: void fun1(){cout<<\ virtual void fun2(){ cout<<\ };

class Derived:public Base{ public: void fun1(){ cout<<\} void fun2(){cout<<\};

void f(Base &b){ b.fun1();b.fun2(); } int main()

{ Derived obj; f(obj); return 0; }

程序的运行结果是()。

A.BaseB.Base C.Derived D.Derived

BaseDerived Base Derived

12. 下列选择中,与实现运行时多态性无关的是()。

A. 重载函数 B. 虚函数 C. 指针 13. 有如下的程序

#include using namespace std; class B{ public: virtual void show(){ cout<<\ };

class D:public B{ public: void show(){ cout<<\};

void fun1(B *ptr){ ptr->show(); } void fun2(B &ref){ ref.show(); } void fun3(B b){ b.show(); } int main()

{ B b,*p=new D;

2

D. 引用 D d; fun1(p); fun2(b); fun3(d); return 0; }

程序的运行结果是()。

A. DBD B. BBD C. DBB D. DBD

二、填空题(共24分,每空2分)

1.C++支持两种多态性,即______________和_____________。

2.在C++语言中,多态可以分为4种:包含多态、__________、__________和_________。 3. 声明一个参数为整型、无返回值、名为fun1的虚函数:_______________________。 4. 带有__________的类是抽象类,一个抽象类自身无法_________。 5.根据给定的程序执行结果,将下列程序补充完整。

#include using namespace std; class Base {public:

程序的执行结果如下: Base(int i) {b=i;}

Derive1's Print() called. (1)

Derive2's Print() called. protected:

int b; };

class Derive1:public Base {public:

Derive1(int i):Base(i){}

void Print(){cout<<\};

class Derive2:public Base { public:

Derive1(int i):Base(i){}

void Print(){cout<<\};

void fun( (2) ){ obj->Print();} int main() { Base *d1=new Derive1(1);

Base * d2=new Derive2 d2(2); fun(d1); fun(d2);

return 0; }

6. 请将下面的程序补充完整,使得程序运行的输出结果为:飘是张娜的书 #include

3

using namespace std; class Book{ public:

Book(char *str) {strcpy(title,str);} ___________________________ protected:

char title[50]; };

class MyBook:public Book{ public:

MyBook(char *s1,char *s2=\张娜\virtual void PrintInfo() {cout<

char owner[10]; };

int main(){

Book *prt=new MyBook(\飘\ prt->PrintInfo(); return 0; }

三、看程序写结果(共20分,每题4分)

1.#include using namespace std; class A {public:

A(){ cout<<\ }

virtual ~A(){ cout<<\ } };

class B:public A {public: B(int i)

{ cout<<\buf=new char[i]; }

virtual ~B() { delete []buf;

cout<<\ }

private:

char *buf; };

void fun(A *a)

{ cout<<\

4

delete a; }

int main()

{ A *p=new B(15); fun(p); return 0; }

2.#include

using namespace std; class A {

public:

A() { cout<<\

virtual ~A() { cout<<\ virtual void f() { cout<<\void g() { f(); } };

class B : public A{ public:

B() { f(); cout<<\~B() { cout<<\};

class C : public B{ public:

C() { cout<<\~C() { cout<<\void f() { cout<<\};

int main() {A *a=new C; a->g(); delete a; return 0; }

3.#include using namespace std;

class Test {public: Test (double m,doublen,double d):p(d) { x=m; y=n; }

void Show();

void Show() const; private:

5


第5章 多态性和虚函数.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017冀教版小学科学五年级上册期末试题及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: