C++面试题总结

C++面试题总结

  • 一、C++基础
  • 二、类与继承、多态
  • 三、C++11新特性


一、C++基础

1. C和C++的区别
1. C面向过程,C++面向对象,所以C++具有封装、继承、多态三大特性;(多态的基础是封装和继承,即通过虚函数继承父类的方法,实现接口的重复调用)
2. C++可以用STL标准库,包含vector、map、set、文件输入输出等;
3. C++中存在命名空间的概念,支持运算符重载,支持异常处理(增加程序的可靠性和容错性)。

2. 数组和指针的区别
1.数组名本质上是指向数组首个元素的指针,指针就是指向对象的地址;
2.数组名一般不能修改,指针可以修改而指向其他对象;
3.数组名的大小一般是数组元素的个数x单个元素的大小,指针大小和系统有关,32位系统一般是4字节,64位系统一般是8字节。

3. 引用和指针的区别
1.是别名,没有内存分配;指针是地址,需要分配内存保存;
2.引用在创建的时候已经构建完成,指针可以先创建后赋值;
3.有多级指针(指向指针的指针),但是没有多级引用;
4.引用和指针的自增运算结果不同。

4. 内联函数inline和普通函数之间的区别
内联函数在编译时直接编译到主函数中,不存在函数调用的开销;普通函数在函数调用时需要进行函数栈的出栈和入栈操作。因此对于本身比较简单且调用次数很多的函数,可以采用内联函数的形式。

5. 常量指针const int* p和指针常量int* const p之间的区别
常量指针,const int* p 是指向常量的指针,不能改变常量的值,但是指向常量的指针(地址)可以修改;
指针常量,int * const p 地址不可以修改,但是值可以修改。

6. 如何避免野指针
1.使用前初始化;
2.使用后及时释放;
3.不重复释放指针;
4.不使用悬空指针(超出作用域或者已经删除的指针)。

7. 堆heap和栈stack的区别
1.内存分配方式不同,堆通常是程序员手动分配和释放的,常用于程序中需要动态分配的内容,如动态数组等;栈通常由程序自动创建和释放,通常用于存放临时变量;
2.内存管理方式不同,堆通常是由程序员分配和释放;栈遵循后进先出原则,由系统自动完成;
3.内存大小,堆相对比较大,栈相对比较小,通常只有几百KB到几MB的大小;
4.访问速度,堆需要考虑多线程并发时的同步与互斥问题,速度相对较慢,栈由系统自动分配与释放,访问相对较快;
5.应用场景,堆适用于动态数组等需要动态分配与管理的数据结构,栈适用于临时变量与函数的存储与管理。

8.关键词extern的作用
1.共享全局变量,如a.cpp中定义int golbal = 1,在b.cpp中通过extern int golbal调用;
2.相对于include头文件的方式,extern通常可以提升编译速度,因为不需要额外编译除当前extern的函数之外的无关函数。

9.减少内存泄漏的方法
1.malloc和free,new和delete要对应;
2.注意指针指向对象的大小,避免指针越界,如数组;
3.动态分配内存的指针最好不要二次赋值;
4.对指针赋值时注意被赋值指针需要不需要释放;
5.在C++中优先考虑使用智能指针。

10.malloc free和new delete之间的区别
1.malloc free是C语言的,malloc需要指定内存的大小;new delete是C++的,new不需要指定大小;
2.malloc只负责分配内存并返回内存的首地址,不会初始化;new在分配内存空间后同时完成初始化;
3.malloc返回的是void,需要进行强制类型转换,new返回目标对象的指针;
4.malloc失败时会返回NULL,需要手动释放,new失败时会抛出异常;
5.free是直接释放内存块,delete是调用析构函数进行内存释放。

11.RAII
RAII(Resource Acquisition Is Initialization,资源获取即初始化)机制是一种对资源申请、释放这种成对的操作的封装是么 通过这种方式实现在局部作用域内申请资源然后销毁资源

12.volatile的作用
volatile和const相反,表示不稳定的,每次使用改变量,需要从内存中重新读取,在多线程都要用到同一个变量,且该变量会被改变时,经常用到。

8.关键词extern的作用

二、类与继承、多态

