C++八股文(基础知识篇1)
1. C++ 和 C 有什么区别?
C++是C语言的超集,主要区别在于:
- 编程范式:C是面向过程的,C++支持面向对象、泛型编程和函数式编程
- 核心特性:C++增加了类、继承、多态、封装、模板、异常处理、命名空间等
- 内存管理:C用malloc/free,C++用new/delete,并支持构造/析构函数自动管理资源
- 类型检查:C++的类型检查更严格
- 标准库:C++有STL容器、算法和迭代器,功能更强大
2. 引用(Reference)与指针(Pointer)有什么区别?
- 初始化:引用必须在定义时初始化,指针可以先声明后赋值
- 重新绑定:引用一旦绑定不能改变,指针可以指向不同对象
- 空值:引用不能为空,指针可以是nullptr
- 语法:引用使用更简洁,像操作原变量一样;指针需要解引用操作
- 内存:引用通常不占额外空间(编译器优化),指针占用内存存储地址
- 使用场景:引用常用于函数参数传递,指针更灵活,适合动态内存和数据结构
3. 深拷贝与浅拷贝有什么区别?
- 浅拷贝:只复制对象的值,如果有指针成员,只复制指针地址,不复制指针指向的内容。多个对象共享同一块内存,析构时会导致重复释放
- 深拷贝:不仅复制对象的值,还会为指针成员重新分配内存并复制内容。每个对象独立管理自己的资源
- 默认行为:编译器生成的默认拷贝构造函数和赋值运算符执行浅拷贝
- 何时需要深拷贝:当类中有指针成员、动态分配的资源时,需要自定义深拷贝
4. 什么是构造函数和析构函数?
- 构造函数:对象创建时自动调用,用于初始化对象。函数名与类名相同,无返回值。可以重载,支持默认参数和初始化列表
- 析构函数:对象销毁时自动调用,用于清理资源(释放内存、关闭文件等)。函数名是~加类名,无参数无返回值,不能重载
- 调用时机:栈对象离开作用域时、delete堆对象时、程序结束时全局对象销毁
- 虚析构函数:基类析构函数应该是虚函数,确保通过基类指针删除派生类对象时正确调用析构函数
5. 如何定义常量(const)?
- 常量变量:
const int MAX = 100;必须初始化,不能修改
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
C++八股文全集 文章被收录于专栏
本专栏系统梳理C++技术面试核心考点,涵盖语言基础、面向对象、内存管理、STL容器、模板编程及经典算法。从引用指针、虚函数表、智能指针等底层原理,到继承多态、运算符重载等OOP特性从const、static、inline等关键字辨析,到动态规划、KMP算法、并查集等手写实现。每个知识点以面试答题形式呈现,注重原理阐述而非冗长代码,帮助你快速构建完整知识体系,从容应对面试官提问,顺利拿下offer。
文远知行公司福利 560人发布