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

C++面试5题--5day

C++纯虚函数是什么?

纯虚函数是在基类中只声明、不定义的虚函数,它通过在声明末尾加上等于零来实现。它的主要作用是为派生类定义一个必须遵守的接口规范,任何继承这个基类的子类都必须自己实现这个函数。包含纯虚函数的类就成了抽象类,它不能被直接实例化创建对象,只能作为基类来使用,这强制保证了多态在使用时,调用的总是一个有具体实现的版本。

C++构造函数能不能是虚函数?

构造函数不能是虚函数。因为虚函数的调用依赖于一个叫做虚函数指针(vptr)的东西,而这个指针是在对象构造期间才会被初始化的。如果构造函数本身就是虚的,那么调用它就需要一个已经存在的虚函数机制,而这个机制有依赖于构造函数的完成。这就产生了一个逻辑矛盾。简单来说,在对象还没完全构造好之前,它的多态机制是无法工作的,所以构造函数不能是虚函数。

C++基类析构函数能不能是虚函数?

基类的析构函数可以是虚函数,而且在很多情况下是必须的。当您通过一个基类指针去删除一个派生类对象时,如果析构函数不是虚的,系统只会调用基类的析构函数,派生类的析构函数就不会被执行,这回导致派生类中分配的资源无法释放,造成内存泄漏。而如果将基类的析构函数声明为虚函数,那么在删除时,系统会通过多态机制正确地先调用派生类的析构函数,然后再调用基类的,从而保证整个对象被安全、完整的销毁。

C++模板函数能不能是虚函数?

模板函数不能是虚函数。这是因为虚函数是通过一个在编译期就确定下来的虚函数表(vtable)来实现的,表里存放的是固定函数的地址。而模板是在被具体类型实例化时才会生成最终的函数代码。编译器在编译阶段无法预知模板将会被哪些类型实例化,因此也无法在虚函数表中为这些未知的、可能无限多的函数版本预留位置。这两者的机制在时间点上是冲突的,所以C++禁止模板函数成为虚函数。

C++ 一个空类的大小?

一个空类的大小通常是一个字节。这听起来有点奇怪,但它不是零,因为C++标准规定,任何不同的对象都必须有唯一的内存地址。如果空类的大小是零,那么创建了多个空类对象时,它们的地址就会相同,程序就无法区分它们了。所以编译器会给空类对象分配一个字节的“占位符”,以确保其在内存中的唯一性。不过,如果这个类里包含了虚函数,那它的大小就不再是一字节了,而是一个指针的大小,因为需要存放指向虚函数表的虚指针。

http://www.dtcms.com/a/303585.html

相关文章:

  • C++中的“对象切片“:一场被截断的继承之痛
  • 【SpringMVC】MVC中Controller的配置 、RestFul的使用、页面重定向和转发
  • rhel9.1配置本地源并设置开机自动挂载(适用于物理光驱的场景)
  • c++ 基础
  • windows内核研究(异常-CPU异常记录)
  • 嵌入式分享合集186
  • STM32时钟源
  • JavaScript手录09-内置对象【String对象】
  • 第一章:Go语言基础入门之函数
  • wrk 压力测试工具使用教程
  • 屏幕晃动机cad【4张】三维图+设计说明书
  • 多信号实采数据加噪版本
  • 详解 Electron 应用增量升级
  • 轻量级远程开发利器:Code Server与cpolar协同实现安全云端编码
  • 2. 编程语言-JAVA-Spring Security
  • 记录自己第n次面试(n>3)
  • JavaScript手录08-对象
  • 深入解析IPMI FRU规范:分区结构与字段标识详解
  • 10_opencv_分离颜色通道、多通道图像混合
  • Nuxt3 全栈作品【通用信息管理系统】修改密码
  • OpenLayers 综合案例-热力图
  • 在虚拟机ubuntu上修改framebuffer桌面不能显示图像
  • C++进阶—C++11
  • 5G 便携式多卡图传终端:移动作业的 “实时感知纽带”
  • 【unitrix】 6.19 Ord特质(ord.rs)
  • 【灰度实验】——图像预处理(OpenCV)
  • 2025年7月28日训练日志
  • 【三桥君】如何解决后端Agent和前端UI之间的交互问题?——解析AG-UI协议的神奇作用
  • 排水管网实时监测筑牢城市安全防线
  • 线程间-数据缓存机制(线程邮箱)