极限复习c++

一、核心语法必背

1. 指针 vs 引用(简答题高频)
区别 指针 引用
定义 存储地址的变量,可改指向 变量的别名,绑定后不可改
初始化 可空(nullptr)、延迟初始化 必须初始化,不能引用空值
访问 需解引用(*p/->) 直接用变量名,语法同原变量
空值 允许nullptr 无空引用,绑定后必有效
自增 / 减 支持(移动地址) 不支持(别名不变)

代码示例:

cpp

运行

复制代码
int a = 10;
int* p = &a;  // 指针存地址
int& ref = a; // 引用是别名 

p = nullptr;  // 指针可改指向
// ref = nullptr;  // 错误!引用不能改绑定
2. 类与对象(必写代码)

封装 + 构造 / 析构 + 拷贝控制(考频最高):

cpp

运行

复制代码
class Student {
private:
    string name;
    int age;
public:
    // 构造函数(重载 + 初始化列表)
    Student(string n = "无名", int a = 0) : name(n), age(a) {}  

    // 拷贝构造(深拷贝场景需手动写,如含指针成员)
    Student(const Student& other) : name(other.name), age(other.age) {}  

    // 析构函数(含动态内存时必写,如指针)
    ~Student() { /* 释放资源 */ }  

    // 成员函数
    void print() const { 
        cout << "姓名:" << name << ",年龄:" << age << endl; 
    }
};

// 调用示例
Student zs("张三", 18);
zs.print(); 
Student ls = zs; // 调用拷贝构造
3. 继承与多态(必写代码)

虚函数 + 纯虚函数 + 多态调用(核心考点):

cpp

运行

复制代码
class Animal {
public:
    // 纯虚函数(抽象类,强制派生类实现)
    virtual void speak() = 0;  

    // 虚析构(避免派生类对象析构不完整)
    virtual ~Animal() {}  
};

class Dog : public Animal {
public:
    void speak() override { // override 显式重写
        cout << "汪汪!" << endl; 
    }
};

// 多态调用(基类指针/引用指向派生类对象)
Animal* animal = new Dog();
animal->speak(); // 输出"汪汪!"(运行时绑定)
delete animal;
4. 模板(必写代码)

函数模板 + 类模板(语法题高频):

cpp

运行

复制代码
// 函数模板(泛型交换)
template <typename T>
void swap(T& a, T& b) {
    T temp = a;
    a = b;
    b = temp;
}

// 类模板(简单栈)
template <typename T>
class Stack {
private:
    vector<T> data;
public:
    void push(const T& val) { data.push_back(val); }
    T pop() { 
        T top = data.back();
        data.pop_back();
        return top; 
    }
};

// 调用示例
Stack<int> s;
s.push(10);
int x = s.pop();
5. 智能指针(必背区别)
类型 特点 场景
unique_ptr 独占所有权,不可拷贝 简单对象管理,避免资源泄漏
shared_ptr 共享所有权(引用计数) 多对象共享资源,需注意循环引用
weak_ptr 弱引用(不影响计数) 解决shared_ptr循环引用

代码示例:

cpp

运行

复制代码
// unique_ptr(独占)
unique_ptr<Student> p1 = make_unique<Student>("李四", 20);

// shared_ptr(共享)
shared_ptr<Student> p2 = make_shared<Student>("王五", 22);
shared_ptr<Student> p3 = p2; // 引用计数+1

// weak_ptr(弱引用)
weak_ptr<Student> p4 = p2; // 不影响计数
6. 异常处理(必写结构)

cpp

运行

复制代码
try {
    // 可能抛异常的代码
    if (error) throw runtime_error("出错了!"); 
} catch (const runtime_error& e) {
    // 捕获特定异常
    cout << "错误:" << e.what() << endl; 
} catch (...) {
    // 兜底捕获
    cout << "未知异常" << endl; 
}

二、简答题速记(直接背答案)

1. 指针和引用的区别(必考题)
  • 定义:指针存地址,可改指向;引用是别名,绑定后不可改。
  • 初始化:指针可空、延迟初始化;引用必须初始化,不能引用空值。
  • 访问 :指针需解引用(*p);引用直接用变量名。
  • 空值 :指针允许nullptr;引用无空引用。
2. 虚函数的实现原理(必考题)
  • 虚函数表(vtable):每个含虚函数的类编译时生成虚表,存储虚函数地址。
  • 虚表指针(vptr):对象构造时,vptr 指向类的虚表。
  • 调用机制:通过 vptr 查表,运行时动态绑定函数(多态的核心)。
3. 拷贝构造函数的调用场景(必考题)
  • 用对象初始化新对象 :Student s2 = s1; 或 Student s2(s1);。
  • 函数按值传递对象 :void func(Student obj),调用时拷贝实参。
  • 函数返回对象(值返回) :Student func() { Student s; return s; },返回时拷贝临时对象。
4. 内存泄漏及解决方法(必考题)
  • 内存泄漏 :动态分配的内存(new/malloc)未释放,长期占用内存。
  • 解决方法 :
    • 用智能指针(unique_ptr/shared_ptr)自动管理。
    • 严格配对 new/delete、malloc/free。
    • 工具检测(如 Valgrind、AddressSanitizer)。
5. 重载(overload)、覆盖(override)、重写(overwrite)区别(选考)
  • 重载(overload):同一作用域,函数名相同,参数(类型 / 个数 / 顺序)不同,编译期决议。
  • 覆盖(override) :派生类重写基类虚函数,函数签名(名、参数、返回)完全一致,运行期多态。
  • 重写(overwrite):非标准说法,常指覆盖(override)或隐藏基类函数(如派生类定义同名非虚函数)。

三、考试应急策略

  1. 代码题:优先写框架(类定义、函数模板结构),再补细节(构造函数、虚函数、智能指针)。
  2. 简答题:抓关键词(如 "虚函数表""引用计数""拷贝场景"),按点作答。
  3. 易错点 :
    • 多态必须用虚函数 + 基类指针 / 引用。
    • 智能指针注意 unique_ptr 不可拷贝,shared_ptr 需避免循环引用。
    • 模板代码记得写 template <typename T>。

最后 1 小时:快速过一遍必背代码(类、多态、模板)和简答题答案,强化肌肉记忆!

祝考试顺利,代码全 AC !

相关推荐
OxYGC2 分钟前
[工程] PHP2Shell 漏洞解析:两条 PHP 内核 RCE,为什么应用层的防护全部失效
android·开发语言·php
小徐不徐说5 分钟前
数据库存储基础:理解表结构、主键、事务与 BLOB
开发语言·数据库·c++·qt·程序设计
草莓熊Lotso18 分钟前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
李纲明20 分钟前
WordPress 媒体库上传失败或一直转圈:先核 PHP 上传限制与目录权限,再查安全插件与对象存储
运维·开发语言·安全·php·wordpress·媒体库·devdiy
第九序言T9 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
Sakura_j_h_9 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
龙亘川10 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人10 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
Raas10011 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
专注仿真11 小时前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法