数组与字符串:数组
核心要点速览 数组名:本质是首元素地址,仅 3 种场景不退化(sizeof、&数组名、decltype) 数组传参:一维退化为指针(丢失长度),二维必须指定第二维长度 C 风格字符串:以'\0'结尾的字符数组,strlen与sizeof计算逻辑不同 数组 vs vector:数组编译期定长、手动管理;vector 动态扩容、自动管理 一、数组名与指针1. 特性数组名 通常等价于首元素地址,仅 3 种场景保留数组类型特性(不退化)。 2. 数组名不退化的 3 种场景 sizeof(数组名):计算整个数组的字节总大小(非指针大小) &数组名:获取指向 “整个数组” 的指针(类型为数组类型(*)[长度]) decltype(数组名):推导为数组类型(如decltype(arr)为int[5]) 3. 数组初始化(C++11+) 聚合初始化简化:可省略等号,多维数组支持部分初始化 12int arr[] {1,2,3}; // 等价于 int arr[] = {1,2,3}int mat[2...
面向对象编程OOP:继承与多态
核心要点速览 继承:解决代码复用与扩展,核心是派生类获取基类成员;继承方式分 public/protected/private,构造先父后子、析构先子后父 多态:解决接口统一与动态行为,核心是基类指针 / 引用指向派生类对象,调用虚函数触发动态绑定 机制:虚函数(virtual)、纯虚函数(抽象类)、虚函数表(vtable)+ 虚指针(vptr)、虚析构(避免资源泄漏) 对比:重写(Override)vs 重载(Overload)vs 隐藏(Hide) 一、继承:代码复用与层次化设计继承是派生类从基类获取成员(属性 + 行为)的机制,核心是 “基于已有类扩展功能”。 1. 继承方式与成员访问权限继承方式决定基类成员在派生类中的访问权限,常用public继承(其他方式极少用)。 基类成员权限 public 继承(常用) protected 继承 private 继承 public 派生类 public 派生类 protected 派生类 private protected 派生类 protected 派生类 protected 派生...
数组与字符串:字符串
核心要点速览 C 风格字符串:以'\0'结尾的字符数组,依赖cstring库函数,无安全检查(易溢出) C++ std::string:动态管理、安全便捷,支持 SSO(小字符串优化),提供丰富成员方法 拷贝关键:C 语言strcpy不安全、strncpy需补'\0'、strlcpy安全非标准;C++ 直接用拷贝构造 / 赋值 /assign 一、C 风格字符串(char[])本质是以'\0'(空字符)为结束标记的字符数组,'\0'是字符串终止的核心标识。 1. 初始化(易错)1234567// 正确写法char str1[] = "hello"; // 自动添加'\0',数组长度6(h e l l o \0)char str2[] = {'h','i','\0'}; // 手动添加'\0',长度3char str3[10] = "hi&qu...
内存管理:内存分区
核心要点速览 五大分区:栈(临时空间,自动管理)、堆(动态空间,手动管理)、全局 / 静态区(持久空间)、常量存储区(只读)、代码区(指令存储) 关键点:各分区存储内容 / 生命周期 / 分配方式、栈与堆的区别、const 变量存储位置、线程局部存储特性 补充:全局 / 局部 / 静态局部 / 静态全局变量的存储、生命周期及作用域差异 一、五大内存分区1. 栈(stack):函数调用的临时空间 存储内容:函数内局部变量(非 static)、函数参数、返回地址(调用后需返回的下一条指令地址)、寄存器上下文(函数调用时保存的 CPU 寄存器状态) 生命周期:随函数调用创建,函数执行结束后自动释放(无需手动干预) 特点: 分配效率:编译器通过移动栈顶指针(SP 寄存器)完成分配 / 释放,效率极高 内存特性:地址连续(栈帧结构),生长方向向下(从高地址向低地址扩展) 大小限制:默认固定(通常 1-8MB,可通过编译器 / 操作系统配置),超出则触发栈溢出 初始化:未初始化的局部变量值为 “垃圾值”(随机...
面向对象编程OOP:类与对象
核心要点速览 访问控制:public(接口)、private(实现)、protected(继承) const 成员:const 成员变量需初始化列表初始化;const 成员函数不可修改成员变量 static 成员:静态成员变量类共享、类外初始化;静态成员函数无 this 指针、仅访问静态成员 构造函数:可重载、非虚函数;含默认 / 带参 / 拷贝 / 移动构造 析构函数:不可重载;基类需设为虚函数避免资源泄漏 类大小:仅取决于非静态数据成员,遵循内存对齐 一、基本概念 类:抽象的数据类型模板,定义对象的属性(数据成员)和行为(成员函数)。 对象:类的具体实例,占用实际内存,拥有类定义的属性和行为。 二、核心特性:封装核心是 “隐藏实现细节,暴露公共接口”,通过访问控制符实现。 访问控制符 可访问范围 作用 public 类内、类外、派生类 暴露接口,供外部调用 private 仅类内和友元 隐藏数据成员和内部实现 protected 类内、友元、派生类(类外不可访问) 为继承预留访问权限 封装意义:保障数据安全、提升...
内存管理:动态内存
核心要点速览 动态内存:运行时手动分配,需手动释放(否则泄漏);new/delete 自动调用构造 / 析构,需与 new []/delete [] 严格匹配 智能指针(C++11+,<memory>):RAII 机制自动管理内存,unique_ptr(独占)、shared_ptr(共享,引用计数)、weak_ptr(解循环引用) 常见问题:内存泄漏(未释放)、野指针(未初始化)、悬空指针(指向已释放内存) 一、动态内存的分配与释放核心是 “分配 - 使用 - 释放” 闭环,C++ 推荐用 new/delete,需严格匹配使用。 1. C vs C++ 分配释放方式对比 对比维度 C(malloc/free) C++(new/delete) 类型安全 返回void*,需手动强转(不安全) 返回对应类型指针(无需转换,安全) 构造 / 析构 不调用(仅操作内存) 自动调用构造(new)/ 析构(delete) 数组支持 需手动计算总大小(n*sizeof(T)) 直接n...
文件IO:二进制与文本处理
核心要点速览 区别:文本处理基于字符编码(有格式转换),二进制处理基于原始字节流(无转换)。 差异:文本可人类直接阅读,二进制不可;文本有换行符 / 编码转换,二进制无;文本适合日志 / 配置,二进制适合图片 / 结构体。 操作:文本用>>/<</getline(),二进制用read()/write()+ios::binary。 一、区别 维度 文本处理(Text Mode) 二进制处理(Binary Mode) 存储形式 字符编码(如 ASCII、UTF-8),每个字符对应编码值。 数据原始二进制(如 int 的 4 字节、结构体的连续字节)。 格式转换 自动处理换行符(Windows:\n→\r\n;Linux:不转换),部分编码可能转换(如宽字符)。 无任何转换,字节数据原样读写(\n就是 0x0A,\r就是 0x0D)。 可读性 人类可直接阅读(如记事本打开txt文件)。 人类不可读(打开为乱码,需程序解析)。 效率 读写需编码 / 解码,效率较低。 直...
内存管理:RAII
核心要点速览 设计思想:资源获取与对象初始化绑定,资源释放与对象析构绑定(构造拿资源,析构放资源) 实现:封装资源为类成员,构造获取、析构释放,可选禁止拷贝 典型应用:智能指针、互斥锁、文件句柄、网络连接 优势:自动释放资源、异常安全、简化代码、保障资源独占 一、设计思想:资源对象的生命周期绑定RAII(Resource Acquisition Is Initialization)的本质是用对象生命周期管理资源: 对象构造时:自动获取资源(如分配内存、打开文件、加锁),确保资源获取成功后对象才有效; 对象析构时:自动释放资源(如释放内存、关闭文件、解锁),无论对象正常退出还是因异常销毁,析构函数都会执行。 二、实现原理 封装资源:定义类时,将待管理的资源(如指针、文件句柄、锁对象)声明为私有成员,禁止外部直接访问,确保资源只能通过类的接口管控; 强制获取资源:在构造函数中编写资源获取逻辑(如接收new的内存地址、调用fopen打开文件),若资源获取失败(如内存不足),直接抛出异常,避免构造 “无效对象”; 自动释放资源:在析构函数中编写资源释放逻辑(如delete内存、...
文件IO:文件流
核心要点速览 本质区别:文本基于字符编码(含格式 / 编码转换),二进制基于原始字节流(无任何转换); 差异:可读性(文本可读 / 二进制不可读)、效率(二进制 > 文本)、适用场景(文本→日志 / 配置,二进制→图片 / 结构体); 操作:文本用>>/<</getline(),二进制用read()/write()+ios::binary; 补充:本质区别对比、结构体二进制读写禁忌、场景选择依据、跨平台兼容原理。 一、本质区别:从存储到操作的差异文本处理和二进制处理的所有差异,根源在于数据存储形式和读写时是否进行转换 对比维度 文本处理(Text Mode) 二进制处理(Binary Mode) 存储形式 以字符编码(ASCII/UTF-8 等)存储,数据需转换为字符编码(如int 123→字符串 “123”) 以原始二进制存储,直接复刻内存字节布局(如int 123→0x7B 0x00 0x00 0x00) 读写转换 自动处理换行符(Windows:...
文件IO:文件操作
核心要点速览 文本文件:>>/<<、getline()读写,自动转换换行符,适配人类可读数据(日志、配置)。 二进制文件:read()/write()操作原始字节流,适配非文本数据(图片、结构体),效率更高。 文件指针:seekg()/seekp()定位、tellg()/tellp()获取位置,支持随机访问。 关键:模式区分、读写混用问题、字节对齐、缓冲区刷新、跨平台兼容核心点。 一、文本文件:读写逻辑与易错文本文件以字符编码(ASCII/UTF-8)存储,读写时自动处理换行符转换(如 Windows 下\n→\r\n),核心关注 “读写一致性” 与 “缓冲区问题”。 1. 读写方法(1)写入操作(ofstream)12345ofstream ofs("text.txt", ios::out | ios::app); // 追加模式if (!ofs) return -1; // 检查打开失败ofs << "姓名:Tom" << endl; ...

