C++八股文之语言基础篇

news2024/9/23 5:28:12

🤖个人主页:晚风相伴-CSDN博客

思维导图链接:C++语言基础

持续更新中……

💖如果觉得内容对你有帮助的话,还请给博主一键三连(点赞💜、收藏🧡、关注💚)吧

🙏如果内容有误或者有写的不好的地方的话,还望指出,谢谢!!!

让我们共同进步

​​

目录

1、C语言和C++的区别

 2、struct和class的区别

3、C语言和C++结构体的区别 

4、静态链接和动态链接

5、C语言和C++编译时的区别

6、static关键字的作用 

7、函数指针

 8、静态变量什么时候初始化

9、野指针 

10、内联函数和宏的区别 

11、new和malloc的区别 

12、指针和引用的区别 

13、内存泄漏 

14、热重载 


1、C语言和C++的区别

  1. C语言是C++的子集,C++可以很好兼容C语言。此外C++又有很多新的特性,如引用、智能指针等等
  2. C++是面向对象的编程语言,C语言是面向过程的编程语言
  3. C语言有一些不安全的语言特性,如指针使用的潜在危险、强置类型转换的不确定性、内存泄漏等,C++对此增加了不少新特性来改善安全性,如引用、智能指针、try-catch异常等。
  4. C++复用性高,C++引入了模板和STL库相比于C语言更灵活、更通用

 2、struct和class的区别

  1. struct一般用于描述一个数据结构集合,而class是对一个对象数据的封装
  2. struct中默认的访问控制权限是public,而class中默认的访问控制权限是private
  3. 在继承关系中,struct默认是公有继承,而class默认是私有继承
  4. class可以用于定义模板参数,而struct不能

3、C语言和C++结构体的区别 

  1. C语言的结构体内不允许有函数的存在,C++允许有内部成员函数,且允许该函数是虚函数
  2. C的结构体内部成员变量的访问权限只能是public,而C++允许public、protected、private。
  3. C语言的结构体是不可以继承的,C++的结构体是可以从其他结构体或类继承过来的
  4. C语言中使用结构体需要加上struct关键字,而C++则可以省略该关键字

4、静态链接和动态链接

静态链接,是在链接的时候就已经把要调用的函数或者过程链接到了生成的可执行文件中。Windows下以.lib为后缀,Linux下以.a为后缀
动态链接,是在代码运行过程中,再去找要链接的函数。Windows下以.dll为后缀,Linux下以.so为后缀。

5、C语言和C++编译时的区别

因为C++支持函数重载,所以在编译时不仅仅是函数名,还会将函数的参数类型也加到编译后的代码中;C语言不支持重载,所以在编译时一般只包括函数名

6、static关键字的作用 

  1. 定义全局静态变量和局部静态变量,在变量前加static。初始化的静态变量会在数据段分配内存,未初始化的静态变量会在BSS段分配内存。只不过全局静态变量和局部静态变量的作用域不一样。
  2. 定义静态函数和静态变量,静态函数和静态变量只能在本源文件中使用
  3. 定义类中的静态成员变量和静态成员函数。类中的所有成员变量拥有一块单独的存储区,而不管创建了多少个该类的对象。所有这些对象的静态数据成员都共享这一块静态存储空间
  4. C++中规定,静态成员函数中没有this指针,因为它不属于任何一个对象

​ 

7、函数指针

  1. 函数指针就是指向函数的指针变量。每一个函数都有一个入口地址,该入口地址就是函数指针所指的地址
  2. 定义 int func(int a);     int (*f)(int a);  f = &func; 
  3. 应用场景:回调

 8、静态变量什么时候初始化

对于C语言的全局和静态变量,初始化发生在任何代码执行之前,属于编译期初始化。
C++标准规定,全局或静态对象当且仅当对象首次用到时才进行构造 

9、野指针 

  1. 野指针就是指针指向的位置是不可知的
  2. 产生原因:释放内存后指针没有及时置空,依然指向了该内存,那么可能出现非法访问的错误。
  3. 避免办法:初始化置NULL、申请内存后判空、指针释放后置NULL、使用智能指针

10、内联函数和宏的区别 

  1. 宏定义不是函数,内联本质上是一个函数
  2. 宏定义在预编译的时候就把所有宏名来替换,而内联函数是在编译时进行代码插入,并且在调用的地方将内容展开,这样可以省去函数调用的开销,提高效率
  3. 宏定义没有类型检查,而内联函数会进行类型检查

