自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 读者写者问题与POSIX读写锁

读者写者问题描述多读者与单写者对共享资源的访问控制,要求读者间并发、写者间互斥、读者与写者互斥。采用读写锁实现时,默认读者优先,易导致写者饥饿;通过设置写者优先可缓解此问题,但可能引发读者饥饿。POSIX读写锁提供rdlock、wrlock等接口,支持阻塞与非阻塞操作,适用于高并发场景下的高效同步。

2026-10-28 11:29:01 211

原创 POSIX_自旋锁

自旋锁是一种忙等待的同步机制,适用于临界区极短的场景,可避免线程切换开销。其核心特点是获取失败时不阻塞,而是循环检测锁状态,但会持续占用CPU,可能导致资源浪费。POSIX中通过pthread_spin_init、pthread_spin_lock等接口实现,需注意锁不可重入、不可跨进程共享(除非显式设置),且销毁前必须确保无线程持有。使用不当易引发CPU过载、活锁或饥饿。相较之下,互斥锁更适用于一般场景,而自旋锁多用于操作系统内核等不允许阻塞的上下文。

2026-10-28 11:27:27 185

原创 Docker 核心指南:一文搞懂镜像分层、容器网络、数据卷与 Compose

Docker 通过容器化技术解决环境不一致导致的开发与部署难题,实现“一次构建,随处运行”。其核心概念为镜像(类)与容器(对象),共享宿主机内核,轻量高效。容器具备独立文件系统、用户空间和网络,支持单一职责设计,如分离数据库、缓存等服务。通过 docker run 启动容器,配合 -d(后台)、-it(交互)、-p(端口映射)、-v(数据卷)等参数灵活配置。镜像管理包括 docker pull 拉取、docker images 查看、docker rmi 删除,并需注意清理虚悬镜像以节省磁盘空间。整体架构强

2026-10-21 16:00:52 217

原创 Git 指南

本文系统介绍Git核心操作:通过git init或git clone创建仓库,掌握工作区、暂存区、本地与远端仓库的协作流程。重点讲解git add、commit、push、pull等命令,结合status、log、ls-files查询状态与历史。详细说明版本回退机制,包括reset --soft/mixed/hard及reflog恢复策略,并解析diff命令用于差异对比,最后涵盖文件删除的正确流程。内容涵盖从初始化到版本管理的完整实践路径。

2026-10-16 17:36:35 149

原创 八大排序算法详解以及C++实现

本文详解八大排序算法,涵盖冒泡、选择、插入、归并、快速、堆、希尔及基数排序,重点分析其时间复杂度、空间复杂度与稳定性。其中插入、冒泡、归并及基数排序为稳定排序,口诀“插帽龟,它很稳”便于记忆。附完整C++实现代码,包含优化策略(如冒泡剪枝、随机基准),适用于学习与实战参考。

2026-10-08 22:33:58 209

原创 时隔半年再看曾经写过的代码:基于POSIX条件变量的线程池

时隔半年复盘基于POSIX条件变量的线程池代码,整体结构清晰,采用单例模式管理实例,通过互斥锁与条件变量实现多生产多消费模型。核心设计包括:任务队列保护、线程池启动/停止机制、任务入队唤醒策略(按睡眠线程数选择唤醒单个或全部),并确保所有任务处理完毕后线程安全退出。代码逻辑严谨,适合初学者理解线程同步与线程池原理。

2026-09-22 22:27:03 72

原创 时隔半年再看曾经写过的代码:基于POSIX信号量的多生产多消费者模型

本文复盘了基于POSIX信号量实现的多生产多消费者循环队列模型。通过生产者信号量(_psem)与消费者信号量(_csem)同步,结合循环队列结构,确保生产者与消费者不冲突。关键在于:信号量控制资源数量,互斥锁保护多生产/多消费线程间的临界区操作,且PV操作应置于锁外以提升并发效率。代码设计清晰,体现了信号量在同步机制中的核心作用。

2026-09-21 14:46:06 110

原创 时隔半年再看曾经写过的代码:基于POSIX条件变量的多生产多消费者模型

