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.xdnf.cn/news/148633.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

十天学完基础数据结构-第二天(数据结构简介)

什么是数据结构? 在计算机科学中,数据结构是一种组织和存储数据的方式。它定义了数据的布局,以及对这些数据执行的操作。你可以把数据结构看作是计算机内存中的特定组织方式,就像图书馆中书籍的排列一样。 数据结构可以是各种形…

python获取时间戳

使用 datetime 库获取时间。 获取当前时间: import datetime print(datetime.datetime.now()) . 后面的是微秒,也是一个时间单位,1秒1000000微秒。 转为时间戳: import datetimedate datetime.datetime.now() timestamp date…

【数据结构】堆的应用-----TopK问题

目录 一、前言 二、Top-k问题 💦解法一:暴力排序 💦解法二:建立N个数的堆 💦解法三:建立K个数的堆(最优解) 三、完整代码和视图 四、共勉 一、前言 在之前的文章中&#xff…

Springboot场景开发多面手

LinkedBear ,资深 Java 高级工程师,底层技术研究者与分享者,倾心研究 Spring 技术体系多年,对 Spring、Spring Boot 、SpringCloud 等框架有独到的见解,拥有丰富的框架体系实践经验和架构封装经验。善于总结、输出&…

CharacterEncodingFilter的用法

CharacterEncoding是SpringMVC提供的一个一个过滤器,用于设置请求和响应的字符编码,解决乱码问题,他本身是一个过滤器 那么在SpringBoot中,CharacterEncoding就有一个很好的秒用 setEncoding("UTF-8")设置编码 setForceEncoding(true) 设置请求和响应编码 还需要在配…

leetcode做题笔记160. 相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后&…

计算机视觉——飞桨深度学习实战-深度学习网络模型

深度学习网络模型的整体架构主要数据集、模型组网以及学习优化过程三部分,本章主要围绕着深度学习网络模型的算法架构、常见模型展开了详细介绍,从经典的深度学习网络模型以CNN、RNN为代表,到为了解决显存不足、实时性不够等问题的轻量化网络…

Day-05 CentOS7.5 安装docker

参考 : Install Docker Engine on CentOS | Docker DocsLearn how to install Docker Engine on CentOS. These instructions cover the different installation methods, how to uninstall, and next steps.https://docs.docker.com/engine/install/centos/ Doc…

计算机网络 第二章物理层

计算机网络第二章知识点速刷 其中重要的是信源和信宿,以及调制解调器在通信模型当中起到的作用。 单工、半双工和全双工。

【Java 进阶篇】JDBC 数据库连接池详解

数据库连接池是数据库连接的管理和复用工具,它可以有效地降低数据库连接和断开连接的开销,提高了数据库访问的性能和效率。在 Java 中,JDBC 数据库连接池是一个常见的实现方式,本文将详细介绍 JDBC 数据库连接池的使用和原理。 1…

计组——I/O方式

一、程序查询方式 CPU不断轮询检查I/O控制器中“状态寄存器”,检测到状态为“已完成”之后,再从数据寄存器取出输入数据。 过程: 1.CPU执行初始化程序,并预置传送参数;设置计数器、设置数据首地址。 2. 向I/O接口发…

腾讯云服务器选购指南:如何选择一台合适的云服务器配置?

腾讯云服务器配置如何选择?CPU内存、带宽和系统盘怎么选择合适?个人用户可以选择轻量应用服务器,企业用户可以选择云服务器CVM,2核2G3M带宽轻量服务器95元一年、2核4G5M服务器168元一年,企业用户可以选择标准型S5云服务…

1300*C. Rumor(并查集贪心)

解析&#xff1a; 并查集&#xff0c;求每个集合的最小费用。 每次合并集合的时候&#xff0c;根节点保存当前集合最小的费用。 #include<bits/stdc.h> using namespace std; #define int long long const int N1e55; int n,m,a[N],p[N],cnt[N]; int find(int x){retur…

分布式锁:四种方案解决商品超卖的方案

一 分布式锁 1.1 分布式锁的作用 在多线程高并发场景下&#xff0c;为了保证资源的线程安全问题&#xff0c;jdk为我们提供了synchronized关键字和ReentrantLock可重入锁&#xff0c;但是它们只能保证一个工程内的线程安全。在分布式集群、微服务、云原生横行的当下&#xff…

深度学习笔记_4、CNN卷积神经网络+全连接神经网络解决MNIST数据

1、首先&#xff0c;导入所需的库和模块&#xff0c;包括NumPy、PyTorch、MNIST数据集、数据处理工具、模型层、优化器、损失函数、混淆矩阵、绘图工具以及数据处理工具。 import numpy as np import torch from torchvision.datasets import mnist import torchvision.transf…

uniapp 实现下拉筛选框 二次开发定制

前言 最近又收到了一个需求&#xff0c;需要在uniapp 小程序上做一个下拉筛选框&#xff0c;然后找了一下插件市场&#xff0c;确实有找到&#xff0c;但不过他不支持搜索&#xff0c;于是乎&#xff0c;我就自动动手&#xff0c;进行了二开定制&#xff0c;站在巨人的肩膀上&…

归并排序及其非递归实现

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 归并排序递归实现 归并排序非递归实现 归并排序递归实现 图示&#xff1a; 代码&#xff1a; 先分再归并&#xff0c;像是后序一般。 //归并排序 void MergeSort(int* arr, int left, int right) {int* temp (int…

tcp滑动窗口原理

18.1 滑动窗口 我们再来看这个比喻&#xff1a; 网络仅仅是保证了整个网络的连通性&#xff0c;我们我们基于整个网络去传输&#xff0c;那么是不是我想发送多少数据就发送多少数据呢&#xff1f;如果是这样的话&#xff0c;是不是就会像我们的从一个池塘抽水去灌到另外一个…

速看:免费领取4台阿里云服务器_申请入口及领取流程

注册阿里云账号&#xff0c;免费领云服务器&#xff0c;最高领取4台云服务器&#xff0c;每月750小时&#xff0c;3个月免费试用时长&#xff0c;可快速搭建网站/小程序&#xff0c;部署开发环境&#xff0c;开发多种企业应用。阿里云服务器网分享阿里云服务器免费领取入口、免…

openGauss学习笔记-89 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用查询原生编译

文章目录 openGauss学习笔记-89 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用查询原生编译89.1 查询编译&#xff1a;PREPARE语句89.2 运行命令89.3 轻量执行支持的查询89.4 轻量执行不支持的查询89.5 JIT存储过程89.6 MOT JIT诊断89.6.1 mot_jit_detai…