- 博客(21)
- 资源 (68)
- 收藏
- 关注
原创 (P49)异常:C语言错误处理方法,C++异常处理方法,C++异常处理优点
文章目录1.C语言错误处理方法2.C++异常处理方法3.C++异常处理优点1.C语言错误处理方法返回值(if … else语句判断错误)eg:写个小程序:源文件拷贝到目标文件int copy(const char* src, char* dst){ open(src); return -1; open(dst); return -2; read(src, buf); return -3; write(dst, buf); return -4; return 0;}
2020-10-29 23:04:31 435
转载 漫画:什么是B+树,B+树层数计算(面试官直呼内行)
文章目录1.什么是B+树2.B+树层数计算(面试官直呼内行)1.什么是B+树一个m阶的B树具有如下几个特征:1.根结点至少有两个子女。2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m4.所有的叶子结点都位于同一层。5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。一个m阶的B+树具有如下几个特征:1.有k个子树的中间节点包
2020-10-29 17:12:04 5449
原创 (P46)面向对象版表达式计算器:让表达式计算器支持变量赋值 ,Calc类实现
文章目录1.让表达式计算器支持变量赋值1.让表达式计算器支持变量赋值eg:a=5,解析成一个表达式树应该如下,其中a变量的值应该从Storage类中去获取AssignNode节点的Calc方法,比如:x=5,=号节点的值,其实等于x节点,也等于5节点,首先取出右节点的值,然后调用左节点的Assign方法类图如下:新增变量节点VariableNode,VariableNode继承至Node,在Node中新增Assign方法,用以变量赋值,IsValue判断变量是左值,其他节点都不是左值;
2020-10-28 22:57:22 656
原创 (P45)面向对象版表达式计算器:Storage类实现
文章目录1.Storage类实现1.Storage类实现Storage类用于存储一些变量与常量的值eg:支持pi,e,比如pi=3.14,则pi+3=6.14Storage类图如下:cells_:保存变量与常量的值inits_:变量与常量是否初始化Storage类的接口如下:Storage:SymbolTable:变量,常量的符号保存在SymbolTableclear:清除变量,常量AddConstants:添加常量IsInit:检测变量或者常量是否初始化,id代表其id,变
2020-10-27 23:08:47 337
转载 CentOS7配置kdump
文章目录1.kdump简介2.配置kdump1.kdump简介kexec是一个快速启动机制,允许通过已经运行的内核的上下文启动一个Linux内核,不需要经过BIOS。BIOS可能会消耗很多时间,特别是带有众多数量的外设的大型服务器。这种办法可以为经常启动机器的开发者节省很多时间。kdump是一个新的,而且非常可信赖的内核崩溃转储机制。崩溃转储数据可以从一个新启动的内核的上下文中获取,而不是从已经崩溃的内核的上下文。当系统崩溃时,kdump使用kexec启动到第二个内核。第二个内核通常叫做捕获内
2020-10-27 16:29:56 2410
原创 (P44)面向对象版表达式计算器:符号表SymbolTable的实现
文章目录1.符号表SymbolTable的实现1.符号表SymbolTable的实现接下来的任务是让表达式支持变量与函数eg:a=100,a是符号eg:a+5+log(0),a是变量这里变量名与函数都算是符号,所以要有一个表存储这些符号SymbolTable用map来表示,map<符号,符号所对应的id(从0开始)>Add:往符号表中增加一个符号,返回值是该符号的id;Find:根据某个符号,查找某个符号的id;Clear:清除;GetSymbolName:
2020-10-26 22:58:10 698 1
原创 (P43)面向对象版表达式计算器:更正设计缺陷
文章目录1.更正设计缺陷1.更正设计缺陷算数表达式解析器的一个缺陷在于它的语法是右结合的。这意味着,8-2+1被解析为8-(2+1)可以通过更正语法可以设计成左结合的,把它设计成表达式+一个项;expresion:=expresion ‘+’ term,但这这会导致无限循环(Expr调用Expr,Expr又调用Expr。。。)前面的方法都是右递归,这里是左递归一种解决办法使用左结合的方法;SumNode有多个子代,主要处理+和-法运算;ProdectNode也有多个子代,主要处理*和
2020-10-25 17:37:36 212
原创 (P42)面向对象版表达式计算器:Parser类的实现
文章目录1.Parser类的实现1.Parser类的实现功能:对表达式进行解析,生成一颗表达式树03:15
2020-10-21 23:22:13 409
原创 (P41)面向对象版表达式计算器:Scanner类的实现 ,Scanner
文章目录1.Scanner类的实现2.Scanner1.Scanner类的实现Scanner类的类图作用:一个字符一个字符扫描一个表达式,等级表达式当前的状态curPos_:当前扫描到的位置;token_:当前扫描到的状态;Scanner类方法如下:Number:扫描到数字,返回数字;Accept:扫描一个字符,登记当前的状态Tocken:返回当前状态;SkipWhite:跳过空白;表达式当前的状态如下:EToken是枚举量扫描完毕;ERROR;扫描到数字;扫描到加号;
2020-10-20 23:30:30 344
原创 (P6)epoll:
文章目录epoll LT模式,电平触发什么时候触发EPOLLIN事件?内核中的socket接收缓冲区为空,可以理解为低电平,就不会触发;内核中的socket接收缓冲区不为空,可以理解为高电平,就会触发;什么时候触发EPOLLOUT事件?内核中的socket发送缓冲区不满时,可以理解为高电平,就会触发EPOLLOUT事件;内核中的socket发送缓冲区满时,可以理解为低电平;epoll ET模式,边沿触发LT模式是高电平触发ET模式:低电平->高电平,触发;高电平->
2020-10-18 22:28:23 61
原创 (P5)epoll:epoll ,epoll LT ,epoll ET
文章目录1.epoll2.epoll LT3.epoll ET1.epoll2.epoll LTepoll LT图-eg:05\echosrv_epoll.cpp#include <unistd.h>#include <sys/types.h>#include <fcntl.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>
2020-10-15 22:51:00 182
原创 (P4)poll:poll使用的基本流程 ,EMFILE处理 ,cmake
文章目录1.poll使用的基本流程2.EMFILE处理1.poll使用的基本流程epoll的LT电平触发模式与poll模型(就是电平触发模式)的用法是完全一模一样的。要记住!(P3)poll:poll函数原型中的例子03\echosrv_poll.cpp是玩具代码,why?(1)如果应用层发过来的数据包,刚好分包了,即:一个数据包,两次read(粘包问题),第一次read时并不是一个完整的客户端请求,该怎么办呢?对于每一个connfd分配一个应用层缓冲区,我们应该将读到的数据保存在con
2020-10-14 23:06:56 630
原创 (P3)poll:poll函数原型
文章目录1.poll函数原型1.poll函数原型poll与select使用方式一样函数原型#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);参数:fds:结构体指针,可以把结构体数组的首地址传递进来;fds是输入输出参数,一旦这些事件中的一个或多个发生了,就会返回回来,所以可以根据poll返回回来的事件来进行处理;nfds:监听的fd的个数;timeout:超时时间;st
2020-10-14 22:06:27 428
原创 (P40)面对对象版表达式计算器:分清值语义与对象语义 ,表达式解析
文章目录1.分清值语义与对象语义2.表达式解析1.分清值语义与对象语义值语义时指对象的拷贝与原对象无关。拷贝之后就与原对象脱离关系,彼此独立互不影响。eg:int,C++中的内置类型都是值语义,三个标准库类型string,vector,map也是值语义;eg1:class A{public: A() { //分配了资源 } ~A() { //释放了资源 }};类A当前是值语义吗?不是的!因为没有实现拷贝构造函数,没有进行深拷贝。因为默认的拷贝构造函数时浅拷贝eg
2020-10-13 23:15:15 312
原创 (P39)面向对象版表达式计算器:表达式树,类设计
文章目录1.表达式计算器设计3.类设计1.表达式计算器设计表达式树将5+3*6解析成表达式树,整个表达式的值就等于根节点+的值,而根节点的值=其左节点5+右节点*的值(根节点的计算要依赖于其左节点和右节点),而*节点的值=左节点3+右节点6的值。所以,要计算根节点的值,需要递归的遍历底下的子节点来进行计算。类设计,继承体系NumberNode数字节点的Calc方法等于数字本身,BinaryNode二元运算节点:+或者*运算的节点,有两个操作数,左操作数,右操作数加法运算节点AddNode
2020-10-12 22:59:38 564
原创 (P38)类与类之间的5种关系:UML ,继承(泛化) ,关联 ,聚合 ,组合 ,依赖 ,总结
文章目录2.UML2.继承(泛化)3.关联4.聚合5.组合6.依赖2.UMLUML:Unified Modeling Language(UML)又称为统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言。UML:为软件开发提供了一些标准的图例(10种),统一开发思想,从而促进团队协作;什么时候使用UML?这涉及到软件过程:分析,设计,编码,测试,维护;2种软件过程:(1)RUP,Rational Unified Process统一
2020-10-11 11:12:58 944
原创 (P37)RTTI运行时类型信息:RTTI:runtime type information ,dynamic_cast运算符 ,typeid运算符 ,type_info
dynamic_cast需要运行时的支持,它在运行的时候会坚持C++对象的运行时RTTI信息,来达到一个动态的转化,dynamic_cast是安全的向下转型,dynamic_cast运算符,typeid运算符,type_info是支持的RTTI的运算符的;C++对象模型是通过虚表和虚基类表来支持的,C++对象模型还包含一些额外的信息,就是RTTI;(2)reinterpret_cast,用在编译器不认可的可转型,注意下面三个都是静态转化的,不需要运行时的支持。RTTI的作用是运行时进行类型识别;......
2020-10-10 23:35:35 292 2
原创 (P36)对象动态创建
文章目录1.对象动态创建1.对象动态创建反射技术指的是:动态获取类型信息(指的是:方法与属性);反射技术就是在运行时,动态创建对象,动态调用对象的方法,动态操作对象的属性;要实现反射,需要给每个类添加元数据,这些元数据就是类的方法与属性;我们这里只讲动态创建对象,即:对原有的类不做任何更改,只需要增加一个宏就能实现动态创建;总结(1)避免了P35\01.cpp中工厂模式的if else语句的编写(2)增加了可扩展性,增加一个新类,不需要再工厂模式的类中增加if else语句(3)可以将
2020-10-09 23:17:42 374
原创 (P35)虚函数与多态:纯虚函数 ,抽象类 ,多态 ,虚析构函数
文章目录1.纯虚函数2.抽象类3.多态1.纯虚函数虚函数的特征:基类之指针指向派生类的对象,调用的是派生类的虚函数,若不是虚函数,则调用的还是基类的函数,是依据类型来决定的;这就可以使得我们可以以一致的观点来看待不同的派生类对象,而不需要关注派生类对虚函数是如何实现的;该过程是动态绑定的,也就是在运行时刻才确定虚函数实际的入口地址;虚函数是实现多态性的前提(1)需要在基类中定义共同的接口(2)接口要定义为虚函数如果基类的接口没办法实现怎么办?eg:形状类Shape,它是一个抽
2020-10-08 23:02:04 269
原创 (P34)虚函数与多态:多态 ,静态绑定与动态绑定 ,虚函数 ,虚表指针 ,object slicing与虚函数 ,overload,override,overwrite
文章目录1.多态2.静态绑定与动态绑定3.虚函数4.虚表指针5.object slicing与虚函数6.overload、override、overwrite1.多态多态性是面向对象程序设计的重要特征之一多态性是指发出同样的消息被不同类型的对象接收时,有可能导致完全不同的行为(1)调用同名的函数导致不同的行为(2)以一致的观点来看待,从同一个基类派生下来的所有派生类对象,减轻了我们分别设计的负担多态的实现:(1)函数重载:调用同名的函数,静态绑定(2)运算符重载,静态绑定(3)模板,静态
2020-10-07 22:49:06 246 1
原创 (P33)继承:虚继承对C++对象内存模型造成的影响
文章目录1.虚继承对C++对象内存模型造成的影响2.虚基类表1.虚继承对C++对象内存模型造成的影响影响类大小的几个因素(1)类大小计算遵循前面学过的结构体对齐原则(2)类的大小与数据成员有关,与数据成员函数无关(3)类的大小与静态数据成员有关(4)虚继承对类的大小的影响(5)虚函数对类的大小的影响2.虚基类表类B1虚继承至BB,它有个数据成员b1_,其他类似...
2020-10-04 15:33:08 374
Shell编程ppt[C++教程网cppcourse[1].com].zip
2020-05-06
跟我一起学C++.zip
2020-05-06
NetworkProgramming-master.zip
2020-05-06
muduo_server_learn.zip
2020-03-12
Docker学习资料总结.7z
2020-02-08
VS code的linux服务器端的离线安装教程
2019-11-09
Scientific.Toolworks.Understand.v4.0.811.Incl.Keygen-AMPED.zip
2019-09-07
vscode的remote ssh中需要的ubuntu服务器中的sshd配置文件
2022-06-19
postgresql数据库插件PG-Strom中Scan算子执行流程分析
2022-03-16
CUDAppt.zip
2021-12-28
cpptools-osx.vsix
2019-12-05
VSCode Cpptools最新版1.40.2版本.7z
2019-12-04
VSCode Cpptools.7z
2019-12-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人