当前位置: 首页 > article >正文

C++-多态常见试题的总结

  关于C++多态的介绍:C++-多态-CSDN博客

1.

         A.只有类的成员方法才可以被virtual修饰,其他的函数并不可以

        

        B.正确

        C.virtual关键字只在声明时加上,在类外实现时不能加

        D.static和virtual是不能同时使用的

2.

        A.多态分为编译时多态和运行时多态,也叫早期绑定和晚期绑定

        B.编译时多态是早期绑定,主要通过重载实现

        C.模板属于编译时多态,故错误

        D.运行时多态是动态绑定,也叫晚期绑定

3.

        A.正确,重写又叫覆盖,重定义又叫隐藏

        B.重载的条件第一个就是在同一个作用域中

        C.重载的要求是在同一个作用域中两个同名函数的参数个数不同,参数类型不同,参数顺序不同。 

           重写是在继承的体系中,虚函数 + 三同

           重定义是在继承的体系中,在派生类中出现同基类同名的成员方法,就会对基类中同名的进行隐藏也就是重定义。

        D.重写又称覆盖,和重定义不同,在继承的体系中,基类和派生类中的同名函数不是重写就是重定义。

        E.同D。

        F.重写需要虚函数所以确实比重定义的条件更加严格。

        G.6.

4.

        A.使用父类对象调用的方法永远是父类的方法

        B.正确

        C.重载不涉及子类

         D.

5.

 

        A.友元函数不属于成员函数,不能成为虚函数

        B.静态成员函数就不能设置为虚函数

        C.静态成员函数与具体对象无关,属于整个类,核心关键是没有隐藏的this指针,可以通过类名::成员函数名 直接调用,此时没有this无法拿到虚表,就无法实现多态,因此不能设置为虚函数

        D.尤其是父类的析构函数强力建议设置为虚函数,这样动态释放父类指针所指的子类对象时,能够达到析构的多态

6.

        A.必须是父类的函数设置为虚函数

        B.必须通过父类的指针或者引用才可以,子类的不行

        C.不是在编译期,而应该在运行期间,编译期间,编译器主要检测代码是否违反语法规则,此时无法知道基类的指针或者引用到底引用那个类的对象,也就无法知道调用那个类的虚函数。在程序运行时,才知道具体指向那个类的对象,然后通过虚表调用对应的虚函数,从而实现多态。

        D.正确,实现多态是要付出代价的,如虚表,虚表指针等,所以不实现多态就不要有虚函数了

7.

 

        A.错误,构成重写是子类重写父类的virtual函数,

        B.f3构成重写,重写时子类可以不要求加virtual关键字

        C. 选择题一定要扣字眼,题目前半句说的是基类引用 引用了子类对象,但是后半句调用虚函数时,说的是基类的对象调用f2,通过对象调用时编译期间就直接确定调用那个函数了,不会通过虚表以多态方式调用

        D.正确

8.

        A.多继承的时候,就会可能有多张虚表

        B.父类对象的虚表与子类对象的虚表没有任何关系,这是两个不同的对象

        C.虚表是在编译期间生成的

        D.一个类的不同对象共享该类的虚表,可以自行写代码验证之

9.

         虽然子类重写了父类的虚函数,但只要是用对象去调用,则只能调用相对类型的方法,故B正确

10.

        分析:new B时先调用父类A的构造函数,执行test()函数,在调用func()函数,由于此时还处于对象构造阶段,多态机制还没有生效,所以,此时执行的func函数为父类的func函数,打印0,构造完父类后执行子类构造函数,又调用test函数,然后又执行func(),由于父类已经构造完毕,虚表已经生成,func满足多态的条件,所以调用子类的func函数,对成员m_iVal加1,进行打印,所以打印1, 最终通过父类指针p->test(),也是执行子类的func,所以会增加m_iVal的值,最终打印2, 所以答案为C 0 1 2

11.

        A.父类对象和子类对象的前4字节都是虚表地址

        B.A类对象和B类对象前4个字节存储的都是虚表的地址,只是各自指向各自的虚表

        C.不相同,各自有各自的虚表

        D.A类和B类不是同一类内容不同

 12.

        A.D类有几个父类,如果父类有虚函数,则就会有几张虚表,自身子类不会产生多余的虚表,所以只有2张虚表

        B.正确

        C.子类自己的虚函数只会放到第一个父类的虚表后面,其他父类的虚表不需要存储,因为存储了也不能调用

        D.错误

13.

 

        A.正确

        B.虽然子类函数为私有,但是多态仅仅是用子类函数的地址覆盖虚表,最终调用的位置不变,只是执行函数发生变化

        C.不强制也可以直接赋值,因为赋值兼容规则作出了保证

        D.编译正确

 


http://www.kler.cn/a/149697.html

相关文章:

  • EasyExcel 使用多线程按顺序导出数据
  • WordPress 2024主题实例镜像
  • 探索 JNI - Rust 与 Java 互调实战
  • MicroPythonBLEHID使用说明——蓝牙鼠标
  • F5全新报告揭示AI时代API安全面临严峻挑战
  • 009_SSH_Mysql图书管理系统(学生注册 借书 还书 绵阳)——lwplus87(免费送)
  • 物联网边缘计算是什么?如何实现物联网边缘计算?
  • NX二次开发UF_CURVE_create_combine_curves 函数介绍
  • 工业智能网关如何保障数据通信安全
  • 【华为数通HCIP | 网络工程师】821刷题日记-BFD和VRRP 及重点(1)
  • shopee买家通系统批量注册虾皮买家号的软件
  • Linux基本指令总结(二)
  • 【设计模式】行为型模式-第 3 章第 5 讲【观察者模式】
  • CSS特效020:涌动的弹簧效果
  • thinkphp6生成PDF自动换行
  • Iar 8051等各种版本安装破解过程
  • 基于UI交互意图理解的异常检测方法
  • 基于FPGA的五子棋游戏设计
  • 在线 SQL 模拟器SQL Fiddle使用简介
  • Python3基础
  • 爬虫-基于python的旅游景点推荐系统的设计与实现-计算机毕业设计源码24044
  • Linux加强篇002-部署Linux系统
  • SimpleDateFormat在多线程下的安全问题
  • 392. 判断子序列
  • 【JavaScript】3.3 JavaScript工具和库
  • 【开题报告】基于深度学习的驾驶员危险行为检测系统