【C/C++刷题集】类和对象专题
(常见面试 + OJ 高频考点)
以下题目从简单到较难排列,覆盖了C++类与对象最核心的考察点,建议按照顺序刷,刷完基本能应对90%的“类和对象”相关面试题和OJ题目。
| 难度 | 题号 | 题目名称 | 核心考察点 | 推荐练习平台 | 重要指数 |
|---|---|---|---|---|---|
| ★ | 1 | 实现一个简单的复数类 | 基本成员、构造函数、运算符重载基础 | 牛客/洛谷 | ★★★★ |
| ★ | 2 | 实现字符串类(简版string) | 深拷贝、析构、拷贝构造、赋值运算符 | LeetCode/牛客 | ★★★★★ |
| ★★ | 3 | 单例模式(多种实现方式对比) | 静态成员、线程安全、饿汉/懒汉、Meyers版 | 各种面试 | ★★★★★ |
| ★★ | 4 | RAII实现智能指针(简版unique_ptr) | 析构函数、资源管理、移动语义 | 面试/OJ | ★★★★★ |
| ★★ | 5 | 实现一个可以链式调用的StringBuilder | 返回引用、this指针 | 牛客/面试 | ★★★★ |
| ★★★ | 6 | 实现一个线程安全的计数器类 | mutable、mutable、std::mutex | 面试 | ★★★★ |
| ★★★ | 7 | 实现一个简单的vector(动态数组) | 内存管理、扩容、移动构造、异常安全 | 面试/高频 | ★★★★★ |
| ★★★ | 8 | 实现shared_ptr(简版,含引用计数) | 引用计数、弱引用基础、自定义删除器 | 面试核心 | ★★★★★ |
| ★★★★ | 9 | 用C++实现一个简单的对象池 | 静态成员、双向链表/自由链表、RAII | 游戏开发/高频 | ★★★★ |
| ★★★★ | 10 | 实现一个能统计对象创建/销毁次数的类 | 静态成员、构造/析构/拷贝/移动全家桶 | 理解对象生命周期 | ★★★★ |
| ★★★★ | 11 | 实现一个不允许拷贝的类(禁用拷贝构造+赋值) | =delete、private拷贝构造 | C++11特性 | ★★★ |
| ★★★★ | 12 | 使用CRTP实现静态多态的基类接口 | CRTP、模板、静态分派 | 高级/模板元编程 | ★★★★ |
| ★★★★★ | 13 | 实现一个带迭代器的简易容器(像vector) | 迭代器模式、begin()/end()、const迭代器 | 非常高频 | ★★★★★ |
| ★★★★★ | 14 | 实现一个支持move语义的String类 | 移动构造、移动赋值、std::move | C++11核心 | ★★★★★ |
推荐刷题顺序(不同目标不同路径)
目标:快速过基础面试 + 校招(1-3周)
1 → 2 → 3 → 5 → 10 → 11 → 4 → 14
目标:中高级/大厂算法岗/想真正搞懂C++(1.5-3个月)
1 → 2 → 10 → 3 → 4 → 14 → 7 → 8 → 13 → 12 → 9
目标:游戏开发/高性能/嵌入式方向(更偏底层)
2 → 10 → 7 → 8 → 9 → 13 → 4(加强版) → 自定义分配器相关
高频经典题目参考代码框架(供参考思路)
题2 – 简版string(最经典深拷贝题)
class MyString {
private:
char* data = nullptr;
size_t len = 0;
size_t capacity = 0;
public:
// 构造函数们
MyString() = default;
MyString(const char* s);
MyString(const MyString& other); // 拷贝构造
MyString(MyString&& other) noexcept; // 移动构造
// 赋值运算符
MyString& operator=(const MyString& other); // 拷贝赋值
MyString& operator=(MyString&& other) noexcept; // 移动赋值
~MyString() { delete[] data; }
// 其他常用接口...
size_t size() const { return len; }
const char* c_str() const { return data ? data : ""; }
void push_back(char c);
// ...
};
题3 – 最推荐的现代单例(Meyers’ Singleton)
class Singleton {
public:
static Singleton& getInstance() {
static Singleton instance; // 线程安全、按需初始化、自动析构
return instance;
}
// 禁用拷贝和移动
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
private:
Singleton() = default;
~Singleton() = default;
};
题8 – 极简版shared_ptr(只看思路)
class shared_ptr {
T* ptr = nullptr;
long* ref_count = nullptr;
public:
explicit shared_ptr(T* p = nullptr) : ptr(p), ref_count(new long(1)) {}
shared_ptr(const shared_ptr& other) : ptr(other.ptr), ref_count(other.ref_count) {
if (ref_count) ++*ref_count;
}
~shared_ptr() {
if (ref_count && --*ref_count == 0) {
delete ptr;
delete ref_count;
}
}
// ... 移动构造/赋值、operator*、operator-> 等
};
祝刷题愉快!
想重点练哪几道题?或者想要某个难度区间的完整题目+参考答案列表?
可以直接告诉我~ 😄