- 博客(56)
- 收藏
- 关注
原创 C++ 多态
1)父类不写virtual,不能实现多态。2)子类不写virtual,可以实现多态。多态的条件下,是重写实现:子类把父类的接口ButTicket()给继承下来,重写其实现。即子类继承了父类的virtual,所以也可以实现多态。但更重要的原因是为析构函数做准备。只要父类的析构加了virtual,子类加不加都可以。所以虚函数重写时,父类虚函数加了virtual,子类不加,也构成重写。但是建议都加,使其更明确。1)俩个函数在同一作用域。2)函数名相同,参数不同。
2024-11-25 17:17:41
937
原创 C++ 继承
1.在继承体系中基类和派生类都有独立的作用域。2.子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义。(在子类成员函数中,可以使用基类::基类成员 显示访问)3.需要注意的是如果是成员函数的隐藏,只需要函数名相同就构成隐藏(返回值和参数可以不相同)。4.注意在实际中在继承体系里面最好不要定义同名的成员。总结:只要虚继承了就要将父类的比如_a,放到最下面,然后通过虚基表(存的偏移量)来进行找_a的地址。
2024-11-12 10:25:42
732
原创 String类 [中]
如果成员变量是内置类型char* ,那么s2会和s1所指向的空间地址是相同的,但是在析构的时候,后创建的先析构,也就是先析构s2,而s1也是指向这块空间的,再析构不就会出现err了嘛。②如果自己给自己赋值,如s3 = s3,而开始s3这块空间已经被释放了,之后又去开一块这样的空间,然后又去访问被释放掉的空间中的值,这样难免会出错,所以判断一下,防止自己给自己赋值。①如果s3空间比s1大或者相等,那没问题,但是如果比它小,还要考虑其他情况所以不如释放空间,重新创建和s1一样大的空间,再进行赋值。
2023-05-08 09:52:32
463
原创 类和对象(中)
一、6个成员函数简要介绍如果一个类中什么成员都没有,那么简称空类,那么空类中是什么都没有吗?当然不是,因为任何一个类在不写的情况下,都会生成6个默认成员函数,分别如下:1.初始化:构造函数主要完成初始化的工作,相当于C语言中的写的Init();2.清理:析构函数主要完成清理工作,相当于C语言中写的Destory();3.拷贝:拷贝构造是使用同类对象来初始化创建对象4.赋值:赋值重载主要是把一个对象赋值给另一个对象5.取地址和重载:主要是对普通对象和const对象取地址(很少自己实现)
2022-06-02 23:16:02
234
1
原创 类与对象(上)
一、面向过程与面向对象的初步认识C语言是面向过程,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。当设计比如简单的外卖系统,面向过程关注的主要是下单、接单、送餐这些过程。体现到代码层面主要是方法或者函数。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。当设计比如简单的外卖系统时,面向对象关注的是实现类对象及类对象间的关系,用户、商家、骑手以及他们之间的关系。体现到代码层面主要是类的设计及类之间的关系。C++虽然说是面向对象的,但是.
2022-05-24 16:46:25
530
3
原创 【C++入门基础篇】---- 万字解析
一、命名冲突在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。 命名空间中的内容,既可以定义变量,也可以定义函数,类型命名空间可以嵌套 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。命名空间的使用:加命名空间名称及........
2022-05-22 20:42:59
937
4
原创 数据结构之排序 三
一、归并排序基本思想:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。1.1 递归方法静态图归并递归方法 代码://归并递归函数void _MergeSort(int* a,int left,int right,int* temp){ //不...
2022-05-18 19:57:16
357
2
原创 数据结构之排序 二
目录一、冒泡排序1.1 动态图1.2 代码1.3 优化1.4 特性1.5 三种排序的比较二、快速排序2.1 hoare版本静态图2.2 单趟 容易出现的问题2.2.1 特殊场景一2.2.2特殊场景二:2.3 单趟 正确的代码为(hoare版本)2.4 整体代码(递归)2.5 递归分析2.6 特性2.7 快速排序有序数组优化:三数取中法2.7.1 问题1:那么有什么方法可以解决快速排序有序数组的问题呢?2.7.2 问题2:为什么要解决..
2022-05-14 20:05:32
500
7
原创 数据结构之排序 一
一、 直接插入排序直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。举例: 如我们玩扑克牌时,就用了插入排序的思想 动态图:代码:void InsertSort(int* a,int n){ //比较的次数为n-2次 for (int i = 0;i < n-1;i++) { int end = i; int x = a[end+1].
2022-05-13 14:03:54
1140
6
原创 数据结构之二叉树 二
一、堆排序(1)方式一思路:建立堆,然后获取堆顶元素,再插入数组,在进行堆顶与最后一个元素交换,删除最后一个元素,从堆顶向下调整找到次大或次小的元素,依次重复//堆排序方式一:void HeapSort(int* arr,int n){ HP hp; HeapInit(&hp); int i = 0; //排成升序,建立一个n个元素的小堆,每次取堆顶的元素,堆顶的元素每次都是最小的,然后删除堆顶元素,之后就是次小的在堆顶 for (i = 0;i < n;i++) {
2022-05-07 14:20:39
663
原创 数据结构之二叉树基础相关oj题
一、单值二叉树965. 单值二叉树 - 力扣(LeetCode) (leetcode-cn.com)题目:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。思路一:在左右子树都存在的情况下,用根和左右子树相比较,如果都相等,则再比较根的左子树和其左右子树是否相等,直到其根为空,右子树也是如此。代码:/** * Definition for a binary tree node. * stru
2022-04-26 22:57:48
1352
6
原创 函数栈帧的创建和销毁(了解)
使用的环境是vs2013,不要使用太高级的编译器,越高级的编译器,越不容易学习和观察并且在不同的编译器环境下,函数调用的栈帧创建略有差异,具体细节取决于编译器的实现。1.寄存器:包括eax,ebx,ecx,edx 还有ebp,esp函数栈帧:ebp,esp这俩个寄存器中存放的是地址,这俩个地址是用来维护函数栈帧的...
2022-04-20 19:32:07
269
1
原创 数据结构之二叉树 一
一、树的概念及其结构树是一种非线性的数据结构,它由n(n>=0)个有限节点组成的一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下的。(1)有一个特殊的结点,称为根节点,根节点没有前驱结点。(2)除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、...、Tm,其中每一个集合Ti(1<=i<=m)又是一颗结构与树类似的子树。每颗子树的根节点有且只有一个前驱,可以有0个或多个后继,因此,树是递归定义的。生活中的..
2022-04-17 13:08:30
1264
1
原创 初学matlab(第三天)
一、变量的类型转换比如:将变量类型转换int81.char字符ASCLL码:2.string(1)字符串连接方式一(2)字符串连接方式二3. 逻辑操作与赋值(1)字符串数组(2)字符比较(每个位置分别做逻辑运算)(3)字符串与字符串的比较说明:tf=strcmp(s1,s2)比较s1和s2,如果二者相同,则返回1(true),否则返回0(false)。如果文本的大小和内容相同,则它们将视为相等。返回结果...
2022-04-14 22:56:43
1109
原创 数据结构之循环队列
目录一、循环队列的概念二、设计循环队列思路一:数组实现思路二:链表实现一、循环队列的概念为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。环形队列可以使用数组实现,也可以使用循环链表实现。重点:循环队列,无论使用数组实现还是链表实现,都要多开一个空间,也就意味着,要是一个存.
2022-04-12 21:23:26
7454
6
原创 数据结构之队列
一、队列(1)队列的概念队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出(FIFO)的原则。入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为对头如图:二、队列的实现队列既可以用数组和也可以用链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,每次删除队头,后面的元素就要向前移动,所以效率比较低(1)问题1:结构体和指针变量传参 1.当我们创建的只是一个指针变量的时候,如果我们要改变这个指针变..
2022-04-11 23:14:02
2418
10
原创 数据结构之栈
一、栈(1)栈的概念:是一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除的一端称为栈顶,另一端称为栈底。栈中的数据元素遵循后进先出或者先进后出的原则。如图:(2)压栈:栈的插入操作叫做进栈、压栈或者入栈,从栈顶压入数据 出栈:栈的删除操作叫做出栈。出数据也在栈顶如图 进栈:如图 出栈:(3)栈的实现:栈的 实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小如图 ...
2022-04-08 15:26:22
2989
4
原创 带头结点双向循环 -- 双向链表
一、双向链表初始化图解:phead链表的最后一个节点要指向第一个节点,第一个节点要指向最后一个节点,而第一个节点和最后一个节点都是第一个节点,所以phead->next = phead->prev = phead;代码:LTNode* InitList(){ //带头节点,循环链表 //哨兵位头结点 LTNode* phead = (LTNode*)malloc(sizeof(LTNode)); phead->next = phead->prev = phe
2022-04-06 15:05:56
3141
8
原创 初学matlab(第二天)
一、创建并运行第一个script步骤一:创建+代码步骤二:运行点击运行或按键盘F5二、常用快捷键%:单行注释ctrl + r:多行注释ctrl + t:取消多行注释ctrl + i:智能缩进%%:指定节ctrl + enter:执行节f5:运行程序三、debug调试程序第一步:加断点第二步:F5运行程序第三步:清除断点并且退出调试四、条件语句(1) if elseif else格式:if condi...
2022-04-04 19:40:11
2922
15
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人