当前位置: 首页 > news >正文

C++ 精简知识点

目录

一、核心语法

1.指针VS引用

2. 类与对象(必写代码)

3. 继承与多态(必写代码)

4. 模板(必写代码)

5.智能指针

 6. 异常处理(必写结构)

二、简答题速记

三、考试应急策略


一、核心语法
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. 模板(必写代码)

函数模板 + 类模板

// 函数模板(泛型交换)
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循环引用

代码示例:

// 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. 异常处理(必写结构)
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)或隐藏基类函数(如派生类定义同名非虚函数)。

三、考试应急策略

代码题:优先写框架(类定义、函数模板结构),再补细节(构造函数、虚函数、智能指针)。
简答题:抓关键词(如 “虚函数表”“引用计数”“拷贝场景”),按点作答。
易错点

  • 多态必须用虚函数 + 基类指针 / 引用。
  • 智能指针注意 unique_ptr 不可拷贝,shared_ptr 需避免循环引用。
  • 模板代码记得写 template <typename T>。
http://www.xdnf.cn/news/989173.html

相关文章:

  • 推荐算法介绍-基础算法
  • python打卡第49天
  • Unity | AmplifyShaderEditor插件基础(第九集:旗子进阶版)
  • Nginx完全学习指南 - 从入门到实战
  • xilinx的GT配置说明(一)
  • Barcode解码 一维码、二维码识别 物流单号识别
  • Flink 系列之二十六 - Flink SQL - 中间算子:普通聚合
  • QDockWidget
  • Spring Data MongoDB 技术指南
  • JS开发node包并发布流程
  • 基于地形数据计算山体阴影
  • 【指针】(适合考研、专升本)
  • MySQL中外键约束详解 外键在表关系维护中的作用
  • vue定义的组件在外部引入时的问题
  • centos7 安装 zabbix6 -proxy
  • 51la统计怎么用及悟空统计的独特优势
  • C#winform画图代码记录
  • Java八股文——Spring「SpringCloud 篇」
  • 西安java面试总结1
  • 亚马逊Woot黑五策略,快速提升亚马逊业绩
  • Docker三大核心组件详解:镜像、容器、仓库的协作关系
  • 模拟IC设计提高系列5-温度角与蒙特卡洛仿真
  • 基于GA遗传优化的PID控制器最优控制参数整定matlab仿真
  • OpenLayers 加载Geoserver WMTS服务
  • 进程的信号掩码,信号集,sigprocmask函数
  • QMultiMapQHashQList使用区别
  • 中学教资考试面试回忆
  • 学车笔记 变挡
  • 图数据库的理解
  • Python打卡第51天