C++基础面试题, C++ 中 include a.h 和 include a.h 有什么区别?
C++基础面试题, C++ 中 include a.h 和 include a.h 有什么区别?
QA
Step 1
Q:: C++ 中 include <a.h> 和 include "a.h"
有什么区别?
A:: 在 C++ 中,#include <a.h> 和 #include "a.h"
之间的区别在于头文件的搜索路径。
1. #include <a.h>: 编译器首先在系统默认的头文件目录(如标准库目录)中搜索 a.
h 文件。如果未找到,再在项目的附加包含路径中查找。
2. #include "a.h": 编译器首先在当前文件所在目录中搜索 a.
h 文件。如果未找到,再在系统默认的头文件目录中搜索。
这一区别允许程序员在使用本地文件(项目内的头文件)和系统文件(标准库或外部库的头文件)时更有针对性地控制头文件的包含路径。
Step 2
Q:: 在 C++
中,何时使用指针,何时使用引用?
A:: 指针和引用都是用于间接访问对象的方式,但它们的使用场景和特性不同。
1.
指针:指针可以为空(NULL),可以在运行时重新指向不同的对象,适用于需要动态分配内存或需要明确控制对象生命周期的场景。指针还可以用来实现数据结构(如链表、树)和某些设计模式(如单例模式)。
2.
引用:引用在初始化后不能更改其指向,必须绑定到一个有效的对象,并且不能为空。因此,引用更安全、更容易使用,适用于函数参数传递和返回值优化等场景。
Step 3
Q:: 为什么在 C++
中使用虚函数?
A:: 虚函数在 C++
中用于实现多态性,允许基类的指针或引用调用派生类的重载函数。在有继承关系的类中,如果基类的方法被声明为虚函数,则在运行时会动态地选择合适的函数调用,这取决于实际的对象类型,而不是指针或引用的类型。这在设计需要扩展性和灵活性的系统时非常重要,例如插件架构、事件处理系统等。
Step 4
Q:: C++
中的 RAII(Resource Acquisition Is Initialization)是什么?为什么重要?
A:: RAII 是 C++
中的一种资源管理技术,其思想是在对象的生命周期中管理资源的分配和释放。在构造函数中获取资源(如内存、文件句柄),在析构函数中释放资源。RAII 确保资源不会泄露,并且即使在异常发生时也能正确释放资源。这在需要强健的资源管理和异常安全性的系统中至关重要,例如操作系统内核、数据库管理系统等。