1. 基类的析构函数为什么要定义为虚函数
如果基类的析构函数不是虚函数,那么通过基类的指针删除派生类的对象时,无法正确调用派生类的析构函数,无法正确析构对象,导致内存泄漏和其他未定义行为。
构造函数不能是虚函数,虚函数需要通过虚函数表进行查找,如果构造函数为虚函数,没有构造对象之前,没有虚函数表,相互矛盾。
纯虚函数,一般是基类中的函数没有实现,是空函数;
抽象类,有纯虚函数的类就是抽象类,不能被实例化。

2. 构造函数的调用顺序
基类的构造函数->初始化成员变量->派生类的构造函数。

3. overload(重载)、overwrite(重定义)、override(覆盖)之间的区别
1.overload重载,即函数名相同,参数类型或者参数数量不同。特例:a.只有返回值不同的两个函数不属于overload重载,如int f(int a)和float f(int a);b.const函数与原函数属于重载函数,如inf f(int a)和int f(int a) const。
2. override覆盖,虚函数继承,基类函数以关键词virtual修饰;
3. overwrite重定义,在函数继承中用到,重定义基类的函数。
overload、override、overwrite总结

拷贝构造函数
拷贝构造函数在哪几种情况下会被调用?
1.当类的一个对象去初始化该类的另一个对象时;
2.如果函数的形参是类的对象,调用函数进行形参和实参结合时;
3.如果函数的返回值是类对象,函数调用完成返回时。
什么时候必须重写拷贝构造函数?
答:当构造函数涉及到动态存储分配空间时,要自己写拷贝构造函数,并且要深拷贝。
深拷贝浅拷贝

三、C++11新特性

1. auto和decltype
如果基类的析构函

参考文献:
C++面试必备:常见C++面试题汇总及详细解析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/94811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

整理了197个经典SOTA模型,涵盖图像分类、目标检测、推荐系统等13个方向

今天来帮大家回顾一下计算机视觉、自然语言处理等热门研究领域的197个经典SOTA模型,涵盖了图像分类、图像生成、文本分类、强化学习、目标检测、推荐系统、语音识别等13个细分方向。建议大家收藏了慢慢看,下一篇顶会的idea这就来了~ 由于整理的SOTA模型…

JVM篇---第二篇

系列文章目录 文章目录 系列文章目录一、简述一下JVM的内存模型二、说说堆和栈的区别三、什么时候会触发FullGC一、简述一下JVM的内存模型 1.JVM内存模型简介 JVM定义了不同运行时数据区,他们是用来执行应用程序的。某些区域随着JVM启动及销毁,另外一 些区域的数据是线程性独…

23. 合并 K 个升序链表

