C++ 面试题

1,C和C++的区别
- C是面向过程的语言,是一个结构化的语言,考虑的是通过一个过程对输入进行处理得到输出;C++是面向对象的语言,主要特征是“封装、继承、多态”。封装隐藏了实现细节,使得代码模块化;派生类可以继承父类的数据和方法,扩展了已经存在的模块,实现了代码重用;多态则是一个接口多种实现,通过派生类重写父类的虚函数,实现了接口的重用 。
- C和C++动态管理内存的方法不一样,C是使用malloc/free,而C++除此之外还有new/delete关键字。
- C++支持函数重载,C不支持函数重载。(函数重载:C++不允许变量重名,但是允许多个函数取相同的名字,只要参数表不同即可。)
- C++中有引用,C中不存在引用的概念。
2,C++中指针和引用的区别
- 指针是一个新的变量,存储了另一个变量的地址,可以通过访问这个地址来修改另一个变量。引用只是一个别名,其还是变量本身,对于引用的任何操作就是对变量本身进行操作,以达到修改变量的目的
- 引用只有一级,而指针可以有多级。
- 指针传参的时候,还是值传递,指针本身的值不可以修改,需要通过解引用才能对指定的对象进行操作。引用传参的时候,传进来的就是变量本身,因此变量可以被修改。
3,结构体struct和共同体union的区别
- 结构体:将不同类型的数据组合成一个整体,是自定义类型
- 共同体:不同类型的几个变量共同占用一段内存
- 结构体中的每个成员都有自己独立的地址,他们是同时存在的;共同体中的所有成员占用同一段内存,他们不能同时存在。
- sizeof(struct)是内存对齐后所有成员长度的总和,sizeof(union)是内存对齐后最长数据成员的长度。
4,#define和const的区别
- #define定义的常量没有类型,所给出的是一个立即数;const定义的常量有类型名字,存在静态区域。
-处理阶段不同,#define定义的宏变量在预处理时进行替换,可能有多个拷贝,const所定义的变量在编译时确定其值只有一个拷贝。
- #define定义的常量是不可以用指针去指向,const定义的常量可以用指针去指向该常量的地址。
- #define可以定义简单的函数,const不可以定义函数。
6,new,delete,malloc,free之间的关系。
new/delete,malloc/free 都是动态分配内存的方式。
- malloc对开辟的空间大小严格指定,而new只要对象名
- new为对象分配空间时,调用对象的构造函数,delete调用对象的析构函数。
7,delete和delete[ ]的区别
- delete只会调用一次析构函数,而delete[ ]会调用每个成员的析构函数
- 用new分配的内存用delete释放,用new[ ]分配的内存用delete[ ]释放。

上一篇:vue响应式


下一篇:HTTP 常见请求方法