自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Docker】Docker Image(镜像)

Docker镜像是只读模板文件,采用分层存储结构(UnionFS),包含运行应用所需的文件系统、依赖和工具。镜像通过分层设计实现资源共享,减少存储空间占用,确保环境一致性。Docker提供了一系列镜像管理命令,包括构建(build)、拉取(pull)、推送(push)、删除(rmi)等操作。镜像可通过tar归档文件离线迁移,支持多标签共享存储层,提高部署效率。虽然分层设计会略微降低文件检索效率并增加包体积,但显著简化了应用打包和环境配置流程,解决了传统部署中的环境差异问题。

2025-10-19 23:34:46 1725 76

原创 【Docker】Docker镜像仓库

本文详细介绍了Docker Registry(镜像仓库),包括其定义、架构、分类、工作机制、常用仓库及相关命令,并提供多个实战案例。镜像仓库用于存储、管理和分发Docker镜像,通过Repository和Tag区分镜像,具备认证能力。分类有公共仓库(如Docker Hub)、国内镜像源(如阿里云加速器)和私有仓库(如Harbor、Nexus)。核心命令包括login、pull、push等。实战内容涵盖Nginx服务搭建、Docker Hub/腾讯云/阿里云私有仓库创建与镜像推送,还涉及Busybox工具使用

2025-10-18 18:56:00 2785 61

原创 【ProtoBuffer】protobuffer的安装与使用

本文全面介绍了Google Protocol Buffers(ProtoBuf)的基本概念、安装配置、语法详解及实际应用。主要内容包括: 基础概念:ProtoBuf是一种高效的结构化数据序列化方法,具有语言无关、平台无关、可扩展的特点,相比XML/JSON更小更快。 安装配置:详细说明了Windows和Linux系统下的安装步骤及环境配置。 语法详解:通过通讯录案例逐步讲解了proto3语法,包括消息定义、字段规则、枚举类型、Any类型、oneof类型、map类型等核心特性。 实际应用: 演示了本地文件读写

2025-10-14 14:28:21 937 78

原创 【Linux操作系统】进程控制

本文摘要: 本文详细讲解了Linux进程管理的核心概念与技术。首先介绍了fork()函数创建子进程的机制,包括进程创建原理、写时拷贝技术等。接着探讨了进程终止的三种场景(正常结束、错误结束、异常终止)及退出方法(exit/_exit/return)。然后重点讲解了进程等待的必要性,详细解析了wait/waitpid函数的使用方法,包括阻塞与非阻塞等待的实现。文章还深入剖析了进程程序替换的原理,介绍了exec函数簇的6种变体及其使用场景。最后,通过实现一个简易Shell的完整代码,展示了如何综合运用这些技术,

2025-10-11 16:41:13 1807 85

原创 【Linux操作系统】进程概念

本文系统性地介绍了计算机系统中的核心概念与运行机制。首先阐述了冯诺依曼体系结构的基本原理及其性价比优势,说明了CPU通过内存与外设交互的必要性。然后深入解析了操作系统的核心功能与管理逻辑,包括"先描述后组织"的管理思想、进程控制块(PCB)的作用以及进程状态转换。文章详细探讨了进程调度算法、优先级机制、环境变量管理,并重点剖析了虚拟地址空间的实现原理及其保护机制。最后通过代码实例验证了程序地址空间的布局特征,揭示了虚拟地址与物理地址的映射关系。全文从硬件架构到软件管理层层递进,构建了完整

2025-10-06 20:13:36 3395 86

原创 【Linux操作系统】基础开发工具

本文介绍了Linux开发中的常用工具链,包括软件包管理(yum/apt)、文本编辑器(Vim)、编译器(gcc/g++)、构建工具(make/Makefile)、进度条实现、版本控制(Git)和调试器(gdb/cgdb)。重点讲解了Vim的多模式编辑、gcc的编译流程与动静态链接区别、Makefile的自动化构建原理,以及Git的版本控制三板斧操作。这些工具构成了Linux环境下高效开发的完整工作流,帮助开发者完成从代码编写、编译构建到版本管理的全流程工作。

2025-09-27 23:35:25 4044 71

原创 【Linux操作系统】Linux基础指令和权限

Linux操作系统发展历程与核心概念摘要 Linux起源于1991年赫尔辛基大学学生Linus Torvalds开发的类UNIX内核,继承了UNIX多用户、多任务特性。作为开源软件典范,Linux遵循GPL协议,允许自由修改和分发代码。经过30年发展,Linux已成为服务器领域主流系统(占比75%),并广泛应用于云计算(86%企业采用)、移动设备(Android基于Linux内核)和嵌入式领域。 核心特点包括: 文件系统采用树状结构,路径分绝对/相对两种 权限管理系统通过用户角色(所有者/组/其他)和文件属

