【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(最经典深拷贝题)
classMyString{private:char*data=nullptr;size_t len=0;size_t capacity=0;public:// 构造函数们MyString()=default;MyString(constchar*s);MyString(constMyString&other);// 拷贝构造MyString(MyString&&other)noexcept;// 移动构造// 赋值运算符MyString&operator=(constMyString&other);// 拷贝赋值MyString&operator=(MyString&&other)noexcept;// 移动赋值~MyString(){delete[]data;}// 其他常用接口...size_tsize()const{returnlen;}constchar*c_str()const{returndata?data:"";}voidpush_back(charc);// ...};题3 - 最推荐的现代单例(Meyers’ Singleton)
classSingleton{public:staticSingleton&getInstance(){staticSingleton instance;// 线程安全、按需初始化、自动析构returninstance;}// 禁用拷贝和移动Singleton(constSingleton&)=delete;Singleton&operator=(constSingleton&)=delete;private:Singleton()=default;~Singleton()=default;};题8 - 极简版shared_ptr(只看思路)
classshared_ptr{T*ptr=nullptr;long*ref_count=nullptr;public:explicitshared_ptr(T*p=nullptr):ptr(p),ref_count(newlong(1)){}shared_ptr(constshared_ptr&other):ptr(other.ptr),ref_count(other.ref_count){if(ref_count)++*ref_count;}~shared_ptr(){if(ref_count&&--*ref_count==0){deleteptr;deleteref_count;}}// ... 移动构造/赋值、operator*、operator-> 等};祝刷题愉快!
想重点练哪几道题?或者想要某个难度区间的完整题目+参考答案列表?
可以直接告诉我~ 😄