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

2024-09-01 12:36
文章标签 语言 基础 c++ 八股文

本文主要是介绍C++八股文之语言基础篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🤖个人主页:晚风相伴-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、热重载 

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

这篇关于C++八股文之语言基础篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126948

相关文章

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function