实验五运行时多态性一、基本练习填...

更新时间:2023-05-14 19:18:17 阅读: 评论:0

实验五:运行时多态性
一、基本练习
填空
1.在一个派生类中重新定义基类的虚函数是______  __的另一种特殊形式,在派生类中重新定义此虚函数时,要求________  、、、和都必须与基类中原型完全相同。
2.动态多态性是在程序运行时通过改变具有虚函数定义的基类使其指向不同派生类从而调用不同版本的动态地实现对同一的不同响应。
3.阅读以下程序后填空
#include <iostream.h>
class ba
{
public:
virtual void who() { cout<<"ba class"<<endl; }
};
class derived1:public ba
{
public:
void who() { cout<<"derived1 class"<<endl; }
};
class derived2:public ba
{
public:
void who() { cout<<"derived2 class"<<endl; }
};
void main()
{
ba obj1, *p;
derived1 obj2;
derived2 obj3;
p=&obj1; p->who();
p=&obj2; p->who();
p=&obj3; p->who();
}
其运行结果:
4.阅读以下程序后填空
#include <iostream.h>
class ba
{
public:
virtual void f1() { cout<<"f1 function of ba"<<endl; }
virtual void f2() { cout<<"f2 function of ba"<<endl; }
virtual void f3() { cout<<"f3 function of ba"<<endl; }
void f4() { cout<<"f4 function of ba"<<endl; }
};
class derive:public ba
{
public:
void f1() { cout<<"f1 function of derive"<<endl; }
void f2() { cout<<"f2 function of derive"<<endl; }
void f4() { cout<<"f4 function of derive"<<endl; }
};
void main()
{
ba obj1, *p;
derive obj2;
p=&obj1;
p->f1(); p->f2(); p->f3();
p=&obj2;
p->f1(); p->f2(); p->f4();
}
其运行结果:
5.阅读以下程序后填空
#include <iostream.h>
class ba1
{
public:
virtual void f1() { cout<<"f1 function of ba1"<<endl; }
void f2() { cout<<"f2 function of ba1"<<endl; }
void f3() { cout<<"f3 function of ba1"<<endl; } };
class ba2
{
public:
void f1() { cout<<"f1 function of ba2"<<endl; }
virtual void f2() { cout<<"f2 function of ba2"<<endl; }
void f3() { cout<<"f3 function of ba2"<<endl; } };
class derive:public ba1,public ba2
{
public:
void f1() { cout<<"f1 function of derive"<<endl; }
void f2() { cout<<"f2 function of derive"<<endl; }
void f3() { cout<<"f3 function of derive"<<endl; } };
void main()
{
ba1 obj1, *p1;
ba2 *p2;
derive obj2;
p1=&obj1;
p1->f1(); p1->f2(); p1->f3();
p1=&obj2;
p1->f1(); p1->f2(); p1->f3();
p2=&obj2;
p2->f1(); p2->f2(); p2->f3();
}
其运行结果:
f1 function of ba1
6.阅读以下程序后填空
#include <iostream.h>
class ba
{
public:
virtual void f1()=0;
virtual void f2()=0;
virtual void f3()=0;
void f4() { cout<<"f4 function of ba"<<endl; } };
class derive:public ba
{
public:
void f1() { cout<<"f1 function of derive"<<endl; }
void f2() { cout<<"f2 function of derive"<<endl; }
草莓能放多久void f3() { cout<<"f3 function of derive"<<endl; }
void f4() { cout<<"f4 function of derive"<<endl; } };
void main()
{
ba *p;
derive obj;
p=&obj;
p->f1(); p->f2(); p->f3(); p->f4();
}
其运行结果:
7.阅读以下程序后填空
#include <iostream.h>
#include <string.h>
class ba
{
public:
virtual void show()=0;
virtual ~ba() { cout<<"ba::~ba()"<<endl; } };
class derive:public ba
{
char *buf;
public:
derive(char *s)
{ buf=new char[strlen(s)+1]; strcpy(buf,s); }
void show() { cout<<buf<<endl; }
virtual ~derive()
{ delete []buf; cout<<"derive::~derive()"<<endl; } };
void fun(ba* a) { delete a; }
void main()
{
ba *p=new derive("this is a derive object");
p->show();
fun(p);
}
其运行结果:
8. 阅读以下程序后填空
#include <iostream.h>
class A
{
public:
virtual ~A() { cout<<"调用A::~A()"<<endl; }
};
class B:public A
{
char *buf;
public:
抵制校园欺凌
110讨薪技巧B(int i) { buf=new char[i]; }
virtual ~B()
{
delete [ ]buf;
cout<<"调用B::~B()"<<endl;
}
};
void fun(A *a) { delete a; }
void main()
{
A *a=new B(10);
fun(a);
}
程序的执行结果:
选择
1. 虚函数是用来,调用不同版本虚函数用以实现动态多态性。
A.避免在多继承的多条派生路径中存在共同基类而产生的多个基类副本
B.表现基类和公有派生类的成员函数之间的一种关系的
C.表现基类和派生类的成员函数之间的一种关系的
D.只能通过基类指针指向不同的派生类对象实现
E.只能通过基类指针指向不同的公有派生类对象实现
F.可以通过基类指针指向不同公有的派生类对象或派生类对象本身实现
2. 下列关于动态联编的描述中,是错误的。
A.动态联编是以虚函数为基础的
B.动态联编是在运行时确定所调用的函数代码的
C.动态联编调用函数操作是指向对象的指针或对象引用
D.动态联编是在编译时确定操作函数的
3. 下列关于虚函数的描述中,是正确的。
A.虚函数是一个static类型的成员函数
B.虚函数是一个非成员函数
C.基类中说明了虚函数后,派生类中与其对应的函数可不必说明为虚函数
D.派生类的虚函数与基类的虚函数具有不同的参数个数和类型
4. 下列关于纯虚函数和抽象类的描述中,是错误的。
A.纯虚函数是一种特殊的虚函数,它没有具体的实现
B.抽象类是指具有纯虚函数的类
C.一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
5. 下列描述中,是抽象类的特性。
A.可以说明虚函数
B. 可以进行构造函数重载
C. 可以定义友元函数
D. 不能说明其对象
6.      是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本。
A. 虚析构函数
B. 虚构造函数
C. 纯虚函数
D. 静态成员函数
7. 如果一个类至少有一个纯虚函数,那么就称该类为。
A. 抽象类
B. 虚基类
C. 派生类
赤道仪D. 以上都不对
8.以下保留字()不能出现在说明虚函数原型的语句中。
怎么给c盘瘦身A.static    B. operator    C. void    D. const .
9.以下关于虚函数和纯虚函数的说法中,()是不正确的
A.在派生类中虚函数可以不用关键字virtual说明。
云南警官学院分数线B. 虚函数在派生类中可以不重定义。
大鱿鱼C. 不能为虚函数定义缺省操作。
D. 纯虚函数在派生类中可以不重定义。
10.以下关于动态绑定的说法中,正确的是()
A.虚基类是动态绑定的。
B. 指针是动态绑定的。
C. 所有的虚函数和纯虚函数都是动态绑定的。
D. 动态绑定与编译系统无关。
11.以下关于抽象类的说法中,()是不正确的
A.不可创建抽象类的实例。
B. 可以声明抽象类的引用。
C. 抽象类的派生类也是抽象类。
D. 抽象类的派生类也可以是抽象类。
12.以下关于抽象类的说法中,只有()是正确的
张恩泽A.定义抽象类的目的是软件重用。
B. 定义抽象类是为了提高访问效率。
C. 定义抽象类是使指针的使用更灵活。
D. 抽象类提供了对类进行分类的机制。
13.以下关于多态性的说法中,()是不正确的

本文发布于:2023-05-14 19:18:17,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/631108.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   派生类   基类   抽象类   动态   定义   对象   指向
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图