11、new和malloc的区别 

  1. new是操作符,而malloc是函数
  2. new在调用时先分配内存,再调用构造函数,释放时调用析构函数,而malloc没有构造函数和析构函数
  3. malloc需要给定申请内存的大小,返回时的指针需要强转;new会调用构造函数,不用指定内存的大小,返回指针不用强转
  4. new可以被重载,malloc则不行
  5. new分配内存更直接和安全
  6. new会抛异常,malloc则会返回NULL

12、指针和引用的区别 

空值:指针可为空,引用必须指向有效对象
初始化:指针使用前可未初始化,但引用必须初始化
可变性:指针可重新指向不同的对象,引用一旦绑定则不可变
类型检查:指针类型相对宽松,引用类型严格
内存占用:指针占用固定大小内存,引用不额外占用
多级:指针可多级,引用只能一级

引用的底层还是用的指针,所以引用也是会占内存的 

13、内存泄漏 

简单地说就是申请了一块内存空间,使用完毕后没有释放掉。
(1)new和malloc申请资源使用后,没有用delete和free释放
(2)子类继承父类,父类析构函数不是虚函数
(3)Windows句柄资源使用后没有释放

内存泄漏检测
①良好的编码习惯,使用了内存分配的函数,一旦使用完毕,要记得使用其相应的函数释放掉
②将分配的内存的指针以链表的形式自行管理,使用完毕之后从链表中删除,程序结束可检查该链表
③使用智能指针
④使用一些工具,如ccmalloc、Dmalloc、Leaky、Valgrind等等。 

14、热重载 

允许开发人员在不重启应用程序的情况下动态地加载、更新或替换代码的技术 

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

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

相关文章

Java中post请求外部接口。其中有应对form-data参数方式处理

