C++面试题
以下是5个C++面试题及其答案。
1. 什么是虚函数(Virtual Function)?它有什么作用?
答案:
虚函数是在基类中声明为虚拟的成员函数,可以在派生类中重写。它通过使用动态绑定(动态多态性)实现运行时的函数调用。虚函数的作用是允许在派生类中重写基类的方法,通过基类指针或引用调用派生类的方法。
2. 什么是纯虚函数(Pure Virtual Function)?如何使用它?
答案:
纯虚函数是在基类中声明为纯虚的虚函数,没有函数体,需要在派生类中进行实现。通过声明纯虚函数,可以将基类设计为一个抽象类,只提供接口而没有具体的实现。使用纯虚函数的语法是在函数声明后面加上= 0
。
virtual void functionName() = 0;
3. 什么是智能指针(Smart Pointer)?它们解决了什么问题?
答案:
智能指针是一种对象,它表现得像指针,但提供了额外的功能,例如自动内存管理。它们解决了手动管理内存带来的问题,例如内存泄漏和悬挂指针。C++中的智能指针类型有std::shared_ptr
、std::unique_ptr
和std::weak_ptr
。
4. C++中什么是拷贝构造函数(Copy Constructor)?它在什么情况下被调用?
答案:
拷贝构造函数是一种特殊的构造函数,它用于创建一个新对象,该对象是通过使用同一类的另一个对象作为参数进行初始化而创建的。拷贝构造函数在以下情况下被调用:
- 当使用一个对象来初始化同一类的另一个对象时。
- 当将对象作为函数参数按值传递时。
- 当函数返回一个对象时。
5. 什么是动态内存分配(Dynamic Memory Allocation)?如何在C++中进行动态内存分配和释放?
答案:
动态内存分配是在程序运行时根据需要分配和释放内存。在C++中,可以使用new
运算符进行动态内存分配,并使用delete
运算符释放动态分配的内存。
// 动态内存分配
int* ptr = new int; // 分配一个整数大小的动态内存
int* arr = new int[10]; // 分配一个整数数组的动态内存
// 使用动态分配的内存
*ptr = 42;
arr[0] = 1;
// 释放动态内存
delete ptr; // 释放单个对象的内存
delete[] arr; // 释放数组的内存
请注意,在使用new
分配的内存后,应使用相应的delete
运算符释放内存,以避免内存泄漏。使用delete[]
释放动态数组的内存。