2025-09-21 17:27:54 8475 76

原创 【数据结构】跳表

跳表(SkipList)是一种基于有序链表的高效数据结构,由William Pugh于1990年提出。它通过建立多层索引实现快速查找,时间复杂度为O(logN)。跳表通过在相邻节点间随机增加层数来优化插入和删除操作,避免了严格的比例关系。Redis中跳表参数p=1/4、maxLevel=32,平均每个节点包含1.33个指针。相比平衡树,跳表实现更简单、空间消耗更低;相比哈希表,跳表支持有序遍历且空间效率更高。跳表的核心操作包括查找、插入和删除,通过随机层数和更新指针关系来维护结构。完整实现包含节点设计、查找

2025-09-16 16:19:40 2310 68

原创 【数据结构】B-树

摘要:B树是一种适合外查找的平衡多叉树,通过降低树高度减少磁盘IO次数,提升查找效率。文章详细介绍了B树的概念、特性、插入操作实现及性能分析,并与B+树、B*树进行对比。B树系列在数据库索引中有广泛应用,如MySQL的MyISAM和InnoDB存储引擎分别采用不同方式的B+树索引结构。其中InnoDB使用聚集索引,数据文件本身就是主索引;而MyISAM采用非聚集索引,索引文件仅保存数据地址。B树在管理海量数据时展现出高效性能,是数据库系统的核心数据结构之一。

2025-09-14 20:56:57 989 59

原创 【数据结构】LRU Cache

本文介绍了LRU缓存算法的原理与实现。LRU(最近最少使用)是一种缓存替换算法,通过优先淘汰最久未使用的数据来优化存储效率。其实现采用哈希表+双向链表的数据结构组合:哈希表保证O(1)时间查找,双向链表维护数据访问时序。热数据置于链表头部,冷数据逐步后移。当缓存满时,直接删除链表尾部冷数据。文章给出了C++实现代码,重点展示了get/put操作如何通过迭代器快速定位并更新数据位置,确保操作时间复杂度均为O(1)。这种结构完美平衡了查找效率和顺序维护的需求。

2025-09-12 16:08:06 1197 26

原创 【数据结构】图

本文系统介绍了图数据结构的核心概念、存储方式及经典算法。首先阐述了图的定义(顶点集合V和边集合E),区分了有向图与无向图,并介绍了完全图、连通图、生成树等基本概念。其次详细讲解了两种存储结构:邻接矩阵(适合稠密图)和邻接表(适合稀疏图),并提供了C++实现代码。在算法部分,重点介绍了图的遍历(BFS和DFS)、最小生成树算法(Kruskal和Prim)、单源最短路径算法(Dijkstra和Bellman-Ford)以及多源最短路径算法(Floyd-Warshall)。每种算法均包含实现原理、时间复杂度分析和

2025-09-11 19:59:33 1462 68

原创 【Docker】Docker安装

本文详细介绍了在不同操作系统上安装Docker的完整流程。主要内容包括:Ubuntu20.04和CentOS7的Server版安装步骤;Windows11的GUI版安装方法;Docker镜像源和安装目录的配置优化;常见报错排查方法。重点讲解了安装前的系统检查、旧版本卸载、依赖安装、服务启动等关键步骤,并提供了镜像源替换和存储目录修改等实用技巧,适合需要跨平台部署Docker的开发者参考。

2025-09-08 16:08:31 1186 21

原创 【Docker】Docker基础

