- 博客(20)
- 收藏
- 关注
原创 深入理解C++多态
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件1. 必须通过基类的指针或者引用调用虚函数2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写这里通过基类引用接收不同派生类对象时,虽然从代码表面看是调用父类函数,但实际会根据对象的实际类型动态选择对应的函数实现。在虚函数的后面写上 =0 ,则这个函数为纯虚函数。
2025-04-03 18:53:51
864
原创 string类--C++
目录一、std::string类的基本使用(常用)1.1、初始化与赋值1.2、字符串的拼接1.3、string类对象的访问及遍历操作1.4、长度与容量操作1.5、子字符串与查找1.6、string类非成员函数二、模拟实现string类核心功能2.1、类定义与成员变量2.2、构造与析构函数2.3、深拷贝2.4、扩容机制三、完整代码比如:可以通过多种方式访问和修改字符返回pos位置的字符这里operator[]与at()区别在于at会进行边界检查,如果超过边界,编译器会抛异常。前者不检查边界注意:返回指向字符串
2025-03-19 20:38:11
965
原创 C/C++ 动态内存管理
跟C语言不同的点在于,C++在new时会调用构造函数,在delete释放空间前会先调用析构函数C++内存申请失败时,会抛异常。
2025-03-18 21:21:05
571
原创 C++初始化列表的三大强制场景:告别低效对象构造
在构造函数体内通过赋值操作设置成员变量的值,本质是。:在对象创建时直接调用成员变量的构造函数,。以一个,接着是一个的数据成员列表,每个""后面跟一个放在括号中的。在类中就是其在初始化列表中的,与其在初始化列表中的先后次序无关_a2在_a1之前声明,所以_a2会比_a1先初始化。
2025-03-14 18:29:29
800
原创 类和对象 1
类可以看作是结构体的升级版,里面不仅可以有成员变量,也可以有成员函数,并通过访问限定符进行封装和控制。C语言结构体:只能定义成员变量。C++结构体/类:可定义成员变量和成员函数,推荐使用class关键字。// 类体:由成员函数和成员变量组成声明和定义均在类内:成员函数可能被编译器优化为内联函数。声明在头文件(.h),定义在源文件(.cpp):推荐方式,成员函数需加类作用域。使用前缀(如_)区分成员变量与形参。
2025-03-07 18:33:32
937
原创 常见的排序算法
时间复杂度:平均情况是 O(nlogn),最好情况也是 O(nlogn),最坏情况是 O(n2)。空间复杂度:递归版本是 O(logn) 到 O(n)(取决于递归深度)稳定性:不稳定。
2025-03-04 18:13:23
707
原创 栈和队列
一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。遵循原则栈的插入操作叫做进栈/压栈/入栈,。栈的删除操作叫做出栈。
2025-02-28 15:52:07
305
原创 顺序表和链表
带头双向循环链表(双链表):不仅存着下个结点的地址,还存着上个结点的地址,head存着最后结点的地址,又存着下个结点的地址。逻辑上结点之间双向循环连接。就是n个具有相同特性的数据元素的有限序列。挨着存储的,常见的线性表:顺序表、链表、栈、队列。就是一个结构中除了保存数据,还保存了下个结构的地址,把他们连接起来。无头单向非循环链表(单链表):就除了有自身的数据,还保存了下个结点的地址。的存储单元依次存储数据元素的线性结构,一般情况下用。在数组上完成数据的增删查改。、非顺序的存储结构,数据元素的。
2025-02-27 13:11:51
378
原创 指针大人的世界
这段代码是一次函数声明,声明的函数名叫signal,signal函数的参数有2个,第一个是int类型,第二个是函数指针类型,该函数指针能够指向的那个函数的参数是int,返回类型是void。signal函数的返回类型是一个函数指针,该函数指针能够指向的那个函数的参数是int,返回类型是void。变量是可以修改的,如果把变量的地址交给⼀个指针变量,通过指针变量的也可以修改这个变量。这里pa左边写的是 int* , * 是在说明pa是指针变量,而前面的 int 是在说明pa指向的是整型(int) 类型的对象。
2025-02-26 13:36:55
533
原创 程序环境和预处理--C语言
C语言设置了⼀些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。__FILE__ //进⾏编译的源⽂件__LINE__ //⽂件当前的⾏号__DATE__ //⽂件被编译的⽇期__TIME__ //⽂件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义#define reg register //为 register这个关键字,创建⼀个简短的名字;) //⽤更形象的符号来替换⼀种实现case //在写case语句的时候⾃动把 break写上。
2025-02-24 15:17:28
703
原创 数据在内存中的存储
1、将数据的低位存放在内存的高地址中,而数据的高位存放在内存的低地址中。2、将数据的低位存放在内存的低地址中,而数据的高位存放在内存的高地址中。int a=10;//在32位机器上其十六进制为0x0000000a也可通过调试,查看内存窗口看到,以vs2022为例:这里数据的低位存放在内存的低地址处,高位存放在内存的高地址处,就是小端存储(小端字节序存储)
2025-01-27 12:26:05
725
原创 C语言操作符详解
目录一、操作符的分类二、算术操作符: + 、- 、* 、/ 、%1、除法运算符(/)2、取模(余)运算符(%)三、原码、补码、反码四、移位操作符1、左移操作符2、右移操作符五、位操作符1、&按位与(有0出0,全1出1)2、| 按位或(有1出1,全0出0)3、^按位异或(相同为0,相异为1)六、单目操作符1. 逻辑非操作符:!2. 自增操作符:++3. 自减操作符:--4. 取地址操作符:&5. 解引用操作符:*6. 正号操作符:+7. 负号操作符:-8. 按位取反操作符:~9. sizeof操作符10. 类
2025-01-22 10:37:39
806
原创 扫雷游戏——C语言版
• 使⽤实现经典的扫雷游戏• 游戏可以通过实现或者• 扫雷的棋盘是的格⼦•• 可以◦如果位置不是雷,就显⽰周围有⼏个雷;如果位置是雷,就炸死游戏结束;把除10个雷之外的所有非雷都找出来,排雷成功,游戏结束。
2024-12-19 19:41:51
1239
原创 rand()函数用来生成随机数
1、返回类型为2、rand函数返回的数是的,是通过某种算法来生成的随机数,并非真正的随机之间,的值依赖编译器实现,大部分是比如:但此时你再打印几次,你会发现生成的随机数还是和上次一样,并没有实现真正的随机,rand函数是通过算法里的来随机生成的,而默认。而种子的生成是由srand()函数实现的。
2024-12-14 22:20:22
373
原创 关于C语言的分支(选择)和循环结构
什么是分支(选择)和循环结构?C语言作为一种结构化设计语言,由和三种结构组成,这三种结构用来解决生活中的大部分问题,这里讲选择和循环结构。
2024-12-04 22:14:42
826
原创 ##布尔数据类型
c语言原来并没有为布尔值单独设置一个类型,而是使用整数0表示假,非0值表示真。在C99中也引入了布尔类型,是专门表示真假的。为了方便,后用 bool 也可表示 _Bool。布尔类型的使用的包含头文件布尔类型的变量的取值是:ture或false。
2024-11-22 18:28:28
137
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人