C++基础面经
创始人
2025-05-31 16:34:16
0

C++基础面经

  • 面向对象相关
    • 1. 面向对象是什么?
    • 2. 面向对象的三大特征是什么?
    • 3. 重载和重写的区别是什么?
    • 4. 重载和重写是怎么实现的?
    • 5. 构造函数的种类有哪些?
    • 6. 定义一个空类时,默认生成哪些函数?
    • 7. 类对象初始化的顺序是什么?
    • 8. 向下转型和向上转型是什么?
    • 9. 深拷贝和浅拷贝是什么?
    • 10. 模板类是在什么时候实现的?
    • 11. 类继承时,不同关键字的访问权限?
    • 12. 类内可以定义引用数据成员嘛?
    • 13. 构造函数为什么不能声明为虚函数?

面向对象相关

1. 面向对象是什么?

  • 面向对象是一种编程思想,把一切东西看作一个个对象,每个对象有他们各自的属性。
  • 把这些对象拥有的属性和操作这些属性的函数打包成一个类来表示。.

2. 面向对象的三大特征是什么?

  • 面向对象的三大特征是继承,封装,多态。
  • 继承,可以使用现有的类的所有功能,在无需重新编写原来代码的基础上进行扩展。
  • 封装,将属性和操作属性的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
  • 多态,用父类型别的指针指向子类的实例,通过父类的指针调用子类的成员函数。

3. 重载和重写的区别是什么?

  • 重写,是指派生类中存在重新定义的函数。函数名,参数列表,返回值类型都和基类中的函数一样。基类中的被重写函数需要有 virtual 修饰。
  • 重载,是指声明多个多个具有不同参数列表的同名函数,根据参数列表决定调用哪个函数。

4. 重载和重写是怎么实现的?

  • 对于重载,在预编译阶段,可以通过命名倾轧来修改函数名,以区分参数列表不同的同名函数。
  • 对于重写,通过在基类的函数前加上 virtual 关键字,运行时会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。

5. 构造函数的种类有哪些?

  • 默认构造函数和初始化构造函数,在定义类的对象的时候,完成对象的初始化工作。
  • 拷贝构造函数,将已存在对象的值,赋给当前的对象。
  • 移动构造函数,使用右值引用作为参数,将一个对象的资源更高效的转移到另一个对象上,避免不必要的资源拷贝。

6. 定义一个空类时,默认生成哪些函数?

  • 无参构造函数,定义类的时候完成初始化的操作。
  • 拷贝构造函数,将已存在对象的值,赋给当前的对象。
  • 赋值运算符。
  • 析构函数。

7. 类对象初始化的顺序是什么?

  • 父类构造函数–>成员类对象构造函数–>自身构造函数。

8. 向下转型和向上转型是什么?

  • 向下转型,父类转换为子类,可以采用强制转换,但是不安全。
  • 向上转型,子类转换为父类,使用 dynamic_cast(expression),这种转换比较安全。

9. 深拷贝和浅拷贝是什么?

  • 浅拷贝为值拷贝,将源对象的值拷贝到目标对象中去。本质上源对象和目标对象共用一份实体,只是所引用的变量名不同,地址还是相同的。
  • 深拷贝为开辟一片新的空间,将源对象中的值拷贝到目的对象中去,这两个指针指向了不同的内存位置。深拷贝通过拷贝构造函数和赋值运算符重载实现。

10. 模板类是在什么时候实现的?

  • 模板的实例化分为显示实例化和隐式实例化,前者是告诉模板应该使用什么样的类型去生成具体的函数,后者是编译器在编译的过程中去决定用什么类型实例化一个模板。
  • 模板的具体化,当函数模板使用某种类型实例化后的类或函数不满足要求时,可以考虑对模板进行具体化,具体化可以修改模板的定义,当遇到需要具体化的类型时,按照自己的需求处理。

11. 类继承时,不同关键字的访问权限?

  • 类中的成员可以分为三种类型,public,protected,public。
  • private继承,子类对象不可以访问父类的任何成员。
  • public继承,子类对象可以访问父类的 public,但不能访问基类中的private和protected成员。
  • protect继承,子类可以访问父类的 public,protected,但不能访问基类中的private成员。

12. 类内可以定义引用数据成员嘛?

  • 可以,但是需要遵循三个原则:
  • 不能使用默认构造函数进行初始化,必须提供构造函数来进行初始化。
  • 提供构造函数的形参必须也是引用类型。
  • 不能在构造函数体中初始化,必须在初始化列表中初始化。

13. 构造函数为什么不能声明为虚函数?

  • 虚函数主要用于在信息不全的情况下,可以使重载的函数得到对应的调用,构造函数本身就是要初始化实例,那么虚函数就没有意义。
  • 此外虚函数是在构造函数之后才建立的,所以构造函数不可能称为虚函数。

相关内容

热门资讯

A股玻尿酸巨头出手!2700字... 医美龙头巨子生物“成分争议”风波持续发酵。日前,美妆博主大嘴博士(香港大学化学博士郝宇)发文,质疑巨...
计算机组成原理实验1---运算...     本实验为哈尔滨工业大学计算机组成原理实验,实验内容均为个人完成,...
3 ROS1通讯编程提高(1) 3 ROS1通讯编程提高3.1 使用VS Code编译ROS13.1.1 VS Code的安装和配置...
前端-session、jwt 目录:   (1)session (2&#x...
前端学习第三阶段-第4章 jQ... 4-1 jQuery介绍及常用API导读 01-jQuery入门导读 02-JavaScri...
EL表达式JSTL标签库 EL表达式     EL:Expression Language 表达式语言     ...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
【内网安全】 隧道搭建穿透上线... 文章目录内网穿透-Ngrok-入门-上线1、服务端配置:2、客户端连接服务端ÿ...
【Spring Cloud A... 文章目录前言Metadata元数据ClassMetadataSpring中常见的一些元注解Nacos...
React篇-关于React的... 一.简介1.介绍用于构建用户界面的 JavaScript 库2.创建项目(1)手动创建Documen...
win7 Pro 英文版添加中... win7pro x64英文版添加中文语言包1、下载语言包,并解压成lp.cab,复制到...
Android开发-Andro... 01  Android UI 1.1  UI 用户界面(User Interface,...
基于springboot教师人... 基于springboot教师人事档案管理系统【源码+论文】 开发语言:Jav...
编写软件界面的方式 本文重点解决如下问题:编写软件的界面有哪几种方式?通常情形下࿰...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
GO语言小锤硬磕十三、数组与切... 数组用来保存一组相同类型的数据,go语言数组也分一维数组和多维数组。 直接上代码看一下...
三级数据库备考--数据库应用系... 1.数据库应用系统设计包括概念设计、逻辑设计、物理设计3个步骤,每个步骤的设计活动按照...
prometheus数据持久化... https://segmentfault.com/a/1190000015710814 promet...
孩子用什么样的灯对眼睛没有伤害... 现代社会高速发展,越来越多的人开始重视身体健康,尤其是很多家长ÿ...
微软Bing GPT支持AI绘... 我想要一张图片:大象、珊瑚、火山、云朵我想要一张图片:亚特兰蒂斯...