虚函数是用virtual 关键字说明的成员函数。
T
F
1-2
分数 2
作者 何振峰
单位 福州大学
因为静态成员函数不能是虚函数,所以它们不能实现多态。
T
F
1-3
分数 2
作者 黄万丽
单位 曲阜师范大学
静态成员函数不能是虚函数,所以不能实现动态多态,即运行时多态。
T
F
1-4
分数 2
作者 董俊
单位 燕山大学
派生类中对继承自基类的虚函数会进行重载已实现多态。
T
F
1-5
分数 2
作者 黄淑伟
单位 沈阳师范大学
通过基类指针调用基类和派生类中的同名虚函数时,若该指针指向一个基类的对象,那么被调用的是基类的虚函数。
T
F
1-6
分数 2
作者 黄淑伟
单位 沈阳师范大学
通过基类指针调用基类和派生类中的同名虚函数时,若该指针指向一个派生类的对象,那么被调用的是基类的虚函数。
T
F
1-7
分数 3
作者 黄淑伟
单位 沈阳师范大学
通过基类引用调用基类和派生类中的同名虚函数时,若该引用引用的是一个基类的对象,那么被调用的是基类的虚函数。
T
F
1-8
分数 3
作者 黄淑伟
单位 沈阳师范大学
通过基类引用调用基类和派生类中的同名虚函数时,若该引用引用的是一个派生类的对象,那么被调用的是派生类的虚函数。
T
F
1-9
分数 2
作者 黄淑伟
单位 沈阳师范大学
在面向对象的程序设计中使用多态,能够增强程序的可扩充性 ,即程序需要修改或增加功能的时候,需要改动和增加代码较少。
T
F
1-10
分数 3
作者 黄淑伟
单位 沈阳师范大学
在构造函数和析构函数中调用虚函数,不是多态。编译时即可确定,调用的函数是自己的类或基类中定义的函数 ,不会等到运行时才决定调用自己的还是派生类的函数。
T
F
1-11
分数 3
作者 黄淑伟
单位 沈阳师范大学
构造函数也可以定义为虚函数。
T
F
1-12
分数 3
作者 黄淑伟
单位 沈阳师范大学
类的构造函数可以定义为虚函数。
T
F
1-13
分数 3
作者 何振峰
单位 福州大学
抽象类是指一些没有说明对象的类。
T
F
1-14
分数 3
作者 黄淑伟
单位 沈阳师范大学
包含纯虚函数的类叫抽象类。
T
F
关于动态绑定的下列描述中,( )是错误的。
A.
动态绑定是以虚函数为基础的
B.
动态绑定在运行时确定所调用的函数代码
C.
动态绑定调用函数操作是通过指向对象的指针或对象引用来实现的
D.
动态绑定是在编译时确定操作函数的
2-2
分数 3
作者 何振峰
单位 福州大学
关于虚函数的描述中,( )是正确的。
A.
虚函数是一个static 类型的成员函数
B.
虚函数是一个非成员函数
C.
基类中说明了虚函数后,派生类中与其对应的函数可不必说明为虚函数
D.
派生类的虚函数与基类的虚函数具有不同的参数个数和类型
2-3
分数 3
作者 王秀
单位 福州大学
以下说法中正确的是()
A.
在虚函数中不能使用this指针
B.
在构造函数中调用虚函数不是动态联编
C.
抽象类的成员函数都是纯虚函数
D.
构造函数和析构函数都不能是虚函数
2-4
分数 3
作者 孔德桢
单位 浙大城市学院
设有如下代码段:
class A {
public:
void func1() {
cout << "A1" << endl;
}
virtual void func2() {
cout << "A2" << endl;
}
};
class B : public A {
public:
void func1() {
cout << "B1" << endl;
}
void func2() {
cout << "B2" << endl;
}
};
int main() {
A *a = new B;
a->func1();
a->func2();
}
则输出结果为:
A.
A1 A2
B.
A1 B2
C.
B1 A2
D.
B1 B2
2-5
分数 3
作者 李廷元
单位 中国民用航空飞行学院
下面关于基类与派生类的叙述中,不正确的是____。
A.
派生类一般都用公有派生
B.
对基类成员的访问必须是无二义性的
C.
赋值兼容规则也适用于多重继承的组合
D.
基类的公有成员在派生类中仍然是公有的
2-6
分数 3
作者 李廷元
单位 中国民用航空飞行学院
虚函数必须是类的____
A.
成员函数
B.
友元函数
C.
构造函数
D.
析构函数
2-7
分数 3
作者 李廷元
单位 中国民用航空飞行学院
下列关于虚函数的描述中,正确的是____。
A.
虚函数是一个静态成员函数
B.
虚函数是一个非成员函数
C.
虚函数既可以在函数说明时定义,也可以在函数实现时定义
D.
派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型
2-8
分数 3
作者 吕华
单位 河北工业大学
关于虚函数,正确的描述是()。
A.
构造函数不能是虚函数
B.
析构函数不能是虚函数
C.
虚函数可以是友元函数
D.
虚函数可以是静态成员函数
2-9
分数 3
作者 吕华
单位 河北工业大学
派生类中虚函数原型的()。
A.
函数类型可以与基类中虚函数的原型不同
B.
参数个数可以与基类中虚函数的原型不同
C.
参数类型可以与基类中虚函数的原型不同
D.
以上都不对
2-10
分数 3
作者 吕华
单位 河北工业大学
如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是()。
A.
virtual show()=0;
B.
virtual void show();
C.
virtual void show()=0;
D.
void show()=0 virtual;
2-11
分数 3
作者 黄淑伟
单位 沈阳师范大学
以下说法正确的是?
A.
在虚函数中不能使用this指针
B.
在构造函数中调用虚函数,不是动态联编
C.
抽象类的成员函数都是纯虚函数
D.
构造函数和析构函数都不能是虚函数
2-12
分数 3
作者 黄淑伟
单位 沈阳师范大学
不列哪一项不是动态联编实现的条件?
A.
要有说明的虚函数
B.
调用虚函数操作的是指向对象的指针
C.
调用虚函数操作的是对象引用
D.
由对象调用虚函数
2-13
分数 3
作者 黄淑伟
单位 沈阳师范大学
下列哪一项说法是不正确的?
A.
抽象类只能做为其他类的基类
B.
抽象类不能用做参数类型,函数返回类型或显式转换的类型
C.
可以定义指向抽象类的指针和引用,但不能定义抽象类对象
D.
使用抽象类指针和引用,不能指向派生类对象
2-14
分数 3
作者 刘骥
单位 重庆大学
虚基类是为了解决下列哪个问题?()
A.
继承父类实现代码复用
B.
继承父类实现多态
C.
解决多条继承路径公共基类冲突
D.
自动实现深拷贝
2-15
分数 3
作者 李祥
单位 湖北经济学院
关于赋值兼容规则
赋值兼容规则是指在需要基类对象的任何地方, 都可以使用 ▁▁▁▁▁ 派生类的对象来替代。
A.
私有
B.
保护
C.
公有
D.
任何
2-16
分数 3
作者 董俊
单位 燕山大学
下列有关类型兼容规则的描述中,错误的是:
A.
派生类的对象可以隐含转换为基类对象
B.
派生类的对象可以初始化基类的引用
C.
派生类的指针可以隐含转换为基类的指针
D.
派生类的对象可以被基类的对象初始化
6-1 抽象类Shape
分数 17
全屏浏览
作者 傅尔胜
单位 郑州航空工业管理学院
请编写一个抽象类Shape,包括两个纯虚函数,分别为计算面积getArea()和计算周长getPerim()。通过Shape类派生出矩形类Rectangle和圆类Circle,并计算各自的面积和周长。
测试用例具体要求:输入1表示测试矩形类,之后输入矩形长和宽。输入2表示测试圆类,之后输入圆半径。
Shape类定义如下
class Shape {
public:
virtual double getArea()=0;
virtual double getPerim()=0;
};
裁判测试程序样例:
#include <iostream>
using namespace std;
const double PI=3.14;
class Shape {
public:
virtual double getArea()=0;
virtual double getPerim()=0;
};
/* ------请在这里填写答案 ------*/
int main() {
Shape *p;
int n;
double w,h,r;
scanf("%d",&n);
switch(n) {
case 1: {
cin>>w>>h;
Rectangle rect(w,h);
cout<<"area="<<rect.getArea()<<endl;
cout<<"perim="<<rect.getPerim()<<endl;
break;
}
case 2: {
cin>>r;
Circle c(r);
cout<<"area="<<c.getArea()<<endl;
cout<<"perim="<<c.getPerim()<<endl;
break;
}
}
return 0;
}
输入样例1:
在这里给出一组输入。例如:
1
4 5
输出样例1:
在这里给出相应的输出。例如:
area=20
perim=18
输入样例2:
在这里给出一组输入。例如:
2
5
输出样例2:
在这里给出相应的输出。例如:
area=78.5
perim=31.4