上传者: feixiang5527
|
上传时间: 2025-07-22 16:31:33
|
文件大小: 42.29MB
|
文件类型: PDF
### C++相关高频经典面试题知识点详解
#### 1. C++中的数据类型
- **基本数据类型**:包括整型(int, short, long, long long)、浮点型(float, double)、字符型(char)等。
- **复合数据类型**:如数组(array)、结构体(struct)、联合体(union)、枚举(enum)等。
#### 2. const关键字
- **定义**:`const` 关键字用于声明一个变量为常量,意味着该变量的值在声明后不能被改变。
- **作用**:
- 提高程序的安全性。
- 优化性能,编译器可以对常量进行优化。
- 增强代码可读性。
#### 3. 引用与指针的区别
- **引用**:本质上是别名,不拥有自己的内存空间;初始化后不能重新绑定。
- **指针**:指向内存地址,可以重新指向不同的地址;需要显式解引用才能访问所指内容。
#### 4. 函数重载
- **定义**:在同一作用域内定义多个同名但参数列表不同的函数。
- **实现**:通过不同数量或类型的参数来区分函数。
#### 5. 动态内存分配与管理
- **new/delete**:用于在堆上分配/释放内存。
- **new[]/delete[]**:用于数组的分配/释放。
- **注意点**:释放内存时需要确保不发生内存泄漏,避免野指针。
#### 6. 构造函数与析构函数
- **构造函数**:在对象创建时自动调用,用于初始化对象。
- **析构函数**:在对象生命周期结束时自动调用,用于清理资源。
#### 7. 拷贝构造函数
- **定义**:用于初始化新对象,使其成为另一个对象的副本。
- **调用时机**:当通过已存在的对象初始化新对象时。
#### 8. 运算符重载
- **定义**:允许用户自定义操作符的行为。
- **实现**:通过成员函数或非成员函数形式定义。
#### 9. 多继承与虚继承
- **多继承**:一个类可以从多个基类派生。
- **虚继承**:解决“钻石问题”,确保派生类只继承一个基类实例。
#### 10. 命名空间
- **定义**:用于组织代码,避免命名冲突。
- **使用**:通过 `namespace` 关键字声明。
#### 11. 模板与泛型编程
- **模板**:用于编写通用代码。
- **泛型编程**:基于类型的操作,提高代码复用性。
#### 12. 函数模板与类模板
- **函数模板**:定义一组相关函数。
- **类模板**:定义一组相关类。
#### 13. STL(标准模板库)
- **定义**:提供了一组高效的数据结构和算法。
- **主要组件**:容器(container)、迭代器(iterator)、算法(algorithm)。
#### 14. 迭代器与容器
- **迭代器**:用于遍历容器中的元素。
- **容器**:如vector、list、map等,用于存储数据。
#### 15. 智能指针
- **定义**:自动管理内存的指针。
- **种类**:`std::unique_ptr`, `std::shared_ptr`, `std::weak_ptr`。
#### 16. 异常处理机制
- **定义**:用于捕获并处理运行时错误。
- **关键字**:try, catch, throw。
#### 17. RAII(资源获取即初始化)
- **定义**:一种资源管理技术,资源在对象创建时获取,在对象销毁时释放。
- **优势**:自动管理资源,简化代码。
#### 18. 静态变量与静态函数
- **静态变量**:在整个程序运行期间存在。
- **静态函数**:只能在声明它的文件中访问。
#### 19. 虚函数与纯虚函数
- **虚函数**:支持多态,允许子类重写。
- **纯虚函数**:没有实现,强制子类必须重写。
#### 20. 多态性
- **定义**:允许子类重写父类的方法。
- **实现**:通过虚函数实现。
#### 21. 抽象类与接口类
- **抽象类**:包含至少一个纯虚函数的类。
- **接口类**:仅由纯虚函数组成的类。
#### 22. 命名规范与编码风格
- **定义**:统一的命名规则和编码习惯。
- **作用**:提高代码可读性和维护性。
#### 23. 递归与迭代
- **递归**:函数调用自身解决问题。
- **迭代**:通过循环结构解决问题。
#### 24. 文件流
- **定义**:用于文件输入输出。
- **使用**:通过fstream、ifstream、ofstream等类。
#### 25. 预处理器指令
- **定义**:在编译前进行文本替换。
- **常见指令**:#include, #define, #ifdef等。
#### 26. 内联函数
- **定义**:在编译时将函数体插入到每个调用处。
- **作用**:减少函数调用开销。
#### 27. 默认参数与函数重载的关系
- **定义**:函数可以有默认参数值。
- **关系**:与函数重载一起使用,增加函数灵活性。
#### 28. 友元函数与友元类
- **定义**:友元函数或类可以访问另一个类的私有和保护成员。
- **作用**:提高灵活性。
#### 29. 类型转换
- **定义**:将一种数据类型转换为另一种数据类型。
- **方式**:静态转换(static_cast)、动态转换(dynamic_cast)等。
#### 30. 命令行参数传递
- **定义**:程序启动时接收来自命令行的参数。
- **使用**:通过main函数的参数获取。
#### 31. 浅拷贝与深拷贝
- **浅拷贝**:复制对象时,只是简单地复制对象的指针。
- **深拷贝**:复制对象时,复制对象所指向的内容。
#### 32. Lambda表达式
- **定义**:用于定义简单的匿名函数。
- **作用**:简化代码,提高代码的可读性。
#### 33. 前置递增与后置递增
- **前置递增**:先递增再使用。
- **后置递增**:先使用再递增。
#### 34. 线程
- **定义**:程序执行的基本单位。
- **创建与管理**:通过std::thread类。
#### 35. 互斥锁与条件变量
- **互斥锁**:确保同一时间只有一个线程访问共享资源。
- **条件变量**:用于线程间的同步通信。
#### 36. 静态多态性与动态多态性
- **静态多态性**:通过函数重载或运算符重载实现。
- **动态多态性**:通过虚函数实现。
#### 37. 析构函数中的虚函数调用
- **定义**:确保析构函数能够正确调用基类的析构函数。
- **作用**:避免内存泄漏。
#### 38. 移动语义与右值引用
- **移动语义**:允许更高效地移动资源。
- **右值引用**:用于表示将被移动的对象。
#### 39. 命名构造函数
- **定义**:一种特殊的构造函数,用于简化代码。
- **作用**:通过函数名直接调用构造函数。
#### 40. 位运算
- **定义**:对二进制位进行操作。
- **常用运算**:与(&)、或(|)、异或(^)、左移(<<)、右移(>>)。
#### 41. 虚拟继承与菱形继承问题
- **虚拟继承**:解决多重继承时的菱形问题。
- **菱形继承问题**:多继承时可能出现的多次继承同一个基类的问题。
#### 42. 模板元编程(TMP)
- **定义**:在编译期执行计算逻辑。
- **实现**:通过模板的特化和偏特化。
#### 43. 类型萃取(type traits)与SFINAE
- **类型萃取**:用于提取类型的信息。
- **SFINAE**:替换失败不是错误(Substitution Failure Is Not An Error),用于条件编译。
#### 44. 完美转发(perfect forwarding)
- **定义**:保留原始参数类型和值类别。
- **作用**:避免不必要的拷贝和移动。
#### 45. 强制类型转换与旧式类型转换
- **强制类型转换**:如static_cast, dynamic_cast等。
- **旧式类型转换**:如(int)expr, (T*)ptr等。
#### 46. 静态断言与动态断言
- **静态断言**:在编译时检查条件。
- **动态断言**:在运行时检查条件。
#### 47. 多线程同步机制
- **定义**:确保多线程之间正确同步。
- **机制**:互斥锁、信号量、条件变量等。
#### 48. 析构函数中的异常处理
- **定义**:处理析构函数中可能抛出的异常。
- **作用**:确保资源正确释放。
#### 49. 函数对象(Functor)与函数指针
- **函数对象**:具有operator()的类实例。
- **函数指针**:指向函数的指针。
#### 50. 多态数组与虚函数表
- **多态数组**:通过基类指针访问派生类对象。
- **虚函数表**:用于实现多态。
以上仅为部分高频经典面试题知识点的简要概述,每一点都值得深入学习和理解。对于C++开发者而言,熟练掌握这些核心概念和技术是提升技能的关键。