在C++面试中,面试官往往会通过一些常见的面试题来考察候选人的基础知识和实际编程能力。以下是一些C++常见面试题的总结,并附有代码示例以帮助理解。
1. 指针与引用
问题:指针和引用有什么区别?
指针是一个变量,它存储了另一个变量的地址,而引用是一个变量的别名。一旦指向一个变量,引用就不能改变,而指针可以重新指向另一个变量。
#include <iostream>
using namespace std;
void modify(int& ref, int* ptr) {
ref += 1; // 修改引用
(*ptr) += 2; // 修改指针指向的值
}
int main() {
int a = 5;
int b = 10;
modify(a, &b);
cout << "a: " << a << endl; // 输出:a: 6
cout << "b: " << b << endl; // 输出:b: 12
return 0;
}
2. 类和对象
问题:请解释什么是构造函数与析构函数,并举例说明。
构造函数是一个特殊的成员函数,用于初始化对象。析构函数则是在对象生命周期结束时调用,用于释放资源。
#include <iostream>
using namespace std;
class Sample {
public:
Sample() {
cout << "构造函数被调用" << endl;
}
~Sample() {
cout << "析构函数被调用" << endl;
}
};
int main() {
Sample obj; // 创建对象时调用构造函数
// 程序结束时,obj析构,对应析构函数被调用
return 0;
}
3. 虚函数与多态
问题:什么是虚函数?请写一个简单示例。
虚函数是用于实现多态的一种机制。基类中的函数被声明为虚函数,可以被派生类重写。
#include <iostream>
using namespace std;
class Base {
public:
virtual void show() {
cout << "Base class show function called." << endl;
}
};
class Derived : public Base {
public:
void show() override {
cout << "Derived class show function called." << endl;
}
};
int main() {
Base *b; // 基类指针
Derived d; // 派生类对象
b = &d; // 指向派生类对象
b->show(); // 调用派生类的 show(),输出:Derived class show function called.
return 0;
}
4. STL容器
问题:请简要说明STL中的vector,并给出示例代码。
std::vector
是一个动态数组,可以根据需求调整大小。支持随机访问、插入和删除操作。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> nums;
// 添加元素
nums.push_back(10);
nums.push_back(20);
nums.push_back(30);
cout << "Vector elements:" << endl;
for (int n : nums) {
cout << n << " ";
}
cout << endl;
// 删除最后一个元素
nums.pop_back();
cout << "After pop_back:" << endl;
for (int n : nums) {
cout << n << " ";
}
cout << endl;
return 0;
}
总结
C++面试常见题目涉及到指针与引用、类与对象、虚函数与多态、STL容器的理解等多个方面。在面试时,除了回答问题外,清晰的思路和结构化的解答能够展现出候选人的专业素养和编程能力。通过上述示例,候选人可以更好地准备面试,在实际编程中运用C++的特性。