对c++中虚函数和纯虚函数的理解
1 虚函数和纯虚函数的作用
定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。
https://blog.csdn.net/Hackbuteer1/article/details/7558868
c++中的虚函数是为了实现多态而诞生的,纯虚函数是为了实现抽象类的概念,这两个函数的作用都是为了增强c++语言的面向对象编程能力。话不多说,直接上代码案例。
2 虚函数虚函数为了实现多态,也就是同一个函数有多种不同的形态。在程序应用中,可以这么理解,就是用父类的指针去调用子类中的方法,这样就大大较少了程序中的代码量,可以用一个指针调用其所有派生类中的方法,使得编程的代码量又大大减少。
2.1 虚函数的定义虚函数的定义很简单,就是在该函数前面加一个virtual关键字,告诉编译器,这是一个虚函数。形式如下:
父类中的写法:
1virtual void say(){cout << ...
c++序列化以及反序列化实现
1 什么是序列化和反序列化
当我们在写程序时,比如说我们自定义了一个实体类Person,然后在程序中创建一个该实体类对象,并给对象赋了一些值,但是我们想将这些数据发给我们的其他的程序员朋友,让他们也可以调用我们创建的这个实体类并使用我们的数据,这个时候我们就需要使用到序列化和发序列化。
1.1 序列化序列化就是将内存中运行的程序中的数据结构数据存储到磁盘的文件中,使其能够持久化存在电脑中,就算程序停止,这些数据也能一直存在。、
1.2 反序列化顾名思义,也就是序列化的反操作,就是将已经存在磁盘文件中的数据读取到程序中继续使用的这么一个操作。
2 代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101#include <iostream> ...
github如何上传大于100M的文件
在命令行输入如下命令:
1git config http.postBuffer 524288000
然后执行git config -l查看配置,我们会发现最下面会多出一条记录:
12345678910111213141516171819202122232425262728293031323334$ git config -lcore.symlinks=falsecore.autocrlf=truecore.fscache=truecolor.diff=autocolor.status=autocolor.branch=autocolor.interactive=truehelp.format=htmlrebase.autosquash=truehttp.sslcainfo=G:/software/git/Git/mingw64/ssl/certs/ca-bundle.crthttp.sslbackend=openssldiff.astextplain.textconv=astextplainfilter.lfs.clean=git-lfs clean -- %ffilt ...
next主题,文章链接是当前域名下的一个项目,并不是直接链接,修改版权部分信息
1 修改前部分文件路径:G:hexo-blog\lizhi\themes\next\layout\_macro\post-copyright.swg
1234567891011121314<ul class="post-copyright"> <li class="post-copyright-author"> <strong>{{ __('post.copyright.author') + __('symbol.colon') }}</strong> {{ post.author | default(config.author) }} </li> <li class="post-copyright-link"> <strong>{{ __('post.copyri ...
TypeError: imagemin.jpegtran is not a function
1 错误1234567891011121314151617[22:39:01] Using gulpfile G:\codeFolder\hexo-blog\lizhi\gulpfile.js[22:39:01] Starting 'default'...[22:39:01] Starting 'minify-html'...[22:39:01] Starting 'minify-css'...[22:39:01] Starting 'minify-js'...[22:39:01] Starting 'minify-images'...[22:39:02] 'minify-images' errored after 86 ms[22:39:02] TypeError: imagemin.jpegtran is not a function at G:\codeFolder\hexo-blog\lizhi\gulpfile.js:60:22 at minif ...
算法,数据反转算法
1 要求给定一组数据,将其倒序输出,如:
input: [1,2,3,4,5]output: [5,4,3,2,1]
input: [‘h’,’e’,’l’,’l’,’o’]output: [‘o’,’l’,’l’,’e’,’h’]
2 题解使用双指针,遍历数组长度的一半次数,即可,不需要借助额外的临时数组。
3 代码3.1 python1 method one
12345678def reverse(array_like): i=0 j=len(array_like)-1 while(i<=j): array_like[i],array_like[j] = array_like[j],array_like[i] i += 1 j -=1 return array_like
2 method two
12for i in range(len(array_like)>>1): array_like[i],array_like[len(array_like)-1-i] = array_lik ...
matplotlib基本用法介绍
0 代码import的包123456from matplotlib import pyplot as pltfrom matplotlib.pyplot import savefigimport numpy as npimport pandas as pdfrom statsmodels.graphics.tsaplots import plot_acfimport matplotlib.gridspec as gs
1 散点图1.1 normal scatter123456789def scatter(): x = np.random.randint(1,20,10) y = np.random.randint(1,10,10) plt.scatter(x,y) plt.xlabel("x values") # 设置x轴的显示 plt.ylabel("y values") # 设置y轴的显示 plt.title("scatter test") #设置标题 savefig(" ...
一篇文看透二叉树,先序遍历、中序遍历、后序遍历、广度优先、深度优先,java实现
1 二叉树的定义
在计算机科学中,二叉树(英语:Binary tree)是每个节点最多只有两个分支(即不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”或“右子树”。二叉树的分支具有左右次序,不能随意颠倒。
二叉树的第$i$层至多拥有$2^{i-1}$个节点;深度为$k$的二叉树至多总共有$2^k-1$个节点(定义根节点所在深度$k_0=0$),而总计拥有节点数符合的,称为“满二叉树”;深度为$k$有$n$个节点的二叉树,当且仅当其中的每一节点,都可以和同样深度的满二叉树,序号为1到$n$的节点一对一对应时,称为完全二叉树。对任何一棵非空的二叉树$T$,如果其叶片(终端节点)数为$n_0$,分支度为2的节点数为$n_2$,则$n_0=n_2+1$。
与普通树不同,普通树的节点个数至少为1,而二叉树的节点个数可以为0;普通树节点的最大分支度没有限制,而二叉树节点的最大分支度为2;普通树的节点无左、右次序之分,而二叉树的节点有左、右次序之分。
二叉树通常作为数据结构应用,典型用法是对节点定义一个标记函数,将一些值与每个节点相关系。这样标记的二叉树就可以实现二叉 ...
用两个队列实现栈,java代码实现
1 实现原理介绍队列和栈的功能在用两个栈实现队列,java代码实现这边文章中已经介绍过了,这里就不多说了,直接讲实现原理:
当需要插入元素时,总是将新元素插入到那个空的队列中,然后再将另一个有数据的队列中的数据,取出插入到存放新元素的队列中,即可完成栈的功能。注意,每次执行完一次操作,两个队列中,只有一个队列有数据,要么是A,要么是B。下面画图介绍具体过程:
插入元素1
此时有数据的是队列A。
插入元素2
此时有数据的是队列B。
插入元素3
此时有数据的队列A。
删除栈顶元素,pop操作
2 java代码实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970import java.util.LinkedList;import java.util.Queue;public class QueueToStack { public stat ...
用两个栈实现队列,java代码实现
1 队列的功能介绍队列的功能就是FIFO(先进先出)原则。不管是队列还是栈,他们的功能都是存储数据,底层实现可以数组也可以是链表,但是他们各自有他们的特点。既然队列也是存储数据的一种数据结构,那么他就有增删改查等功能。队列的添加元素是在队尾添加,删除元素是在队头删除。
下面介绍一下队列的增删改查操作:
push(int x):在队列尾部添加一个元素
pop():删除队列头部第一个元素
empty():判断是否为空队列
peek():获取队列头部元素
2 栈的功能介绍栈也是一种存储数据的数据结构,和队列不同的是,这是一种FILO(先进后出)的数据结构,插入和删除都在栈顶完成。
下面介绍一下的栈的增删改查操作:
push(int x):向栈中插入一个元素
pop():删除栈顶元素
top():获得栈顶元素,打印,不删除
empty():判断是否为空
3 栈实现队列的原理介绍3.1 方式1原理介绍方式1将栈A作为最终的栈,即栈A中的元素排序和队列中的排序一致,此种方式在push元素入队列时,需要同时操作两个栈,比较消耗时间和空间,但是其他的操作(比如pop,top等)就不会消耗太多的 ...