Docker是一个开源的容器化平台,通过虚拟化技术实现应用的高效部署和运行。相比传统虚拟机,Docker容器更轻量级,启动更快(秒级),资源占用更少(MB级)。其核心优势包括: 环境标准化:通过镜像打包应用及其依赖,确保开发、测试、生产环境一致性 快速部署:镜像仓库(如Docker Hub)支持一键获取和运行应用 资源隔离:利用Linux内核的Namespace和Cgroups技术实现进程、网络等隔离 弹性伸缩:可根据业务需求动态调整资源 Docker采用客户端-服务器架构,核心组件包括: 镜像(Image

2025-09-07 23:30:27 7299 75

原创 【数据结构】并查集

摘要:并查集是一种用于处理不相交集合合并与查询的数据结构,通过数组实现树形结构来表示元素间的从属关系。初始时每个元素自成一个集合,通过合并操作将相关元素归入同一集合。其核心操作包括查找根节点、合并集合和统计集合数量。并查集适用于解决分组问题,如学生分队、省份数量计算和等式方程验证等场景。具体实现中,数组下标表示元素编号,负值表示根节点及其集合大小,非负值表示父节点索引。应用示例包括计算连通分量和验证等式相容性等。

2025-08-31 20:19:40 1230 43

原创 【Docker】Docker初识

容器技术发展经历了从早期隔离到云原生时代的演进过程。1979年Unix V7引入chroot开创进程隔离先河,2000年后FreeBSD Jail等相继完善隔离机制。2013年Docker通过生态化解决方案引爆容器技术,而2014年Google推出Kubernetes解决编排问题。两大阵营竞争中,OCI和CNCF逐步确立行业标准,最终Kubernetes成为编排事实标准,Docker成为容器事实标准。当前主流采用containerd作为运行时组件,在保证稳定性的同时支持云原生应用。这一演进反映了云计算时代对

2025-08-30 22:22:18 1369 24

原创 【Docker/Redis】服务端高并发分布式结构演进之路

本文以电商系统为例,介绍了从单机到千万级并发架构的演进过程。从单机架构开始,逐步演进到应用数据分离、应用集群、数据库读写分离、引入缓存、垂直分库、微服务拆分,最终到容器化部署。每个阶段都分析了技术选型、优缺点及适用场景,如数据库主从分离解决读写瓶颈、缓存提升热点数据访问、微服务降低系统耦合度等。文章还解释了分布式、集群、负载均衡等核心概念,并指出架构演进需结合实际业务需求,不同场景侧重不同优化方向。整体呈现了一个系统架构随业务增长不断升级的完整路径。

2025-08-29 22:54:06 1971 59

原创 【Git】企业级开发模型

本文介绍了DevOps理念下的Git分支管理规范与实践。主要内容包括:1. 阐述了从传统开发到DevOps的演进过程,强调Git在代码管理中的重要性;2. 详细说明了常用的开发环境(开发/测试/预发布/生产)及其对应关系;3. 重点讲解了GitFlow模型的分支设计规范,包括master、release、develop、feature、hotfix等分支的用途和操作规范;4. 提供了企业级项目管理的实战指南,包括DevOps平台准备、项目创建、成员管理和基于GitFlow的开发场景实践;5. 针对不同环境下

2025-08-27 23:03:07 828 37

原创 【Git】多人协作

本文详细介绍了Git多人协作开发的三种工作模式:1)同分支协作开发,演示了冲突解决和分支合并流程;2)多分支并行开发,展示了如何创建独立功能分支避免冲突;3)跨分支协作开发,说明如何接管他人分支继续开发。文章重点讲解了分支管理、远程仓库操作、冲突解决方法以及PR合并流程,并提供了删除过时远程分支引用的解决方案。通过实际案例演示了从分支创建、协同开发到最终合并的完整工作流程,强调了保持master分支稳定的重要性,为团队协作开发提供了实用指导。

2025-08-27 21:28:56 1792 40

原创 【Git】远程操作和标签管理

本文介绍了Git远程操作和标签管理的基本概念和使用方法。主要内容包括:1. 远程操作部分讲解了分布式版本控制系统的工作原理,如何创建和克隆远程仓库,以及推送和拉取远程仓库的操作步骤;2. 配置Git部分介绍了如何忽略特殊文件和给命令配置别名;3. 标签管理部分说明了标签的作用,如何创建、查看、推送和删除标签。通过本文可以掌握Git远程协作开发和版本管理的基本技能。

2025-08-24 22:32:27 1118 42

原创 【Git】分支管理

本文介绍了Git分支的基本概念和操作流程。主要内容包括:1. 分支概念:分支类似分身,可以独立开发而不影响主线;2. 常用操作:创建(git branch)、切换(git checkout)、合并(git merge)和删除(git branch -d)分支;3. 冲突处理:当合并出现冲突时,需要手动解决并重新提交;4. 管理策略:推荐使用master作为稳定分支,dev作为开发分支;5. 实用技巧:包括bug分支(git stash)、强制删除分支(git branch -D)等。分支功能使团队协作更高效

2025-08-23 23:23:07 1051 15

原创 【Git】基本操作

