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

相关文章

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下: