- 博客(77)
- 收藏
- 关注
原创 Qt开发第四章——窗口
本文介绍了Qt中GUI编程的几种核心组件实现方法:1. 菜单栏通过QMenuBar类实现,支持多级菜单和菜单项绑定槽函数实现文件操作;2. 工具栏使用addToolBar()创建,可集成菜单功能并设置停靠位置;3. 状态栏分实时/永久/进度三种信息显示方式;4. 对话框分为模态(阻塞式exec())和非模态(非阻塞show()),后者需创建在堆内存。文中提供了完整的代码示例,包括菜单文件读写、工具栏布局、状态栏消息显示以及自定义对话框的实现方法,并配有效果图示,展示了Qt框架下GUI组件的基本使用模式。
2026-08-04 17:44:17
762
原创 QT开发第三章——常用控件
本文介绍了Qt中QWidget控件的核心属性及常用控件功能。主要内容包括:1)控件基础属性如enable、geometry、move、透明度、光标样式等;2)按钮类控件(PushButton、RadioButton、CheckBox)的使用;3)显示类控件(Label、进度条、日历)的设置与功能实现;4)输入类控件(LineEdit、ComboBox、SpinBox)的应用;5)多元素控件(ListWidget、TableWidget)和容器类控件(GroupBox、TabWidget)的布局管理。文章通过
2026-07-29 08:45:18
788
1
原创 基础知识之 结构体内存对齐,联合体,枚举,大小端
本文介绍了C/C++中三种复合数据类型的特点及应用: 结构体:作为自定义类型,需注意内存对齐规则(成员偏移量为对齐值整数倍,默认按最大成员对齐),合理排序成员可节省空间。示例展示了通过调整顺序将结构体大小优化为8字节。 联合体:所有成员共享内存空间,大小为最大成员尺寸,适用于互斥数据存储(如同时只需int或float的场景),比结构体更节省内存。 枚举:本质是具名整型常量集合,默认从0递增,C++11支持指定底层类型(如uint8_t)。另通过int转char*检测大小端模式,小端机器低地址存数据低位。
2026-07-21 14:19:20
913
1
原创 QT如何将代码打包成exe发给别人直接用?
摘要: 将Qt程序打包为可独立运行的exe需三个步骤:1. Release编译(避免Debug版的调试信息);2. 使用windeployqt拷贝依赖(通过Qt命令行工具自动复制所需库文件);3. 打包成单exe(推荐工具Enigma Virtual Box,添加依赖文件夹后生成便携文件)。关键注意点:需切换Release模式减小体积,依赖文件需完整打包。工具官网及操作截图已提供,确保跨平台兼容性。
2026-06-09 16:39:41
992
原创 QT开发第二章——信号和槽
本文介绍了Qt框架中的信号和槽机制。信号本质上是用户与控件交互产生的事件(如点击按钮),以函数形式呈现;槽则是响应信号的函数,需要声明和定义。通过connect函数实现信号与槽的连接,支持一对一、一对多、多对一等关联方式。文章详细说明了如何利用Qt Creator生成槽代码、自定义信号槽、带参信号槽的使用规范,以及通过disconnect断开连接。还介绍了Lambda表达式在槽函数中的应用。信号槽机制的优势在于低耦合性,但效率略低于回调函数,适用于需要灵活事件处理的场景。
2026-05-30 23:27:19
842
1
原创 【Linux】数据链路层
本文主要介绍了计算机网络中数据链路层、IP分片、ARP协议、DNS解析以及ICMP协议等关键概念。数据链路层通过MAC地址实现相邻节点通信,IP分片因MTU限制需分片传输但会增加丢包风险。ARP协议建立IP与MAC地址映射,DNS将域名转换为IP地址。ICMP协议检测网络连通性,通知传输层丢包情况。文章还简述了浏览器访问URL的过程,包括DNS查询、TCP握手、HTTP请求响应等步骤。这些协议共同构成了网络通信的基础架构,确保数据可靠传输。
2026-04-18 19:38:22
1106
5
原创 【Linux】重中之重!TCP协议
TCP协议摘要: TCP是传输层协议,通过确认应答(ACK)、超时重传等机制保证可靠性。三次握手建立连接(SYN+ACK),四次挥手断开连接(FIN+ACK)。流量控制通过滑动窗口动态调整发送速率,避免接收缓冲区溢出。协议头包含16位端口号、序号、窗口大小等字段,支持全双工通信。主动关闭方需等待2MSL(TIME_WAIT状态)确保数据消散。服务器通过listen队列管理连接,accept从全连接队列获取已建立的连接。滑动窗口机制允许批量发送数据包,提升传输效率。TCP通过序号、校验和等设计实现数据有序、可
2026-04-05 23:59:44
2779
44
原创 【Linux】网络之http协议
本文介绍了URL和HTTP协议的基本概念及格式。URL中的特殊字符会被自动转义,如"+"转为"%2b"。HTTP协议包含请求和响应两种格式,请求由请求行、报头、空行和正文组成,响应格式类似。常用方法为GET和POST,常见状态码包括200、404、403等。文章还提供了模拟HTTP服务器的C++代码实现,包含Socket类和HttpServer类的封装,展示了如何处理HTTP请求和响应。
2026-03-23 20:53:23
4202
43
原创 【Linux】网络套接字_socket
摘要:本文介绍了IP协议的基本概念,重点对比了IPv4地址(32位整数)与MAC地址的区别:IP地址用于全局路径规划(如"辽宁到云南"),在网络通信中保持不变;MAC地址则在每次跨越局域网时被重新封装(如"河北到山西")。同时阐述了网络套接字的组成(IP+端口号),端口号的传输层作用及其与进程ID的区别。此外,解释了网络字节序的大端规则及转换函数(htons/htonl等),并提供了IP地址字符串与整数相互转换的方法。最后简要说明了客户端与服务器的端口号分配机制。
2026-03-16 18:56:41
1288
8
原创 【Linux】网络基础(一)
摘要 本文系统介绍了计算机网络的发展历程和协议体系。从计算机网络的演变过程切入,阐述了从独立模式到网络互联,再到局域网(LAN)和广域网(WAN)的发展阶段。重点讲解了网络协议的概念,通过协议分层的思想,详细说明了OSI七层模型和TCP/IP五层(四层)协议模型。文章深入分析了网络传输的基本流程,包括数据包的封装与解包机制,以及MAC地址在网络通信中的作用。最后,介绍了局域网中数据传输的特点和交换机的工作原理,包括碰撞域的划分机制。全文系统性地呈现了计算机网络的基础知识体系。
2026-03-09 13:17:28
4366
15
原创 【Linux】线程之信号量+线程池+封装线程(六)
本文摘要: 生产消费模型高效性分析:通过多线程同步生产和加工数据实现高效,关键在于同步处理而非单纯队列操作。 信号量机制详解:信号量作为计数器控制资源访问,具有原子性操作特性,与条件变量在同步方式、锁需求等方面存在差异。 POSIX信号量实现:介绍初始化、销毁、P/V操作等接口,展示其在循环队列中的应用案例,解决空满判断问题。 线程池实现原理:基于生产消费模型,主线程生产任务,工作线程消费任务,包含线程管理、任务队列同步等核心机制。 代码实践:提供循环队列和线程池的完整C++实现,演示信号量和线程同步的实际
2026-03-08 13:36:23
1133
5
原创 【Linux】多线程之单例模式(七)
文章摘要: 本文介绍了单例模式的两种实现方式——懒汉模式和饿汉模式。懒汉模式通过延时加载优化服务器启动速度,仅在需要时分配内存;饿汉模式则在程序启动时立即初始化,可能影响性能。文章通过代码示例展示了两种模式的实现,并针对懒汉模式的多线程安全问题,提出了双重检查锁机制。最后,以线程池改造为例,说明单例模式在实际开发中的应用。
2026-03-08 13:35:55
933
8
原创 【Linux】线程之同步(五)
文章摘要: 本文主要讨论了多线程编程中的死锁问题和线程同步机制。死锁产生的四个必要条件包括互斥、请求保持、不剥夺和循环阻塞,可通过加锁顺序一致、避免锁未释放等方式避免。线程同步通过条件变量实现,pthread_cond_wait()会自动释放锁并等待唤醒。生产者消费者模型通过阻塞队列解耦生产消费过程,使用互斥锁和条件变量保证线程安全。文中给出了阻塞队列的具体实现代码,展示了生产者和消费者线程如何安全地操作共享队列。该模型能有效处理忙闲不均问题,提高系统效率。
2026-02-26 14:31:14
1253
12
原创 【Linux】线程之互斥(四)
本文介绍了线程互斥的相关概念与实现方法。主要内容包括: 互斥背景概念:解释了临界资源、临界区、互斥和原子性等基本概念。临界资源是多线程共享的资源,临界区是访问临界资源的代码段,互斥确保同一时间只有一个线程访问临界区。 互斥量接口:介绍了互斥量的初始化(静态分配和动态分配两种方式)以及加锁解锁的函数接口。 实例演示:通过一个抢票系统的代码示例,展示了如何使用互斥量保护临界区,并讨论了两种让线程共享同一把锁的方法(通过类传递锁或定义全局锁)。 实现原理:分析了锁的底层实现机制,说明锁操作必须具有原子性,通常通过
2026-02-26 14:30:28
1149
16
原创 【Linux】线程的同步与互斥(三)
本文介绍了多线程编程的实现与相关概念。首先展示了一个创建多线程的C++示例代码,演示了线程的创建、运行和等待过程。文章重点讨论了线程的栈结构特性,指出虽然每个线程有自己的栈,但线程间可以互相访问这些栈空间。同时介绍了线程局部存储技术(__thread)来创建线程私有变量。此外,还讲解了线程终止的三种方式:取消线程、自我终止和return返回。最后讨论了线程等待(pthread_join)和线程分离(pthread_detach)的概念,并提供了一个多线程抢票的示例代码片段,展示了多线程并发访问共享资源的情况
2026-02-20 20:57:15
1427
7
原创 【Linux】线程控制(二)
Linux系统通过轻量级进程(LWP)模拟线程,用户线程由pthread库封装实现。线程共享进程资源,拥有独立线程ID(LWP)和用户级ID(pthread_t)。示例代码展示了线程创建、共享变量操作和线程间通信,通过Request/Response类传递复杂数据。线程库维护线程属性,存在于共享区。C++11也提供了原生线程支持。Linux线程本质是用户级线程与内核LWP的结合,实现多任务并发执行。
2026-02-20 20:56:21
1141
13
原创 【Linux】线程概念(一)
本文深入解析了Linux系统中的线程概念及其实现原理。首先指出线程本质上是进程的执行分支,多个PCB可共享同一地址空间,每个PCB加上部分地址空间构成线程。文章重新定义了线程与进程的关系:线程是操作系统调度的基本单位,进程则是资源分配的基本实体。重点剖析了页表结构和工作原理,解释了32位系统采用二级页表机制的原因及其空间效率。通过对比线程与进程的切换过程,阐明了线程轻量化的优势,包括创建/释放开销小、切换时缓存命中率高。最后总结了线程的优缺点,强调其高效性但同时也存在健壮性风险。文章还提及线程共享进程资源的
2026-02-08 15:26:57
1718
15
原创 【Linux】进程信号之捕捉(三)
信号捕捉与处理机制 信号捕捉发生在从内核态返回到用户态时。操作系统通过时钟中断频繁进入内核态检查信号,匹配handler表后返回用户态处理信号,再通过系统调用返回内核态继续执行。 内存分为用户态(1-3G)和内核态(3-4G),内核页表共享而用户页表独立。CPU通过ecs寄存器标志当前状态(0内核态,3用户态)。 信号处理时,pending标志会在处理前清零,并自动阻塞当前信号防止嵌套调用。使用sigaction可指定处理时阻塞的其他信号(通过sa_mask)。 关键概念 可重入函数:不同执行流调用同一函数
2026-02-08 15:26:24
1289
5
原创 【Linux】进程信号的保存(二)
摘要 信号保存机制是进程处理异步事件的关键。当信号产生后,操作系统会将其发送给进程,但由于进程可能正在处理其他任务,信号不会立即被处理,从而形成时间窗口。信号处理涉及三个核心概念:递达(实际处理)、未决(信号产生到处理之间的状态)和阻塞(阻止信号递达)。内核通过三张表(block、pending、handler)管理信号状态,其中block表控制信号阻塞,pending表记录未决信号,handler表存储信号处理函数指针。信号阻塞与忽略不同,阻塞是阻止递达,忽略是递达后的处理方式之一。实验代码展示了信号阻塞
2026-01-27 20:03:09
930
20
原创 【Linux】进程信号的产生(一)
本文介绍了Linux信号机制的基本原理和处理方式。信号是进程间通信的一种方式,由操作系统发送给进程,处理方式包括默认、忽略和自定义三种。信号产生来源包括键盘组合键、kill命令、系统调用(如kill、raise、abort)以及硬件异常。进程必须能够识别和处理信号,但处理时机可能延迟。文章通过代码示例展示了如何自定义信号处理函数,并解释了键盘输入、前后台进程、硬件中断等底层机制。同时指出某些信号(如9号)无法被捕捉,以及异常信号(如除0错误)会导致死循环的原因。信号处理体现了操作系统的异步特性。
2026-01-27 20:02:21
1614
15
原创 【Linux】零基础学习命名管道-共享内存
命名管道和共享内存是两种进程间通信方式。命名管道通过文件系统中的管道文件实现无关进程通信,数据存储在内存缓冲区而非磁盘。共享内存直接在物理内存开辟区域供多进程访问,具有最高通信效率但需自行处理同步问题。文中演示了命令行创建管道、mkfifo函数实现通信,以及共享内存的创建、关联和控制方法,并指出共享内存生命周期随内核持续,需要手动释放。两种方式各有特点:命名管道适合简单通信,共享内存适合高性能场景但需额外同步机制。
2026-01-21 15:07:02
1647
12
原创 【Linux】进程间通信之匿名管道
摘要 进程间通信需要共享资源,管道作为一种内存级通信方式,通过文件描述符实现不同进程间的数据流通。匿名管道利用fork创建父子进程,通过pipe系统调用创建内存缓冲区,实现单向字节流通信。管道具有64KB大小限制,支持原子写入(最大4KB),并具有五大特征:血缘关系进程通信、单向性、进程协同、面向字节流和基于内核缓冲区。典型应用如Linux命令中的"|"管道符,实现进程间数据传递。管道通信需注意四种边界情况,如读写端关闭时的不同处理机制。
2026-01-11 21:55:24
2129
19
原创 【Linux】零基础深入学习动静态库+深入学习地址
本文介绍了C/C++中静态库和动态库的实现原理及使用方法。静态库通过将.o文件打包成.a文件,在编译时链接到可执行程序中;动态库则将.o文件打包成.so文件,程序运行时才链接。静态库命名遵循lib+库名+.a格式,使用ar工具打包;动态库需要-fPIC选项生成位置无关代码。动态库共享机制通过内存映射实现,多个进程可共享同一库代码。文章还详细说明了库的编译命令、路径设置问题及解决方法(如将库复制到系统目录),并深入分析了动态库加载原理和地址映射机制,包括虚拟地址到物理地址的转换过程。
2026-01-02 16:24:12
1986
26
原创 【Linux】深入理解软硬链接
本文介绍了Linux系统中的软链接和硬链接。软链接通过ln -s命令创建,相当于快捷方式,具有独立inode,删除源文件会导致链接失效。硬链接通过ln命令创建,与源文件共享inode,删除文件仅减少引用计数。软链接常用于简化命令路径(如将可执行文件链接到系统路径),硬链接则用于路径定位和目录切换。目录文件默认包含.和..两个硬链接,分别指向当前和上级目录,但禁止手动创建目录硬链接以避免路径死循环问题。两种链接机制各具特点,适用于不同场景。
2025-12-28 16:41:17
1927
20
原创 【Linux】必看!!!深入理解文件系统(二)
本文介绍了Linux文件系统的基本原理和磁盘存储机制。文件由内容(数据块)和属性(inode)组成,分别存储在磁盘不同位置。磁盘通过CHS和LBA两种寻址方式定位扇区,文件系统采用ext2结构管理分区。重点阐述了inode的作用(存储文件属性)和文件存储的多级索引结构(直接、一级、二级、三级索引)。目录文件保存文件名与inode的映射关系。文章还解释了进程访问文件的流程、内存管理机制(页框/页帧)以及页缓存技术(通过基数树快速定位文件缓存页)。最后说明了文件删除只需修改bitmap而非实际擦除数据的特点。
2025-12-20 21:50:44
1750
9
原创 【Linux】零基础深入学习linux文件系统(一)
本文介绍了C语言文件操作函数和系统接口的基本使用。主要内容包括: C语言文件读写函数(fopen/fwrite/fread)的使用示例 系统接口open/read/write/lseek的实现原理和使用方法 文件描述符的分配规则和本质(PCB中的数组下标) 重定向的实现原理(通过关闭标准文件描述符) 缓冲区的三种刷新模式及其对fork()行为的影响 关键点:C语言I/O函数封装了系统调用,文件描述符本质是数组索引,重定向通过修改文件描述符实现,缓冲区行为影响输出结果。
2025-11-30 22:43:30
2471
14
原创 【Linux】深入理解进程(五)(进程终止,进程等待,进程替换,实现shell)
本文探讨了进程终止与等待的相关机制。首先解释了main函数返回值的作用,0表示成功,非0值表示错误,返回值由父进程接收。介绍了Linux中查看退出码的$?指令,并通过代码示例演示了不同错误情况下的退出码。 详细分析了进程退出的三种场景:正常结束(正确/错误)和异常终止。重点讲解了进程等待的必要性,包括wait和waitpid两种方法:wait会阻塞父进程,waitpid支持非阻塞操作。文章通过代码展示了如何使用这些系统调用来回收子进程资源并获取退出状态。 还介绍了exit和_exit函数的区别,前者会刷新缓
2025-11-25 17:03:30
881
25
原创 【Linux】深入理解进程(四)(进程地址空间)
本文探讨了进程地址空间与虚拟地址的概念。通过代码示例展示了静态变量和全局变量存储在同一区域,并发现父子进程相同虚拟地址对应不同物理地址的现象,说明虚拟地址不是物理地址。文章解释了虚拟地址空间由内核数据结构mm_struct和页表管理,每个进程拥有独立的地址空间。进程独立性通过内核数据结构创建和代码加载实现,页表权限设置能保护只读区域并支持惰性加载。虚拟地址的作用包括统一内存视角、物理内存访问保护以及解耦进程和内存管理。
2025-11-16 21:30:38
1308
11
原创 【Linux】深入理解进程(三)(环境变量)
本文介绍了环境变量的概念及其在操作系统中的应用。环境变量是操作系统运行环境的参数,具有全局属性,可被子进程继承。PATH变量决定了指令搜索路径,解释了为何某些程序可直接运行而自定义程序需要路径前缀。文章还探讨了HOME、USER等常见环境变量,并介绍相关操作命令如echo、export、env等。通过代码示例展示了如何通过main函数参数和环境变量表获取环境变量,以及使用getenv系统调用。最后区分了内建命令和常规命令,说明内建命令(如cd)必须直接影响父进程而非创建子进程的原因。
2025-11-02 21:07:35
1878
13
原创 【Linux】深入理解进程(二)(fork,进程状态)
本文介绍了进程管理的核心概念:1)fork系统调用会创建子进程,父子进程共享代码但数据写时拷贝,通过返回值区分执行流;2)进程状态包括运行(R)、睡眠(S)、磁盘休眠(D)、停止(T)和死亡(X),重点分析了僵尸进程(Z状态)和孤儿进程的危害及产生原因;3)进程优先级PRI和nice值调整机制,解释了进程的竞争性、独立性及并发的实现原理;4)通过CPU寄存器上下文切换机制,阐述了进程并发执行时如何保存和恢复现场。这些概念是理解操作系统进程管理的基础。
2025-10-23 08:37:23
1495
27
原创 【Linux】深入理解进程(一)(冯诺依曼,操作系统,PCB)
本文摘要: 冯诺依曼结构是现代计算机的基础架构,由存储器(内存)、输入输出设备和CPU(运算器+控制器)组成。内存作为硬件级缓存处于核心地位,协调不同设备间的速度差异。操作系统是管理软硬件资源的软件,通过系统调用接口保障数据安全。进程是正在运行的程序,由PCB(Linux中为task_struct)描述其属性,并与代码数据共同构成。文章还介绍了查看进程的方法(/proc目录和ps命令)及系统调用获取进程ID的方式(getpid/getppid),并解释了缓存机制对程序输出的影响。
2025-10-20 11:17:54
1963
30
原创 【Linux】零基础学会linux环境基础开发工具使用(yum,vim,makefile,gdb)
本文将介绍Linux系统下的常用开发工具,包括软件包管理器yum、编译器vim/gcc/g++、构建工具Makefile以及调试器gdb的使用方法。主要内容涵盖: yum软件包管理器的工作原理和使用,包括安装(gcc/lrzsz/sl/cowsay)和卸载软件包的操作命令; vim编辑器的三种模式切换和常用命令操作,如光标移动、复制粘贴等; gcc/g++编译器的四步编译过程(预处理、编译、汇编、链接)及静态/动态库的区别; Makefile自动化构建工具的基本语法和原理,包括依赖关系和伪目标的使用; gd
2025-10-16 00:46:55
2372
37
原创 【Linux】零基础学会Linux之权限
Linux文件权限系统详解:文件类型分为目录(d)、普通文件(-)等,访问者分为所有者(u)、所属组(g)和其他人(o)。基本权限包括读(r)、写(w)和执行(x),分别对应不同操作权限。权限值可用3位八进制表示(如664)。修改权限使用chmod命令,更改所有者/组使用chown/chgrp。目录权限需特别注意:无x权限无法进入,无r权限无法查看内容。通过设置粘滞位(+t)可防止非文件所有者删除他人文件,保障目录安全。
2025-10-09 03:20:58
2601
41
原创 一文学会《C++》进阶系列之C++11
C++11引入了统一列表初始化,通过花括号{}语法可以初始化数组、结构体、内置类型和自定义类型对象,并支持在new操作符中使用。新增的std::initializer_list类型使容器初始化更加简便,允许使用列表语法构造和赋值容器。右值引用弥补了左值引用无法高效处理临时对象的缺陷,通过移动构造和移动赋值避免了深拷贝开销。右值引用只能绑定右值或move后的左值,而const左值引用可以同时绑定左值和右值。这些特性显著提升了C++在资源管理和性能优化方面的能力。
2025-10-05 15:53:24
2028
27
原创 一文学会《C++》进阶系列之哈希(包括位图布隆过滤器)
文章摘要:C++11引入了unordered系列关联容器(unordered_map、unordered_set等),其底层采用哈希结构实现,查询效率可达O(1)。与红黑树实现的map/set相比,unordered系列容器通过哈希值直接定位元素,但遍历效率较低。文章重点介绍了unordered_map的特性(键值唯一、无序存储、哈希桶机制)和常用接口(构造、容量查询、元素访问[]操作符等),并对比了哈希结构与顺序结构/平衡树的性能差异,指出哈希结构通过减少关键码比较次数实现高效查询。(149字)
2025-09-21 23:55:00
1958
18
原创 一文学会《C++》进阶 二叉搜索树,AVL树,红黑树
二叉搜索树与AVL树摘要 二叉搜索树(BST)是一种有序二叉树,满足左子树小于根节点、右子树大于根节点的特性。其基本操作包括查找(O(h)复杂度)、插入和删除(需处理四种情况)。BST在数据有序时会退化成链表,效率降低。 AVL树是自平衡二叉搜索树,通过平衡因子(左右子树高度差≤1)保持平衡。插入节点后需调整平衡因子,不平衡时通过四种旋转操作恢复平衡:左单旋(右右失衡)、右单旋(左左失衡)、左右双旋(左右失衡)和右左双旋(右左失衡)。AVL树保证了O(log n)的查询效率,适合动态数据管理。
2025-09-09 23:59:56
1965
19
原创 这一文让你学会《C++》进阶之 set与map应用
本文介绍了C++中的关联式容器,主要包括set、map、multiset和multimap。与序列式容器不同,关联式容器存储的是<key,value>键值对,检索效率更高。文章详细讲解了键值对pair的结构定义,并重点介绍了set和map的特性与使用方法:set存储唯一值且不可修改,map支持下标访问;multiset和multimap则允许键值重复。最后通过两个编程例题(前K个高频单词和单词识别问题)展示了关联式容器的实际应用,包括自定义排序规则等技巧。
2025-09-01 00:57:13
2378
20
原创 一文理解并学会《C++》三大特性之多态
文章摘要:本文详细讲解了C++多态的概念、实现和应用。首先通过公交卡示例形象说明多态现象,指出多态是通过基类指针/引用调用虚函数时产生的不同行为。重点分析了虚函数重写规则、override/final关键字、虚函数表机制等核心原理,比较了重载/重写/重定义的区别,并介绍了抽象类和纯虚函数。通过内存布局图解阐释了虚函数表指针和多态调用机制,区分了静态绑定和动态绑定的本质差异。最后简要说明了多继承场景下的虚函数表处理方式。全文系统性地解析了C++多态的实现原理和技术细节。
2025-08-12 02:23:34
11950
13
原创 这一文学会《C++》三大特性之继承 (内含组合)
【摘要】本文系统介绍了C++面向对象程序设计中的继承机制。继承实现了代码复用,允许派生类在基类基础上扩展功能,形成类的层级结构。文章详细讲解了继承的定义方式、访问权限控制、派生类与基类的赋值转换规则(切片操作)、作用域与成员隐藏、派生类默认成员函数调用顺序等核心概念。特别分析了菱形继承带来的数据冗余和二义性问题,并提供了多继承、静态成员继承等特殊情形的处理方式。通过大量代码示例,直观展示了继承机制的各项特性及其应用场景。
2025-08-07 20:54:56
1391
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