本文介绍了Git本地仓库的基本操作流程。首先通过git init命令在现有目录下创建本地仓库,生成.git目录用于版本管理。接着讲解了如何配置用户信息,并详细阐述了工作区、暂存区和版本库的关系。文章重点演示了文件添加、修改、提交和回退的全过程:使用git add将文件加入暂存区,git commit提交到版本库,git status查看状态,git diff查看修改内容。当需要撤销修改时,可通过git checkout恢复工作区文件,或使用git reset回退到指定版本(配合git log和git ref

2025-08-21 19:31:03 2411 52

原创 【Git】Git初识

摘要:本文介绍了Git版本控制器的基本概念和安装方法。文章首先提出多版本文件管理的问题,如文档和代码的版本混乱问题,进而引入Git作为解决方案。Git能跟踪文本文件改动历史,支持多人协作,但不适用于二进制文件。安装部分详细说明了在Linux(CentOS/Ubuntu)和Windows平台的具体安装步骤,包括命令操作和版本检查。文章最后提供了Windows安装的参考视频链接。

2025-08-19 23:12:14 2807 11

原创 【C++】智能指针的使用及其原理

智能指针是C++中管理动态内存的重要工具,通过RAII(资源获取即初始化)机制自动释放资源。文章分析了智能指针的使用场景,如异常安全处理,比较了C++标准库中的auto_ptr(已废弃)、unique_ptr(独占所有权)、shared_ptr(共享所有权)和weak_ptr(解决循环引用)四种智能指针。重点讲解了shared_ptr的引用计数原理及线程安全问题,并提供了智能指针的实现示例。文章还介绍了智能指针的删除器定制、循环引用问题及解决方案,最后讨论了内存泄漏的危害及检测方法。智能指针能有效避免内存泄

2025-08-19 18:51:01 886 39

原创 【C++】异常

本文围绕 C++ 异常展开,先阐述异常的概念、抛出与捕获机制。通过多个代码示例,展示了异常在函数中的抛出、不同层级的捕获过程,以及栈展开时异常的传递。还介绍了查找匹配处理代码的方式,如利用基类捕获派生类异常,以及异常重新抛出的场景,如发送消息失败时的重试与异常传递。同时提及异常安全问题,如动态内存在异常发生时的释放,以及异常规范,包括 C++98 和 C++11 中关于函数是否抛出异常的声明方式,最后简要涉及标准库的异常

2025-08-17 19:08:21 738 47

原创 【C++】C++11

C++11新特性综述 C++11作为C++的重要更新版本,引入了多项关键特性: 列表初始化:统一初始化方式,支持内置类型和自定义类型,通过initializer_list实现容器初始化 右值引用与移动语义:区分左值/右值,通过移动构造和移动赋值提升性能,解决深拷贝效率问题 可变参数模板:支持参数数量可变的模板,使用参数包和包扩展技术 新类功能:包括默认移动构造/赋值、成员变量缺省值、final/override等 lambda表达式:匿名函数对象,支持捕获列表,简化可调用对象定义 包装器:function统

2025-08-16 13:13:47 1520 39

原创 【数据结构】哈希扩展学习

本文介绍了位图和布隆过滤器两种数据结构及其在海量数据处理中的应用。位图通过直接映射整数到bit位实现高效查找,适用于整数判断问题,如处理40亿数字查找。布隆过滤器则通过多个哈希函数映射非整型数据,降低冲突率,应用于URL去重、垃圾邮件过滤等场景。文章详细分析了两种结构的实现原理、误判率推导及代码实现,并探讨了海量数据处理问题的解决方案,如哈希切分处理大文件交集和统计IP出现频率。这些方法在内存有限的情况下,能有效处理大规模数据查询和统计问题。

2025-08-08 21:14:40 1369 60

原创 【C++】unordered系列容器使用及封装

本文详细介绍了C++中unordered_map和unordered_set的底层实现原理及封装方法。主要内容包括:1. 使用差异分析:对比了哈希表实现与红黑树实现的容器在性能、迭代器和key要求上的区别;2. 哈希表核心实现:通过哈希桶结构完成基础功能,重点解决了模板参数处理和iterator实现难点;3. 容器封装方法:通过复用哈希表模板,分别封装unordered_map和unordered_set,支持迭代器遍历和[]操作符。实现过程中解决了哈希冲突处理、扩容机制、const迭代器等关键技术问题,最

2025-08-06 14:57:22 1421 46

原创 【数据结构】哈希表实现

哈希是一种通过哈希函数将关键字映射到存储位置的数据组织方式,核心思想是建立关键字与位置的直接映射关系以实现快速查找。本文系统介绍了哈希的核心概念:哈希冲突(不同关键字映射到同一位置)、负载因子(衡量空间利用率与冲突概率的指标)、以及多种哈希函数设计方法(直接定址法、除留余数法、乘法散列法等)。重点探讨了两种冲突处理策略:开放定址法(线性探测、二次探测)和链地址法(拉链法),并提供了完整的C++代码实现。特别针对不同数据类型(如字符串)设计了特化的哈希转换方法,通过质数扩容策略优化性能。文章指出实际应用中需权

2025-08-03 15:22:31 1799 52

原创 【C++】封装红黑树实现map和set

本文分析了STL中map和set的实现原理,基于红黑树的复用框架。通过源码解析,展示了map和set如何共享同一红黑树模板,通过不同模板参数实现key和key-value两种模型。重点介绍了迭代器的实现思路,包括++和--操作符的中序遍历逻辑。文章详细讲解了map支持[]操作符的实现方法,以及如何保证key不可修改而value可修改的特性。最后提供了完整的map和set模拟实现代码,包括红黑树的插入、查找、旋转等核心操作,以及迭代器的封装实现。整个设计通过模板和仿函数实现了高度复用,体现了STL的泛型编程思

2025-07-30 13:43:33 784 43

原创 【C++】红黑树实现

红黑树是一种近似平衡的二叉搜索树,通过颜色约束确保最长路径不超过最短路径的2倍。其核心规则包括:根节点为黑、红节点子节点必为黑、各路径黑节点数相同。插入时通过变色和旋转(单旋/双旋)维护平衡,分为三种情况处理:当叔叔节点为红时变色向上调整;否则根据父子位置关系进行旋转。相比AVL树,红黑树旋转次数更少,实际应用更广泛。验证时需检查颜色规则和路径黑节点数是否一致。删除操作较为复杂,可参考专业书籍。红黑树保证了O(logN)的查找效率,是高效的平衡树结构。

2025-07-27 11:12:24 1385 19

原创 【数据结构】二叉树进阶算法题

本文介绍了二叉树相关算法题的C++实现,主要包括以下内容:1. 二叉树转字符串(606题):通过前序遍历处理空子树括号问题,利用C++字符串拼接简化操作;2. 层序遍历(102/107题):使用队列实现,通过记录每层节点数解决二维数组存储问题;3. 最近公共祖先(236题):提供两种解法,分别是递归判断节点位置和路径记录法;4. 二叉搜索树转双向链表(LCR155题):中序遍历时修改指针关系实现原地转换;5. 根据遍历序列构建二叉树(105/106题):利用前序/后序确定根节点,中序划分左右子树;6. 非递

2025-07-24 23:16:37 1262 37

原创 【C++】继承和多态扩展学习

本文深入探讨了C++中的菱形继承与虚函数表实现原理。在菱形继承场景中,通过虚继承和虚基表机制解决了数据冗余和二义性问题,虚基表记录了虚基类实例的偏移量。文章详细分析了单继承和多继承下的虚函数表结构,指出监视窗口可能隐藏真实内存布局,需通过内存窗口和特殊代码才能探查实际虚表内容。在多继承中,派生类会维护多个虚表,未重写的虚函数会被放入首个基类的虚表。特别强调了菱形继承在工程中的不推荐性,并解答了11个关于继承和多态的常见面试问题,包括虚函数与内联、静态成员的兼容性等。通过代码实例和内存模型分析,揭示了C++继

2025-07-22 21:14:02 1352 33

原创 飞算JavaAI:手动写代码 VS 飞算JavaAI辅助开发:效率差距竟如此夸张?

《飞算JavaAI测评:编程小白也能轻松开发》文章摘要:本文通过对比测试展示了飞算JavaAI在SpringBoot项目开发中的效率优势。手动开发CRUD接口耗时约2.5小时,而借助飞算JavaAI仅需30分钟即可完成相同功能。测评显示,AI在项目搭建、代码生成等环节显著提升效率,错误率更低,特别适合初学者快速上手。作者认为飞算JavaAI有效降低了学习门槛,使"写不出代码"变成"看得懂、改得了、写得快",同时强调需理解AI生成代码的原理而非简单复制。文末提供了使用建

2025-07-21 14:17:05 1195 12

原创 【C++】stack和queue拓展学习

本文分析了SGI-STL30中反向迭代器的实现原理,通过适配器模式复用正向迭代器代码实现反向遍历功能。反向迭代器通过封装正向迭代器,重载运算符实现反向操作,其中operator*访问前一个位置的特性实现了与正向迭代器的对称性。文章还介绍了栈和队列的应用实例——计算器实现,包括中缀转后缀表达式的算法思路和具体实现。通过运算符优先级比较和递归处理括号,将中缀表达式转换为后缀表达式后,利用栈结构实现了表达式的求值计算。最后针对LeetCode计算器题目,处理了负数和空格的特殊情况,完成了完整计算器功能的实现。

2025-07-21 12:59:38 1301 25

原创 【数据结构】AVL树

AVL树是一种自平衡二叉搜索树,由Adelson-Velsky和Landis于1962年提出。它通过平衡因子(右子树高度减左子树高度)控制每个节点的左右子树高度差不超过1,从而保证树的高度平衡。本文详细介绍了AVL树的结构实现,包括节点定义、插入操作(遵循二叉搜索树规则后更新平衡因子)、四种旋转操作(左单旋、右单旋、左右双旋和右左双旋)来维持平衡。通过代码实现和测试验证了AVL树的平衡性,其查找、插入性能稳定在O(logN)。文章还讨论了平衡因子更新的规则和旋转后平衡因子的调整策略,但未展开删除操作的实现。

2025-07-17 13:59:40 972 26

原创 【C++】map和set的使用

目录1. 序列式容器和关联式容器2. set系列的使用2.1 set和multiset参考文档 - C++ Reference2.2 set类的介绍2.3 set的构造和迭代器2.4 set的增删查2.5 insert和迭代器遍历使用样例:2.6 find和erase使用样例:2.7 multiset和set的差异2.8.lower_bound和upper_bound练习:2.8 349. 两个数组的交集 - 力扣(LeetCode)2.9 142. 环形链表 II - 力扣(LeetCode)3. map

2025-03-05 21:39:20 2126 60

原创 【数据结构】二叉搜索树

本文主要介绍二叉搜索树,其概念为左子树节点值小于根节点,右子树节点值大于根节点,插入时依此规则确定位置。性能方面,最优时类似完全二叉树,时间复杂度低;最差时退化为单支树,时间复杂度高,平衡二叉搜索树等为此而生。实现上,插入操作在树空或遍历找到合适位置后插入新节点;查找是依据节点值大小比较来确定查找方向;删除需分多种情况处理,以维持二叉搜索树特性。使用场景包括 key 搜索场景如小区车库车牌识别、文章单词拼写检查,以及 key/value 搜索场景如中英互译字典、商场车库计费、文章单词计数等,还给出了相应代码

2025-01-09 16:38:45 2194 53

原创 【C++】多态

本文围绕 C++ 多态展开,涵盖概念、动态多态的定义及实现、纯虚函数与抽象类、动态多态原理等内容。先是通过实例引出多态概念,接着介绍动态多态构成条件,包括虚函数、重写规则等,还探讨了如协变、析构函数重写、override 和 final 关键字等相关问题,以及重载、重写、隐藏的对比。对于纯虚函数和抽象类,解释其特点与关系,并以车的示例说明。在动态多态原理部分,介绍虚函数表指针,阐述动态多态实现方式、动态绑定与静态绑定,以及虚函数表的构成与作用等,还展示相关代码及运行结果辅助理解。

2024-12-28 15:20:28 2984 56

原创 【C++】继承

本文全面介绍 C++ 继承相关内容。包括继承的概念及定义,用实例展示如何通过继承实现代码复用及不同继承方式下基类成员访问变化;基类和派生类转换,说明子类可赋值给基类但反之不行;继承作用域中的隐藏规则及相关选择题;派生类默认成员函数生成方式及不能被继承的类的实现;继承与友元、静态成员的关系;多继承及菱形继承问题,如虚继承解决数据冗余和二义性、指针偏移问题及 IO 库中的菱形虚拟继承;最后对比了继承(is - a)和组合(has - a)的关系。

2024-12-11 19:54:32 2742 63

原创 【C++】string类的模拟实现

本文围绕 C++ 中 string 类展开。首先介绍了 string 类的模拟实现,包括构造函数、浅拷贝与深拷贝问题,以及拷贝构造和赋值运算符重载的传统与现代写法。现代写法利用临时对象和自动析构特性,提高效率与资源利用率。还介绍了 string 类的其他接口如迭代器和各种操作函数等。接着说明了在 vs 和 g++ 下 string 的结构特点。此外提到了写时拷贝的概念及读取缺陷。最后给出了扩展阅读方向。

2024-12-02 22:56:28 1849 66

空空如也

空空如也

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

TA关注的人

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