- 博客(42)
- 收藏
- 关注
原创 【C++】多态
【摘要】本文深入探讨了C++中的多态机制。多态分为静态多态(函数重载)和动态多态(虚函数重写+父类指针调用)。构成多态需要满足两个条件:通过基类指针/引用调用虚函数,且派生类必须重写基类虚函数。文章详细分析了虚函数表原理,指出虚函数表存储虚函数指针,同类对象共享同一虚表。通过单继承和多继承案例,演示了虚函数表的构成方式,并介绍了override和final关键字的使用。最后讨论了菱形虚拟继承下的多态处理及二义性解决方案。多态机制实现了运行时的动态绑定,使不同对象对同一行为表现出不同形态。
2025-08-02 14:06:24
428
原创 【C++】继承
本文系统介绍了C++继承机制的核心概念与应用。重点阐述了继承的定义方式、访问权限控制、对象赋值转换规则、作用域处理、派生类默认成员函数实现等关键技术要点。深入分析了菱形继承问题及其虚拟继承解决方案的原理,通过虚基表指针和偏移量实现数据共享。对比了继承(is-a)与组合(has-a)的差异,指出组合在耦合度和封装性方面的优势。最后反思了C++多继承带来的复杂性,建议谨慎使用以避免菱形继承问题。文章通过大量代码示例展示了继承机制的实际应用,为面向对象程序设计中的代码复用提供了系统指导。
2025-07-27 11:26:37
715
原创 【C++】list
本文主要介绍了C++中list容器的使用和实现原理。文章首先讲解了list的构造函数、迭代器和常用操作,包括正向/反向迭代器、splice函数和remove函数的使用方法。重点分析了list迭代器失效问题,指出删除操作会导致指向被删除节点的迭代器失效,并给出了正确使用迭代器的示例代码。文章还通过对比vector容器,详细展示了list的模拟实现过程,包括节点类、迭代器类和list类的定义,涵盖了构造、析构、插入、删除等核心功能的实现细节。通过这段代码可以清晰地理解list作为双向循环链表的数据结构特点及其操
2025-07-21 18:02:13
338
原创 【C++】vector
C++ vector容器详解 vector是C++标准库中的动态数组容器,相比原生数组,它能够自动管理内存并动态调整大小。vector内部使用连续存储空间,支持随机访问,在末尾插入/删除元素效率较高(O(1)),但在中间操作效率较低(O(n))。 核心特性: 动态扩容策略:vs按1.5倍增长,g++按2倍增长 迭代器失效问题:扩容、插入、删除等操作可能导致迭代器失效 常用操作:push_back/pop_back、insert/erase、sort排序等 模拟实现要点:三个指针标记存储空间(_start/_
2025-07-18 09:42:06
1070
原创 【Linux】环境基础和开发工具
如何使用 yum ,如何用 vim 编辑文本,gcc/g++ 编译器的使用,make 和 makefile ,gdb调试器,git
2025-07-03 17:01:33
909
原创 【C++】模板
本文系统介绍了C++模板编程的核心内容,主要包括:1. 函数模板:基本语法、实例化方式(隐式/显式)、参数匹配原则及注意事项;2. 类模板:定义格式、实例化特点、成员函数定义规范;3. 非类型模板参数的使用限制;4. 模板特化机制:函数模板特化步骤、类模板全特化与偏特化;5. 模板分离编译问题及其解决方案。文章通过具体代码示例,详细解析了模板编程中的常见问题与最佳实践,如类型推断规则、显式实例化场景、特化应用等核心概念,为掌握C++泛型编程提供了全面指导。
2025-05-31 11:57:38
948
原创 【C++】内存管理
本文介绍了C++内存管理的核心概念,主要包括: 内存区域划分:栈(局部变量)、堆(动态分配)、数据段(全局/静态变量)和代码段(常量) C++内存管理方式:new/delete操作符的使用及与malloc/free的区别 内存泄漏的危害:长期运行程序的内存泄漏会导致性能下降甚至系统崩溃 new/delete相比malloc/free的优势在于自动调用构造/析构函数、类型安全、异常处理等特性。文章通过具体示例详细说明了各内存区域的特征、new/delete的实现原理以及不同内存分配方式的适用场景。
2025-05-18 18:49:00
794
原创 【C++】类和对象
本文系统介绍了C++中类与对象的核心概念,涵盖类的定义、访问限定符、实例化、存储方式等基础内容。重点讲解了this指针原理、六大默认成员函数(构造/析构/拷贝构造等)的实现细节,以及运算符重载、const成员函数等进阶特性。文章对比了struct与class的区别,深入探讨了初始化列表、静态成员、友元等关键概念,并通过栈类等实例说明封装思想。最后介绍了内部类和匿名类的特殊用法,帮助读者全面掌握面向对象编程中的类设计技巧。
2025-05-16 20:07:18
978
原创 【数据结构】完全二叉树叶子结点数量的计算
5. 第10层的490个节点是由第9层的 \( \lceil 490 / 2 \rceil = 245 \) 个节点生成的。2. **层数的计算错误**:在计算树的层数时,可能会混淆 \( 2^h \) 和 \( 2^h - 1 \)。4. **度为1的节点数的假设**:在验证时,可能会忽略完全二叉树中度为1的节点数最多为1的情况。3. **对于任何二叉树,度为0的节点(叶子节点)数 = 度为2的节点数 + 1**。2. **高度为h的二叉树最多有2^h - 1个节点**(即满二叉树的情况)。
2025-03-31 10:56:33
492
原创 【数据结构】链表的带环问题
如果起始点到入口点的距离是 L,环的周长是 C,入口点到相遇点的距离是 X ( 0 <= X < C,因为 fast 的速度是 slow 的两倍 ), 那么 slow 走的路程是 L + X,fast 走的路程是 L + n*C + X,其中 n 是正整数,n >= 1,代表 slow 进圈前 fast 转的圈数。2)如果 c - 1 是奇数,n 最后会从 3 减到 -1,即 fast 会错过 slow,跑到 slow 的前一个位置。
2025-02-27 12:23:00
1188
原创 【数据结构】链表练习
可以使用快慢指针:fast 一次走两步,slow 一次走一步。当 fast == NULL(偶数个结点)或者 fast->next == NULL(奇数个结点)就停止,返回 slow。给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。1、一次性定义多个指针时,第二个及以后的指针名前面都要加 *。2、while( )括号内是循环继续的条件。要求:只遍历一遍链表。
2025-02-23 12:50:42
315
原创 【C语言】有关位段的题目
需要注意的是位段成员的存储空间是从右到左的(VS 环境下),用 %02x (十六进制)打印 puc 数组元素,puc 认为它指向的是一个类型为 unsigned char 的数组,所以 puc[0] 就是 00000010,puc[1] 就是 00101001,所以最终打印的结果就是 02 29 00 00。但 puc 认为它指向的是一个数组,pstPimData 认为它指向的是一个结构体。puc 和 pstPimData 指向同一个地址,题目是:打印的结果是什么?
2025-02-11 11:43:40
142
原创 数据的存储(万字总结,建议收藏)
本文系统介绍了计算机中数据的存储与表示机制,主要内容包括: 数值编码方式:详细解释了原码、反码和补码三种二进制表示方法,重点阐述了计算机采用补码存储的原因(统一符号处理、简化加减运算)。 存储模式:分析了大端存储和小端存储的区别及其产生原因,并提供了检测当前机器存储模式的函数实现。 数据类型转换: 截断现象(大类型转小类型的数据丢失) 溢出问题(超出数据类型范围的处理方式) 隐式类型转换(整型提升规则及其CPU实现原理) 数据输出机制: 整数输出的补码转换过程 浮点数的IEEE 754标准存储格式(S符号位
2025-01-08 18:08:52
1419
原创 【c语言】逃离停车场
返回离开停车场的字符串。L、R、D分别表示向左、向右、向下移动,L、R、D后的数字表示移动的距离。除了一楼,每一层只有一个楼梯,一楼没有任何楼梯。请你设计并返回一个最快离开停车场的字符串。你被困在一个多层停车场。您的任务是仅使用楼梯离开停车场。出口总是在一楼的右下角。2 表示您的起始位置,可以在停车场的任何一层。表示向右走三下,向下走两下,再向右走一下。您必须使用楼梯 1 才能下一层。接下来的 N 行表示停车场。第一行 N 表示有几层楼。出口总是在一楼的右下角。0 表示免费停车位。
2024-12-19 23:01:28
312
原创 【c语言初学者】用c语言打印杨辉三角
用两个 for 循环,外循环控制 m 的值,使 m 每次加一,直到输出到想要输出的行数( m 的值加一就是行数)。每次退出内循环后,控制换行。再算出 m、(m-n)、n 的阶乘,分别赋给 s1、s2、s3,就可以表示这个组合数了,组合数的“上标”和“下标”恰好和二维数组元素的下标对应,每次算出一个组合数,就可以存储到一个二维数组的一个元素去。例如在杨辉三角中,第3行的三个数恰好对应着两数和的平方的展开式的每一项的系数,第4行的四个数恰好依次对应两数和的立方的展开式的每一项的系数,依次类推。
2024-12-08 21:05:16
357
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人