时隔半年复盘基于条件变量的多生产多消费者模型,核心在于理解“一锁两条件变量”的设计:一把锁保证临界资源互斥,两个条件变量分别阻塞生产者与消费者,实现精准唤醒。生产/消费函数均需使用while循环判断状态,防止伪唤醒。尽管名为多生产多消费,其实现逻辑与单线程版本本质相同,因锁已天然保障线程间互斥。代码细节如唤醒时机(先信号或先解锁)不影响正确性,但需注意唤醒后线程仍需竞争锁。

2026-09-21 12:19:11 171

原创 C++11:类型推导与完美转发复盘笔记

本文主要对 C++11 中的类型推导相关知识进行一次系统复盘,重点梳理 `auto`、`decltype`、模板类型推导、引用折叠、万能引用与完美转发之间的联系。文章从模板类型推导入手,通过实际代码分析左值、右值、左值引用与右值引用在类型推导过程中的表现,并进一步理解引用折叠为什么能够让 `T&&` 同时接收左值和右值。在此基础上,继续复盘 `std::forward` 如何保持参数的值类别,以及完美转发所解决的问题。此外,结合 `auto`、`decltype`、尾置返回类型以及 `push_ba

2026-09-16 17:50:03 238

原创 MySQL_事务(MVCC机制详解)

本文主要介绍 MySQL InnoDB 存储引擎中的事务机制及其核心实现——MVCC,文章首先介绍事务的基本概念、事务的原子性、提交方式以及 `BEGIN`、`COMMIT`、`ROLLBACK`、`SAVEPOINT` 和自动提交等相关操作;随后介绍事务的四种隔离级别,并分析脏读、不可重复读、幻读等并发问题,在此基础上,文章重点深入 InnoDB 的 MVCC 机制,依次介绍 Undo Log、隐藏字段、数据版本链以及 ReadView,并结合 ReadView 的可见性判断规则,分析 RR 与

2026-09-15 22:23:22 336

原创 时隔半年再看曾经写过的代码:基于策略模式的线程安全日志模块

本文复盘基于策略模式的线程安全日志模块,通过匿名管道实现进程池。核心设计包括:Logger类结合LogMessage匿名对象与<<运算符重载,实现类型无关的日志拼接;利用unique_ptr管理可切换的日志策略(控制台/文件),支持动态切换。为保障线程安全,引入两类锁:一是保护_strategy智能指针的互斥锁,防止并发读写;二是各策略类的静态成员锁,确保多线程下输出不交错。最终采用静态锁方案,在保证安全性的同时兼顾灵活性与实现复杂度平衡。

2026-09-15 09:49:59 101 1

原创 时隔半年再看曾经的代码:基于匿名管道的进程池

本文复盘了基于匿名管道的进程池实现,通过Channel、ChannelManager与ProcessPool三类协作,完成子进程创建、任务派发与资源回收。核心机制为父进程通过轮询选择写端管道分发任务索引,子进程阻塞等待指令并执行对应任务。虽存在线程安全、信号处理、任务灵活性等不足,但有效演示了匿名管道通信与负载均衡原理,后续可引入原子操作、多路复用及动态任务模型优化。

2026-09-11 21:04:24 105 1

原创 Linux 进程间通信(IPC)机制详解:管道、FIFO 与 System V 共享内存

本文围绕 Linux 中三种常用进程间通信方案:匿名管道、命名管道(FIFO)和 System V 共享内存,结合系统调用与内核实现机制进行总结。重点说明:fork() 时文件描述符表被立即复制,而打开文件对象(struct file)通过引用计数共享;管道通信中的阻塞语义、同步特性及 SIGPIPE 的触发时机;命名管道与普通文件在行为上的异同;System V 共享内存的映射方式、生命周期管理及其在性能与安全之间的权衡。适合作为 Linux IPC 的原理复习、面试整理与工程参考。

2026-09-11 16:55:25 204 1

原创 MySQL_索引

本文系统梳理了 MySQL 索引的核心知识。首先阐述了索引的本质——一种以 B+树为主的数据结构,其设计初衷是为了减少磁盘 IO 次数、提升海量数据下的查询效率;并从磁盘扇区、InnoDB 数据页(16KB)及局部性原理的角度,解释了 MySQL 按页读取数据的底层逻辑。接着深入讲解了 B+树的结构优势(矮胖型、叶子节点双向链接),以及 InnoDB 聚簇索引(主键索引 + 二级索引回表)与 MyISAM 非聚簇索引的底层存储差异。最后详细介绍了主键索引、唯一索引、普通索引及复合索引的创建方式、使用原则与注

2026-09-08 12:19:03 193 1

原创 C/C++传统程序内存分布(代码实测)

摘要:> 本文系统梳理了 Linux x86_64 环境下 C/C++ 程序的传统内存分布,涵盖 .text、.rodata、.data、.bss、堆、共享区、栈七大核心分区,深入解析各区域的存储内容、地址增长方向及生命周期特性。文章重点归纳了 static、const 等关键字对变量内存归属的影响规则,并结合虚函数表(vtable)与虚继承相关结构的实测代码,直观验证各区域地址排布规律。同时针对 BSS 段“不占磁盘空间、加载时清零”等高频面试题提供了准确的技术解释。全文配有完整可编译运行的示例程序与

2026-09-07 23:00:43 423 1

原创 五种IO模型(详解非阻塞IO与多路转接)

高性能服务器绕不开的第一道坎,就是搞清楚一次 I/O 到底慢在哪。本文从"等待 + 拷贝"这个拆解出发,指出阻塞等待才是耗时的真正大头,由此引出五种 I/O 模型的取舍逻辑,并用"钓鱼"的例子把它们串成一条完整的认知链路。随后落地到 Linux 工程实践:从 fcntl 设置非阻塞,到多路转接三兄弟​ select → poll → epoll 的逐代演进——为什么 select 被 FD_SETSIZE 卡死、poll 用 events/revents 分离解决了什么、epoll 又是如何靠红黑树 +

2026-08-30 23:34:23 281

原创 智能指针与const

本文探讨 C++ 智能指针(`unique_ptr`/`shared_ptr`)的顶层 const 与底层 const 特性:其书写形式与裸指针不同(`const shared_ptr<int>` 对应顶层,`shared_ptr<const int>` 对应底层),但行为完全一致。文章通过可运行实验逐一验证四种 const 组合的权限,并重点解释了一个反直觉现象 —— 为何 `make_unique<int>()` 能直接构造 `unique_ptr<const int>`,答案是模板转换构造函数触发的隐

2026-08-26 23:04:54 255 1

原创 《为什么公网访问不了内网?正向代理、内网穿透与 NAT 打洞一次说清》

本文介绍了正向代理服务器、反向代理服务器、内网穿透和内网打洞四种网络技术。正向代理服务器位于客户端和目标服务器之间,用于转发和筛选报文;反向代理服务器位于服务端前,负责负载均衡和响应请求。内网穿透技术通过公网主机中转,使公网IP能访问内网主机;内网打洞则通过直接连接两端公网IP,减少中间服务器负担,提升传输效率。这些技术各具特点,适用于不同网络场景,有助于优化网络通信和数据传输。

2026-08-25 19:09:40 177

原创 C++单例模式设计详解(懒汉与饿汉)

本文介绍 C++ 中单例模式的基本概念及常见实现方式,重点分析饿汉式与懒汉式单例的设计思路、线程安全问题及对象生命周期管理。通过传统懒汉实现的多线程问题与 C++11 函数内静态变量机制,进一步理解局部静态变量的初始化特性,以及现代 C++ 中常用的线程安全懒汉单例实现方式

2026-07-18 10:37:52 260 1

原创 Linux网络编程_数据链路层MAC帧协议与ARP协议

本文介绍了Linux网络编程中数据链路层的核心协议与机制。主要内容包括:1) MAC帧协议的结构与功能,用于实现局域网内通信;2) ARP协议的工作原理,实现IP地址到MAC地址的转换;3) 局域网通信过程及ARP请求/应答机制;4) ARP欺骗攻击原理;5) NAT/NAPT技术实现内外网地址转换;6) MTU与MSS的关系及其对数据传输的影响。文章深入浅出地阐述了数据链路层如何实现相邻节点间的可靠传输,以及相关协议在网络通信中的关键作用。

2026-05-19 20:37:26 529 1

原创 Linux网络编程_网络层_ip协议

本文介绍了Linux网络编程中IP协议的核心内容。首先阐述了IP协议的基本概念和功能,包括主机、路由器、节点等术语定义,以及IP地址的网络号和主机号划分。详细解析了IP协议报头结构及各字段功能,如版本号、服务类型、生存时间等。重点讲解了IP分片机制及其实现原理,包括16位标识、3位标志和13位片偏移的作用。文章还对比了传统的IP分类划分法和现代的无类域间路由(CIDR)方案,分析了各自的优缺点。最后通过示例说明了IP地址分层设计的意义,并描述了数据在路由器间的传输过程,解释了路由器使用不同IP地址组进行通信

2026-05-13 19:49:45 542 3

原创 Linux编程_应用层_HTTP与HTTPS协议

HTTP协议报头分为请求报文和响应报文,包含方法、URI、版本、状态码等核心字段。请求方法主要有GET(获取资源)和POST(提交资源),响应状态码如200(成功)、3XX(重定向)、404(未找到)。协议通过Content-Length处理粘包,利用Connection支持长连接以减少TCP开销。Cookie技术用于解决HTTP无状态问题,包含键值对、过期时间等属性,配合Session实现用户状态保持。URI指定资源路径,浏览器访问时默认请求根目录下的index.html文件。注意不同浏览器对某些状态码(

2026-05-08 10:45:01 499 2

原创 基于系统调用的Linux网络编程——UDP与TCP

本文介绍了Linux网络编程中基于系统调用实现的UDP和TCP协议编程要点。重点阐述了套接字(socket)的概念及网络字节序转换方法,详细说明了UDP协议编程所需的系统调用接口,包括socket()、bind()、recvfrom()、sendto()等函数的使用方法及注意事项。文章还提供了UDP客户端和服务端编程的实用建议,如避免端口冲突、使用INADDR_ANY宏等,并介绍了相关网络诊断命令。这些内容为Linux系统下的网络应用开发提供了基础指导。

2026-05-07 08:46:56 408 2

原创 Linux_线程

摘要 Linux线程本质上是进程模拟的轻量级进程,共享进程资源(如虚拟地址空间、文件描述符等),但拥有独立栈结构和上下文数据。线程与进程的核心区别在于资源分配方式:进程是资源分配单位,线程是CPU调度单位。Linux采用进程模拟线程的方式实现代码复用和管理便利。虚拟内存管理以4KB页帧为单位,通过多级页表实现虚拟地址到物理地址的映射,利用page结构体管理物理内存。这种设计既保证了效率,又实现了灵活的内存管理。线程崩溃会导致整个进程崩溃,且多线程会均分进程时间片。

2026-04-11 22:38:57 531 1

原创 《深入Linux文件系统:从open()到inode,一篇讲透文件操作底层原理》

本文介绍了Linux系统调用中的文件操作函数及其原理。主要系统调用包括open()、close()、read()、write()、dup()和dup2(),详细说明了各函数的参数、返回值和使用方法。重点阐述了文件描述符(fd)的底层结构,指出每个open()调用会创建新的struct_file对象,而dup/dup2则共享同一对象。通过测试验证了文件描述符的分配规律和标准I/O的重定向原理,说明printf等函数本质是向fd=1的文件写入数据。文章还指出系统层面不区分文本/二进制模式,这种区分来自语言层面的

2026-03-17 19:59:00 398 1

原创 Linux_进程

本文系统介绍了操作系统中的进程概念及其管理机制。主要内容包括:1) 操作系统作为软硬件管理软件的基本功能;2) 进程定义(程序执行实例+PCB)及其组织方式(先描述再组织);3) Linux进程管理实践(ps/top命令、proc目录信息);4) 进程创建(fork函数)与父子进程关系;5) 进程状态(运行/就绪/阻塞/挂起等)及其底层队列实现;6) Linux特有进程状态(R/S/D/T等)的具体表现和原理。重点阐述了进程独立性、写时拷贝机制以及特殊双链表在进程管理中的应用优势,为理解操作系统进程调度提供

2026-02-06 22:50:32 690 1

原创 实现具备C++11现代特性的STL——list篇(使用shared_ptr智能指针实现,解决了循环引用问题)

本文介绍了一个使用C++11现代特性实现的STL list容器,重点解决了智能指针循环引用问题。设计采用混合shared_ptr和weak_ptr的方案,通过将_next设为shared_ptr、_prev设为weak_ptr来避免循环引用,并在析构函数中手动解环。文章详细阐述了list的构造函数、迭代器、emplace操作等实现细节,同时指出该设计虽能深入理解智能指针原理,但从性能角度并不推荐实际使用,更适合作为学习C++11特性的案例。

2026-01-18 23:00:48 1010

原创 实现具备C++11现代特性的STL——vector篇(附带简单的航空订票系统实例)

摘要 本文实现了一个具备C++11现代特性的简化版STL vector容器,重点练习了智能指针、完美转发、可变参数模板等特性。实现包括: 自定义迭代器类,支持标准迭代器操作 使用std::unique_ptr管理内存 提供多种构造函数(空容器、初始值列表、拷贝构造等) 实现移动语义和交换惯用法 支持operator[]访问和迭代器遍历 包含基本的容量管理功能(如reserve) 代码还附带了一个简单的航空订票系统示例,展示了该vector容器的实际应用。实现中注意了边界检查(使用assert)和异常安全(n

2026-01-15 22:34:14 1090 2

原创 LeetCode双指针题型总结

本文总结了双指针算法在解决数组问题中的应用。通过LeetCode 283(移动零)、27(移除元素)和1089(复写零)三道典型题目,展示了双指针技巧如何将O(n²)问题优化为O(n)。移动零和移除元素展示了双指针的基本用法:使用两个指针协同遍历数组,一个指向待处理位置,一个指向当前元素。复写零问题则展示了更复杂的逆向复写策略,通过先模拟定位再逆向操作来优化时间复杂度。文章强调双指针算法的核心在于通过指针协同移动避免嵌套循环,提升对线性数据结构的处理效率。

2025-12-17 18:24:28 945 3

原创 C++文件压缩及解压缩小程序的实现

摘要 本文介绍了一个基于Huffman树的文件压缩与解压缩小程序实现。程序采用数组方式模拟Huffman二叉树结构,实现了以下功能: 支持所有特殊字符的处理 包含文件压缩(EnCode)和解压缩(DeCode)功能 提供Huffman树和编码表的打印功能 实现特点包括: 使用vector模拟二叉树而非传统指针结构 采用小堆优化Huffman树构建过程 处理了字符统计、树构建、编码生成等完整流程 解决了中文等特殊字符的处理问题 程序可作为Huffman编码的教学示例,展示了数据压缩的基本原理和C++文件操作技

2025-12-12 10:52:51 928 2

原创 学习笔记——基础hash思想及其简单C++实现

哈希表是一种查找时间复杂度为O(1)的高效数据结构,通过哈希函数将数据映射到固定位置实现快速查询。本文介绍了哈希表的核心概念,包括哈希函数(重点讲解除留余数法)、负载因子和哈希冲突。针对冲突问题,详细阐述了开放定址法(含线性探测、二次探测)和链地址法两种解决方案。文章还通过计数排序示例说明哈希思想,并探讨了实现中的关键问题,如扩容策略、处理非整数类型键值的方法等。哈希表性能优异但需合理设计,否则可能退化为O(n)复杂度。

2025-11-23 19:45:40 1078 5

原创 make_makefile与git与cgdb——Linux三种重要开发工具学习笔记

本文介绍了Linux开发中常用的三种工具:makefile、git和cgdb,重点讲解了make与makefile的使用方法。makefile通过依赖关系和时间戳检查实现智能构建,只重新编译修改过的文件,提高开发效率。文章详细说明了makefile的基本语法,包括依赖关系定义、伪目标(.PHONY)的使用、命令执行顺序推导以及宏定义方法。通过具体示例展示了如何编写简单的makefile进行文件编译,并解释了如何通过@符号控制命令输出显示。这些工具能有效简化Linux开发流程,是开发者需要掌握的重要技能。

2025-11-21 08:52:52 1188 5

原创 C++11新增重要语法总结(二)(异常与智能指针)

本文系统梳理了C++11中异常处理与智能指针两大核心机制,旨在解决传统C++开发中的错误处理繁琐和资源管理易泄漏两大痛点。异常处理:C++异常通过try/catch/throw机制,实现了错误代码与正常逻辑的分离。关键在于异常会触发栈展开,自动销毁调用链上的局部对象。为保证资源安全,应遵循RAII原则,并注意析构函数不应抛出异常。实践中,推荐构建自定义异常体系(如继承自std::exception),以便于统一捕获和处理特定领域的错误信息。智能指针:作为RAII思想的典范,智能指针将动态内存的生命周期

2025-11-02 15:36:21 936

原创 C++11新增重要语法总结(一)(初始化列表,右值引用与移动语义,RVO与NRVO编译器优化,可变参数模板,lambda表达式,function与bind包装器等相关内容)

C++11新增语法要点总结: 列表初始化{}:统一初始化语法,支持内置类型和类对象使用{}初始化,支持多参数隐式类型转换。 initializer_list容器:轻量级只读序列容器,用于实现容器类的列表初始化功能。 右值引用(&&):允许引用右值(如字面量、临时对象),可延长右值生命周期,支持移动语义优化性能。 左/右值区分:左值可取地址,右值不能;右值引用不能直接引用左值,需用move转换。 引用类型特性:左值引用和右值引用本身都是左值,底层实现都是指针。 函数重载规则:支持基于左右值引用

2025-11-01 21:02:36 751

原创 ​​《平衡之道:红黑树的底层原理》​

红黑树学习摘要 红黑树是一种平衡搜索二叉树,通过颜色标记和旋转操作维护相对平衡。与AVL树不同,红黑树采用"相对平衡"策略,在查找效率上略逊于AVL树,但插入效率更高。红黑树遵循四条规则:1)节点非红即黑;2)根节点为黑;3)红色节点的子节点必为黑;4)每条路径的黑色节点数相同。插入操作分为两种主要情况:父节点为黑时直接插入;父节点为红时需进一步处理。处理方式包括变色和旋转,具体取决于叔父节点的情况。红黑树广泛应用于C++的set和map等容器中,是平衡树的重要实现方式。

2025-09-27 12:58:53 1001 3

原创 《高效搜索的基石:深入理解AVL树及其C++实现》

AVL树是一种平衡二叉搜索树,通过平衡因子和旋转操作保持树的平衡。文章详细介绍了AVL树的概念、节点结构、插入操作和平衡调整规则。重点讲解了插入节点后如何通过四种旋转情况(左单旋、右单旋、左右旋和右左旋)来维持树的平衡性,确保搜索效率稳定在O(log n)。关键点包括平衡因子的计算、父节点指针的使用以及不同失衡情况下的旋转处理方法。

2025-09-21 20:21:01 1142 5

原创 ​​「学习笔记」手撕二叉搜索树及了解Key_Value模型​

本文介绍了二叉搜索树的实现及其应用。主要内容包括: 二叉搜索树的基本规则和特性:遵循"左小右大"原则,支持高效查找但可能退化; 实现细节:节点类定义、四大函数实现(构造、拷贝、赋值、析构)、插入、查找等功能; 删除操作重点:处理叶子节点、单子树节点和双子树节点的不同情况,特别是双子树时需寻找替代节点; 时间复杂度分析:查找效率平均O(logn),最差O(n)。 文章还提及了二叉搜索树的局限性,为后续优化为AVL树、红黑树等平衡二叉树做铺垫。

2025-09-20 18:36:08 948 6

原创 一文搞懂C++运行时多态:virtual、override、final与虚函数表

文章摘要: C++运行时多态通过虚函数实现,允许派生类重写基类函数,实现同一接口不同行为。关键要点包括:1) 使用virtual声明虚函数;2) 通过基类指针/引用调用;3) 函数重写需满足"三相同"(函数名、参数列表、返回值类型);4) 协变规则允许返回值类型不同但需保持继承关系。多态的核心在于虚函数表机制,运行时根据对象实际类型调用对应函数,实现动态绑定。

2025-09-09 21:38:52 434 5

原创 C++之继承

C++继承机制允许子类复用父类代码,减少冗余。通过三种继承方式(public、protected、private)控制成员访问权限,其中public继承最常用。子类内存布局先将父类成员作为整体存储,再添加子类成员。继承使代码能更好表示现实关系(如动物-猫狗),是面向对象编程的重要特性。

2025-09-06 18:11:27 1209 5

原创 C++之类和对象进阶篇

本文介绍了C++类和对象的进阶语法,重点讲解了类的四大函数:构造函数、析构函数、拷贝构造函数和拷贝赋值运算符重载函数。文章详细说明了构造函数的自动生成规则、初始化行为和使用场景,特别强调了对于动态内存分配的成员变量必须自定义构造函数。在析构函数部分,阐述了其自动调用机制和资源释放的重要性。此外还提及了类内初始化、初始化列表、友元等概念,为后续学习类和对象的高级特性奠定基础。示例代码展示了不同场景下的构造函数和析构函数实现方式,帮助读者理解这些关键概念的实际应用。

2025-08-17 14:24:46 693 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除