给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(in…

用稳定扩散生成4K PBR纹理【SDXL】

我正在继续去年开始使用 Three.JS 构建 3D 场景和草图的工作。 当时,DALL-E 和 Stable Diffusion 等 AI 图像生成器刚刚真正起飞。 我成功地在本地运行稳定扩散,并使用它为我正在构建的 3D 世界中的地形、建筑物和其他环境生成纹理。 当时我使用的是稳…

Django、Nginx、uWSGI详解及配置示例

一、Django、Nginx、uWSGI的概念、联系与区别 Django、Nginx 和 uWSGI 都是用于构建和运行 Web 应用程序的软件,这三个软件的概念如下: Django:Django 是一个基于 Python 的开源 Web 框架,它提供了一套完整的工具和组件&#xf…

解决每次重启ganache虚拟环境,十个账号秘钥都会改变问题

很多时候 我们启动一个 ganache 环境 然后 通过私钥 在 MetaMask 中 导入用户 但是 当我们因为 电脑要关机呀 或者 ETH 消耗没了呀 那我们就不得不重启一个ganache虚拟环境 然后 你在切一下网络 让它刷新一下 你就会发现 上一次导入的用户就没有了 这是因为 你每次 ganache…

第2篇 机器学习基础 —(1)机器学习方式及分类、回归

前言:Hello大家好,我是小哥谈。机器学习是一种人工智能的分支,它使用算法和数学模型来使计算机系统能够从经验数据中学习和改进,而无需显式地编程。机器学习的目标是通过从数据中发现模式和规律,从而使计算机能够自动进…

React封装自定义表单校验方法

一、表单校验 为什么要封装自定义表单校验方法,因为在后台管理系统中,通常我们会涉及到用户的添加或则信息的修改,这时候通常就涉及表单的相关校验。但通常一个系统中的表单校验针对同一个字段来说是统一的。因此我们就需要将对应的校验字段的…

STM32复习笔记(五):FSMC连接外部SRAM

目录 Preface: (一)原理相关 (二)CUBEMX配置 (三)轮询方式读写 (四)DMA方式读写 Preface: STM32F4有一个FSMC(Flexible Static Memory Contr…

侯捷 C++ STL标准库和泛型编程 —— 9 STL周围

最后一篇,完结辽!😋 9 STL周围 9.1 万用Hash Function Hash Function的常规写法:其中 hash_val 就是万用Hash Function class CustumerHash { public:size_t operator()(const Customer& c) const{ return hash_val(c.fna…

BASH shell脚本篇5——文件处理

这篇文章介绍下BASH shell中的文件处理。之前有介绍过shell的其它命令,请参考: BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 BASH shell脚本篇3——字符串处理 BASH shell脚本篇4——函数 在Bash Shell脚本中,可以使用…

【C++】String -- 详解

⚪C语言中的字符串 C 语言中,字符串是以 \0 结尾的一些字符的集合,为了操作方便,C 标准库中提供了一些 str 系列的库函数,但是这些库函数与字符串是分离开的,不太符合 OOP 的思想,而且底层空间需要用户自己…

【Linux】工具:gcc/g++ 升级 7.3 版本

安装语言信息 sudo yum install -y centos-release-scl-rh centos-release-scl安装 7.3 版本 gcc 和 g 编译器 sudo yum install -y devtoolset-7-gcc devtoolset-7-gcc-c加载配置文件 临时生效 source /opt/rh/devtoolset-7/enable 将相应内容重定向到配置文件中&#xff…

Is This The Intelligent Model(这是智能模型吗)

Is This The Intelligent Model 这是智能模型吗 Ruoqi Sun Academy of Military Science Defense Innovation Institute, Beijing, 100091, China E-mail: ruoqisun7163.com The exposed models are called artificial intelligent models[1-3]. These models rely on knowled…

讲讲项目里的仪表盘编辑器(二)

应用场景 正常来说,编辑器应用场景应该包括: 编辑器-预览 编辑器 最终运行时 怎么去设计 上一篇推文,我们已经大概了解了编辑器场景。接下来,我们来看预览时的设计 编辑器-预览 点击预览按钮,执行以…

[Unity][VR]Oculus透视开发图文教程1-Passthrough应用XR项目设置

Oculus现在已向开发者公布了如何使用自己的设备Camera,本系列课程就来手把手地告诉你如何在Unity中使用这个特性。 第一步,既然用的是Quest的特性,那就需要先引入Quest的Unity开发SDK。并且完成基本的VR开发项目设置。 新建Unity项目后,在编辑器界面先点击Window,打开资…

虹科分享 | 为工业机器人解绑,IO-Link wireless无线通讯技术可实现更加轻量灵活的机器人协作

背景 机器人是一种能够半自主或全自主工作的智能机器。中国电子学会组织发布的《中国机器人产业发展报告(2022年)显示,近些年,我国机器人市场规模持续快速增长,“机器人”应用不断拓展深入,预计五年年均增…

YOLOv5、YOLOv8改进:RepVGG结构

1.简介 论文参考:最新RepVGG结构: Paper 我们所说的“VGG式”指的是: 没有任何分支结构。即通常所说的plain或feed-forward架构。 仅使用3x3卷积。 仅使用ReLU作为激活函数。 主要创新点为结构重参数化。在训练时,网络的结构是多分支进…

P4727 [HNOI2009] 图的同构计数

B u r n s i d e : ∣ X / G ∣ 1 ∣ G ∣ ∑ g ∈ G ∣ X ( g ) ∣ Burnside:|X/G|\frac{1}{|G|}\sum\limits_{g\in G}|X^{(g)}| Burnside:∣X/G∣∣G∣1​g∈G∑​∣X(g)∣ 该题: ∣ X / G ∣ 1 ∣ G ∣ ∑ b 2 k Π ( b i …

Visopsys 0.92 发布

Visopsys 是一个 PC 机的操作系统,系统小型、快速而且开源。有着丰富的图形界面、抢先式多任务机制以及支持虚拟内存。Visopsys 视图兼容很多操作系统,但并不是他们的克隆版本。Visopsys 0.92 现已发布,此维护版本引入了多任务处理程序、文件…