一、正常json参数的请求方式 代码片段如下: String result HttpUtil.post(URL_DEFAULT"d38e4357cb96dce5", JSONUtil.parseObj(Dict.create().set("fileName", cityTransitMapParams.getFileName()).set("appKey",cityTransitMapPa…

华为OD机试真题 - 荒岛求生 - 栈Stack(Java/Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Java/Python/JS/C/C++)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX…

使用JaCoCo 生成单测覆盖率报告

引入插件 <!-- surefire plugin with spock and junit --> <plugin><groupId>org.codehaus.gmavenplus</groupId><artifactId>gmavenplus-plugin</artifactId><version>1.9.0</version><executions><execution>&l…

使用ROCm和AMD GPU进行机器学习基准测试:复现我们的MLPerf推理提交

Benchmarking Machine Learning using ROCm and AMD GPUs: Reproducing Our MLPerf Inference Submission — ROCm Blogs 简介 衡量新技术的性能是自古以来的一种实验&#xff0c;常常引人入胜&#xff08;例如&#xff0c;我们仍然用马力来比较新电动汽车电机的性能&#xf…

Session 运行机制详解:从创建到销毁

Session 运行机制详解&#xff1a;从创建到销毁 一、Session的创建二、Session的维持三、Session的销毁 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Web开发中&#xff0c;Session机制是实现用户会话跟踪的重要手段。它允许服务器在多…

linux 9系统分区扩容

1.可以看到我的是9.2的系统&#xff0c;系统分区&#xff1a;/dev/mapper/rl-root 83G 8.0G 75G 10% / 2.接下来&#xff0c;我们新增一块新的硬盘&#xff0c;而不是直接对这个硬盘的基础上再扩容。 关机&#xff0c;加30G硬盘&#xff0c;再开机 fdisk -l fdisk /dev/…

29 路由工作原理

路由工作原理 一、理解路由工作原理 &#xff08;一&#xff09;什么是路由 ​ 将数据包从一个网络发送到另一个网络 ​ 需要依靠路由器 ​ 来完成路由器只关心网络的状态&#xff0c;决定最佳路径 &#xff08;二&#xff09;路由器工作原理 ​ 主要完成下列事情&#…

c++算法第一天

温馨提示&#xff1a;本篇文章适合刚开始练算法的小白&#xff0c;大佬若见勿嘲 、 题目 核心提取 1.所有的0移动到数组末尾 2.不能复制数组 解题思路 遇到0,cur,非0则先dest1,再交换&#xff0c;最后cur。 代码编写 温馨提示&#xff1a;这里的指针可以使用下标代替 …

nefu暑假集训4 哈希 个人模板+例题汇总

前言&#xff1a; 什么是哈希&#xff1f;哈希其实是所有字符串操作中&#xff0c;最简单的操作了&#xff08;哈希的过程&#xff0c;其实可以看作对一个串的单向加密过程&#xff0c;并且需要保证所加的密不能高概率重复&#xff08;就像不能让隔壁老王轻易地用它家的钥匙打开…

室分(室内分布系统)主要器件

室分&#xff0c;即室内分布系统&#xff0c;是一种将基站信号引入室内&#xff0c;并对信号进行分布和覆盖的系统。它主要用于解决室内通信信号覆盖不足的问题&#xff0c;提高室内通信质量。室分系统通常由信号源、传输系统、分布系统和天线等部分组成&#xff0c;可以实现对…

java计算机毕设课设—JSP企业快信系统(附源码、文章、相关截图、部署视频)

这是什么系统&#xff1f; java计算机毕设课设—JSP企业快信系统(附源码、文章、相关截图、部署视频) 详细的资源获取方式在最下方 JSP企业快信系统是一款专为企业内部及外部通信设计的小型企业通信软件&#xff0c;旨在解决企业在日常沟通中遇到的信息传递不及时、沟通不畅…

火绒安全与国际对手:全面对比与分析

目录 一、产品功能与技术特性对比 火绒安全 360安全卫士 卡巴斯基安全软件 二、市场表现与用户评价 火绒安全 360安全卫士 卡巴斯基安全软件 三、未来挑战与发展 技术与服务对比表格 结语 在数字化时代&#xff0c;网络安全成为了个人和企业面临的主要挑战之一。随着…

数学建模强化宝典(4)fminunc

一、介绍 fminunc 是 MATLAB 中用于求解无约束多变量非线性优化问题的函数。它尝试找到给定函数的最小值点&#xff0c;不需要用户提供函数的导数信息&#xff08;尽管如果提供了导数信息&#xff0c;算法通常会更快更准确地收敛&#xff09;。fminunc 使用的是拟牛顿法&#x…

stm32 8080时序驱动lcd屏幕

PSAM使用的硬件接口 PSAM读时序 PSAM写时序 相关时序 PSAM_RCRx NOR 和PSRAM控制寄存器

Ubuntu/Debian 上删除未使用的软件包

随着时间的推移&#xff0c;Linux 系统可能会有大量不再使用的软件包。这些软件包会占用大量磁盘空间&#xff0c;并可能降低系统的整体性能。 本指南将向您展示如何轻松地删除这些未使用的包。保持系统的干净和高效是很重要的&#xff0c;但是要小心&#xff0c;删除必要的软…

Kafka如何保证消息不丢失?

目录 Producer Broker Consumer 为什么Kafka没办法100%保证消息不丢失呢&#xff1f; 生产者 消费者 Broker Kafka作为一个消息中间件&#xff0c;他需要结合消息生产者和消费者一起才能工作&#xff0c;一次消息发送包含以下是三个过程&#xff1a; 1&#xff09;Prod…

QT实现电子相册

使用带有UI界面的QWidget实现电子相册 1、实现功能 1、定时器的使用&#xff0c;在当前页面的停止总时长。 2、显示当前时间 3、图片的上一张与下一张 4、图片的显示 5、进度展示、一共十张图片、进度条的初始值为10。 2、widget.h #ifndef WIDGET_H #define WIDGET_H#i…

Linux 常用命令 ulimit、uptime、curl、scp、dos2unix 提升开发和运维效率

Linux 常用命令&#xff1a;从资源限制到网络传输 一、前导&#xff1a;概述二、ulimit 用户资源三、uptime 机器启动时间负载四、curl 命令五、scp 远程拷贝六、dos2unix和unix2dos命令七、总结 一、前导&#xff1a;概述 本系列主要讲解Linux运行时命令&#xff0c;包括网络…

pycharm中opencv-python和opencv-contrib安装及测试相机链接取图

1.去到https://pypi.org/中查找opencv-python 和opencv-contrib-python当前下载的是4.10.0 2.分别下载。 3.下载完后&#xff0c;打开pycharm&#xff0c;然后新建一个项目&#xff0c;项目中新建一个main.py文件&#xff0c;设置项目配置环境为当前python环境&#xff0c; …

常用排序算法(上)

目录 前言&#xff1a; 1.排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3 常见的排序算法 2.常见排序算法的实现 2.1 堆排序 2.1 1 向下调整算法 2.1 2 建堆 2.1 3 排序 2.2 插入排序 2.1.1基本思想&#xff1a; 2.1.2直接插入排序&#xff1a; 2.1.3 插…