1-1
因为静态成员函数不能是虚函数,所以它们不能实现多态。 (5分)
正确答案:正确
解析:
静态成员函数不能是虚函数。静态成员函数对于每一个类只有一份代码,所有的对象共享这份代码,它不归某个对象所有,所以没有动态绑定的必要性,不能被继承,只属于该类。
1-2
构造函数可以声明为虚函数。 (1分)
正确答案:错误
构造函数不能为虚函数。构造函数一般是用来初始化对象的,因而只有在一个对象生成之后才能发挥多态作用。虚函数表在构造函数调用之后才建立,因而构造函数不可能声明为虚函数。虚函数的调用需要虚函数表指针,而该指针存放在对象的内存空间中;若构造函数声明为虚函数,那么由于对象还未创建,还没有内存空间,更没有虚函数表地址来调用虚函数。
1-3
在析构函数中调用虚函数时,采用动态束定。 (1分)
正确答案:错误
解析:
当存在类继承并且析构函数中有必须要进行的操作时(如需要释放某些资源,或执行特定的函数)析构函数需要是虚函数,否则若使用父类指针指向子类对象,在delete时只会调用父类的析构函数,而不能调用子类的析构函数,从而造成内存泄露或达不到预期结果。
1-4
在一个成员函数内调用一个虚函数时,对该虚函数的调用进行动态束定。 (1分)
正确答案:正确
1-5
构造函数可以声明为纯虚函数。 (1分)
正确答案:错误解析:
对于抽象类来说,C++是不允许它去实例化对象的。也就是说,抽象类无法实例化对象,所以它不需要,也不允许有构造函数。
1-6
虚函数不能是类的静态成员。 (1分)
正确答案:正确
解析:
静态成员函数不能是虚函数。
1-7
重定义虚函数的派生类必须是公有继承的。 (1分)
正确答案:正确
多态的实现必须以public方式继承。
1-8
对于从基类继承的虚函数,派生类也可以不进行重定义。 (1分)
正确答案:正确
1-9
纯虚函数与函数体为空的虚函数等价。 (1分)
正确答案:错误
1-10
多态类提供了一种动态多分支派送机制。 (1分)
正确答案:正确
2-1
关于动态绑定的下列描述中,( )是错误的。 (2分)
- 动态绑定是以虚函数为基础的
- 动态绑定在运行时确定所调用的函数代码
- 动态绑定调用函数操作是通过指向对象的指针或对象引用来实现的
- 动态绑定是在编译时确定操作函数的
正确答案:D
解析:
动态绑定在运行时确定所调用的函数代码,重载函数是在编译时确定操作函数的。
2-2
关于虚函数的描述中,( )是正确的。 (2分)
- 虚函数是一个static 类型的成员函数
- 虚函数是一个非成员函数
- 基类中说明了虚函数后,派生类中与其对应的函数可不必说明为虚函数
- 派生类的虚函数与基类的虚函数具有不同的参数个数和类型
正确答案:C
解析:
A.静态成员函数不能是虚函数。
B.虚函数是成员函数
D.派生类的虚函数与基类的虚函数具有相同的参数个数和类型
2-3
关于纯虚函数和抽象类的描述中,( )是错误的。 (2分)
- 纯虚函数是一种特殊的虚函数,它没有具体的实现
- 抽象类是指具有纯虚函数的类
- 一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
- 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
正确答案:C
解析:
一个基类中说明有纯虚函数,该基类的派生类可以也是抽象类。
2-4
下列描述中,( )是抽象类的特性。 (2分)
- 可以说明虚函数
- 可以进行构造函数重载
- 可以定义友元函数
- 不能定义该类对象
正确答案:D
2-5
在C++语言中设置虚基类的目的是( ) 。 (2分)
- 简化程序代码
- 提高程序的运行效率
- 解决多继承造成的二义性问题
- 缩短程序的目标代码
正确答案:C
2-6
以下关于C++语言中继承的叙述中,错误的是( )。 (2分)
- 继承是父类和子类之间共享数据和方法的机制
- 继承定义了一种类与类之间的关系
- 继承关系中的子类将拥有父类的全部属性和方法
- 继承仅仅允许单继承,即不允许一个子类有多个父类
正确答案:D
继承允许单继承和多继承。
2-7
虚析构函数的作用是。 (2分)
- 虚基类必须定义虚析构函数
- 类对象作用域结束时释放资源
- delete动态对象时释放资源
- 无意义
正确答案:C
2-8
以下说法中正确的是() (2分)
- 在虚函数中不能使用this指针
- 在构造函数中调用虚函数不是动态联编
- 抽象类的成员函数都是纯虚函数
- 构造函数和析构函数都不能是虚函数
正确答案:B
解析:
A.在虚函数中可以使用this指针
C.有纯虚函数的类是抽象类。
D.析构函数可以是虚函数。
PTA 多态性实验(判断,选择题解析)
最新推荐文章于 2023-08-10 19:42:27 发布