【C/C++刷题集】类和对象算法题

【C/C++刷题集】类和对象专题
(常见面试 + OJ 高频考点)

以下题目从简单到较难排列,覆盖了C++类与对象最核心的考察点,建议按照顺序刷,刷完基本能应对90%的“类和对象”相关面试题和OJ题目。

难度题号题目名称核心考察点推荐练习平台重要指数
1实现一个简单的复数类基本成员、构造函数、运算符重载基础牛客/洛谷★★★★
2实现字符串类(简版string)深拷贝、析构、拷贝构造、赋值运算符LeetCode/牛客★★★★★
★★3单例模式(多种实现方式对比)静态成员、线程安全、饿汉/懒汉、Meyers版各种面试★★★★★
★★4RAII实现智能指针(简版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::moveC++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-> 等
};

祝刷题愉快!

想重点练哪几道题?或者想要某个难度区间的完整题目+参考答案列表?
可以直接告诉我~ 😄

文章已创建 3771

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部