自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 享元模式【结构型模式C++】

享元模式是一种结构型设计模式,它的主要目的是通过共享对象来减少系统中对象的数量,其本质就是缓存共享对象,降低内存消耗。内部状态和外部状态。内部状态是不会变化的,可以被多个对象共享,而外部状态会随着对象的使用而改变。比如,连接池中的连接对象,保存在连接对象中的用户名、密码、连接URL等信息,在创建对象的时候就设置好了,不会随环境的改变而改变,这些为内部状态。而当每个连接要被回收利用时,我们需要将它标记为可用状态,这些为外部状态。

2024-05-13 19:57:08 1011

原创 数据库设计规范

比如图书和读者,是一个典型的多对多的关系。我们就可以设计一个借书表,包含图书表的主键,以及读者的主键,以及借还标记等字段。学生表是多(N)的一方,会有个字段保存班级表的主键。,因为总金额可以由单价*数量得到,说明总金额是冗余字段,但是,增加总金额这个冗余字段,可以提高查询统计速度,这就是。我们设计表及其字段之间的关系,应尽量满足第三范式,但是有时候,可以适当冗余,来提高效率,比如如下张表。如果此字段关联另外的字段,那么加下划线_连接关联表字段的字段名。,以字段作为外键指向主表(1的这一方)的主键。

2024-05-07 22:30:00 1109

翻译 C++编码规范【参考】

在声明和定义函数的时候,函数的返回值类型应该和函数名在同一行;如果行宽度允许,函数参数也应该放在一行;否则,函数参数应该换行,并进行合理对齐。参数列表的左圆括号总是和函数名在同一行,不要单独一行;右圆括号总是跟随最后一个参数。ReturnType FunctionName(ArgType paramName1, ArgType paramName2) // Good:全在同一行...

2024-05-04 19:45:00 188

原创 外观模式【结构型模式C++】

外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。

2024-04-26 23:42:08 836

原创 装饰器模式【结构型模式C++】

装饰模式是一种结构型设计模式, 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。2.结构抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。具体构件(Concrete Component)角色:实现抽象构件,通过装饰角色为其添加一些职责。抽象装饰(Base Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。具体装饰。

2024-04-24 23:27:30 599

原创 组合模式【结构型模式C++】

组合模式又叫部分整体模式属于结构型模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。

2024-04-22 22:34:45 453

原创 桥接模式【结构型模式C++】

桥接模式是一种结构型设计模式,是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。

2024-04-19 22:56:54 1476

原创 适配器模式【结构型模式C++】

适配器模式是一种结构型设计模式, 又称为变压器模式、包装模式(Wrapper) 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

2024-04-17 23:25:35 542

原创 状态模式【行为模式C++】

状态模式是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。

2024-04-15 22:45:52 958

原创 访问者模式【行为模式C++】

访问者模式是一种行为设计模式, 它能将算法与其所作用的对象隔离开来。访问者模式主要解决的是数据与算法的耦合问题,尤其是在数据结构比较稳定,而算法多变的情况下。为了不污染数据本身,访问者会将多种算法独立归档,并在访问数据时根据数据类型自动切换到对应的算法,实现数据的自动响应机制,并确保算法的自由扩展。访问者模式在实际开发中使用的非常少,因为它比较难以实现并且应用该模式肯能会导致代码的可读性变差,可维护性变差,在没有特别必要的情况下,不建议使用访问者模式。

2024-04-13 09:00:25 1756

翻译 第四章 文件管理 [黑马课程]

因此可考虑让目录表简化,当文件找到对应的目录项时才需要将索引结点调入内存,存放在外存中的索引结点称为磁盘索引结点,当索引结点放入内存后称为内存索引结点(相比磁盘结点需要增加一些信息)。顺序文件:文件中的记录一个个顺序排列(逻辑上),记录可以是定长的or可变长的。索引结点是对文件控制块的优化,在查找各级目录的过程中只需用到文件名这个信息,只有文件名匹配时才需要读出文件的其他信息,索引分配允许文件离散的分布在各个磁盘中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块。

2024-04-12 08:45:14 82

原创 策略模式【行为模式C++】

策略模式是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。策略模式通常应用于需要多种算法进行操作的场景,如排序、搜索、数据压缩等。在这些情况下,不同的算法有不同的优缺点和适用性,因此需要进行选择。通过使用策略模式,我们可以轻松地切换算法,而无需修改客户端代码。这使得代码更加灵活、可扩展、易于维护,减少了重复的代码,并提高了代码的可读性。

2024-04-11 17:39:56 921

翻译 第五章:IO管理 [黑马课程]

IO设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。按特性分类特点人机交互类外部设备数据传输速度较慢,如鼠标、键盘、打印机等数据存储设备数据传输速度较快,如移动硬盘、光盘等网络通信设备数据传输速度一般,如调制解调器等网络通信按信息交换单位分类特点块设备传输速率较高、可寻址(随机读写某个块),如磁盘等数据传输基本单位为块字符设备传输速率较慢、不可寻址(在IO时常采用中断驱动的方式),如鼠标、键盘等数据传输基本单位为字符。

2024-04-10 13:36:49 102

原创 模板方法模式【行为模式C++】

模板方法模式是一种行为设计模式, 它定义了一个算法的框架,并将具体步骤延迟到子类中实现。在该模式中,父类中定义一个模板方法来描述算法的基本流程,在这个过程中,某些步骤可以通过抽象方法或空置来延迟到子类中实现。通常情况下,当我们处理一些相似的任务时,会发现这些任务之间有很多共性,只是其中一些步骤不同而已。如果每次都重复编写代码,既费时又容易出错。因此,为了解决这个问题,就产生了模板方法模式,它把这些共性代码抽象到父类中,子类只需要覆盖特定的步骤即可。

2024-04-10 13:14:03 1946

原创 备忘录模式【行为模式C++】

备忘录模式是一种行为设计模式, 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。备忘录模式将创建状态快照 (Snapshot) 的工作委派给实际状态的拥有者原发器对象。这样其他对象就不再需要从 “外部” 复制编辑器状态了, 编辑器类拥有其状态的完全访问权, 因此可以自行生成快照。模式建议将对象状态的副本存储在一个名为备忘录(Memento)的特殊对象中。除了创建备忘录的对象外, 任何对象都不能访问备忘录的内容。

2024-04-07 22:09:29 473

原创 中介者模式【行为模式C++】

中介者模式是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。亦称: 调解人、控制器、Intermediary、Controller、Mediator。

2024-04-06 15:06:03 635

原创 命令模式【行为模式C++】

命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。

2024-04-06 11:06:51 870

原创 迭代器模式【行为模式C++】

迭代器模式是一种行为设计模式, 让你能在不暴露集合(聚合对象)底层表现形式 (列表、 栈和树等) 的情况下遍历集合(聚合对象)中所有的元素。迭代器的意义就是将这个行为抽离封装起来,这样客户端只需要调用合适的迭代器,来进行对应的遍历,而不用自己去实现这一行为。2、结构定义访问和遍历聚合对象中元素的接口,包括获取下一个元素、判断是否还有下一个元素等方法。实现迭代器接口,存储聚合对象的当前状态,负责遍历聚合对象中的元素。定义创建相应迭代器对象的接口,一般是一个集合类,如列表、数组等。

2024-04-06 09:10:02 838

原创 6.C++ 静态成员

在静态成员变量的定义中,不需要加上static关键字。与普通变量不同的是,静态成员变量虽然在类中声明,但需要在类外定义,而非构造函数中定义,定义时注意不加static关键字。

2024-04-04 22:59:12 746

原创 7.C++ 模板(进阶)

1. 当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型。(2)全局函数类外实现:需要提前让编译器知道全局函数的存在。3. 如果想灵活指定出父类中T的类型,子类也需变为类模板。(1)全局函数类内实现:直接在类内声明友元即可。2. 如果不指定,编译器无法给子类分配内存。将对象中的参数变为模板进行传递。将这个对象类型模板化进行传递。直接显示对象的数据类型。

2024-04-03 22:17:13 219

原创 7.C++ 模板(基础)

C++ 早期对模板的支持并不严谨,没有引入新的关键字,而是用 class 来指明类型参数,但是 class 关键字本来已经用在类的定义中了,这样做显得不太友好,所以后来 C++ 又引入了一个新的关键字 typename,专门用来定义类型参数。所谓函数模板,实际上是建立一个通用函数,它所用到的数据的类型(包括返回值类型、形参类型、局部变量类型)可以不具体指定,而是用一个虚拟的类型来代替(这就是类型的参数化。在函数模板中,数据的值和类型都被参数化了,发生函数调用时编译器会根据传入的实参来推演形参的值和类型。

2024-04-03 21:39:08 759

原创 责任链模式【行为模式C++】

责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。责任链模式在实际开发中非常常用,它可以帮助我们简化代码结构,提高可维护性和可扩展性。使用责任链模式可以避免代码中出现大量的条件语句,同时也使得代码更加灵活,易于修改和扩展。

2024-04-03 16:24:35 1084

原创 观察者模式【行为模式C++】

观察者模式(Observer)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,其他所有依赖于它的对象都会自动被通知并更新。这个模式也被称为 发布/订阅模式。观察者模式通常用于需要实现事件驱动系统的场景中。例如,(1)当用户订阅了一个新闻网站的推送服务后,当这个网站发布了新的文章时,它会将这些更新通知给所有的订阅用户。在这个例子中,订阅用户是观察者,新闻网站是被观察者。(2)例如解析excel表格,当解析excel每一行信息时,需要同时通知给界面进度更新。

2024-04-03 15:57:43 885

原创 C++运算符重载

操作符重载: Complex operator+ (Complex& c1,Complex& c2);operator是个关键字,可以形像的当做一个函数名字,重载了这个+运算符。操作符重载主要针对用户自建的类,要进行一些运算,因为编译器不认识它们。complex就是C++的类,可当做是用户新建的;(xxx, xxx);就是参数表,数量不限;

2023-10-12 19:32:41 50

原创 引用与指针

C++提供了重载运算符的功能,我们在重载某些操作符的时候,使用引用型返回值可以获得跟该操作符原来语法相同的调用方式,保持了操作符语义的一致性。C++中引入了引用操作,在对引用的使用加了更多限制条件的情况下,保证了引用使用的安全性和便捷性,还可以保持代码的优雅性。在适合的情况使用适合的操作,引用的使用可以一定程度避免“指针满天飞”的情况,对于提升程序稳定性也有一定的积极意义。比如引用强制要求必须初始化,可以让我们在使用引用的时候不用再去判断引用是否为空,让代码更加简洁优美,避免了指针满天飞的情形。

2023-10-12 14:35:44 40

转载 宏定义使用

如果你有一个复杂的函数,变量很多,而且你不想要增加新的函数,可以使用do{...}while(0),将你的代码写在里面,里面可以定义变量而不用考虑变量名会同函数之前或者之后的重复。这里将函数主体部分使用do{...}while(0)包含起来,使用break来代替goto,后续的清理工作在while之后,现在既能达到同样的效果,而且代码的可读性、可维护性都要比上面的goto代码好的多了。内核中由于不同架构的限制,很多时候会用到空宏,。为了解决这种问题,在写代码的时候,通常可以采用。

2023-10-11 14:16:18 52

原创 C++虚函数的vptr与vtable

简单的说,通过virtual函数,指向子类的基类指针可以调用子类的函数。除此之外,上述代码大家会看到,也包含了手动获取vptr地址,并调用vtable中的函数,那么我们一起来验证一下上述的地址与真正在自动调用vtable中的虚函数,比如上述。与this指针不同,this指针实际上是编译器用来解析自引用的函数参数,vptr是一个真正的指针。虚拟表包含可由类的对象调用的每个虚函数的一个条目。虚拟表有时会使用其他名称,例如“,然后再对比上述的结果会发现与手动调用的fun1一致,fun2类似,以此证明代码正确!

2023-10-11 11:39:22 156

原创 纯虚函数与抽象类

当基类指针指向派生类对象并删除对象时,我们可能希望调用适当的析构函数。C++中的纯虚函数(或抽象函数)是我们没有实现的虚函数!抽象类只能作为基类来派生新类使用,不能创建抽象类的对象,抽象类的指针和引用->由抽象类派生出来的类的对象!抽象类中:在成员函数内可以调用纯虚函数,在构造函数/析构函数内部不能使用纯虚函数。如果我们不在派生类中覆盖纯虚函数,那么派生类也会变成抽象类。构造函数不能是虚函数,而析构函数可以是虚析构函数。必须实现了基类中的所有纯虚函数,才能成为非抽象类。如果一个类从抽象类派生而来,它。

2023-10-11 11:08:41 32

原创 sizeof使用

sizeof 类

2023-10-11 10:43:26 34

原创 编程学习-系统命令

win+R打开菜单 输入命令 可以快速执行一些程序或者功能calc 打开计算器(常用)notepad 记事本mspaint 画图板write word文档pause 暂停cls 清空屏幕的内容title 设置标题shutdown 关机命令网络命令ping 命令ipconfig 命令netsh wlan show profilesnetsh wlan show profiles "网络名" key=clear...

2022-07-14 15:30:19 179 1

原创 C++中类的拷贝控制在Wxwidget源码应用

在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用,而是在创建对象时自动执行。这种特殊的成员函数就是构造函数。1.拷贝构造函数拷贝构造函数是构造函数之一,它的参数是自身类类型的引用,且如果有其他参数,则任何额外的参数都有默认值。class exmple{ public: exmple(); exmple(const exmple&); };2.拷贝赋值运算符 拷贝赋值运算符是一个对赋值运算符的重载函数,...

2022-05-24 09:22:41 119

原创 Wxwidegets入门

wxWidgets既可以构建为一个大型库(这称为整体构建),也可以构建为几个较小的库(多库构建)。默认为多库构建。wxWidgets库分为几个库,简要描述如下。下图显示了它们之间的依赖关系:wxBase类每个wxWidgets应用程序都必须链接到这个库。它包含任何wxWidgets代码所依赖的强制类(例如wxString)和抽象平台间差异的可移植类。wxBase可用于开发控制台模式的应用程序,它不需要任何GUI库可在Unix上运行X Window系统。wxCore类基本的GUI类,如

2022-05-19 17:09:04 294

原创 C++标准头文件

sqlite3.h标准头文件#ifndef _SQLITE3RTREE_H_#define _SQLITE3RTREE_H_#ifdef __cplusplusextern "C" {#endiftypedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;/*** Register a geometry callback named zGeom that can be used as part of an** R-T

2022-05-19 15:17:52 452

原创 (1)单例模式几种实现方式

单例模式1中代码并不是线程安全的,当多个线程同时调用get(),会创建多个实例从而导致内存泄漏(会new多次但我们只能管理唯一的一个instance),可通过加锁实现线程安全。class Singleton { public: static Singleton* GetInstance() { if (instance_ == nullptr) { // 加锁保证多个线程并发调用getInstance()时只会创建一个实例 ...

2022-05-17 16:39:17 148

翻译 (1)单例模式1

单例模式(Singleton Pattern)是 最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 介绍 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主

2022-05-17 14:42:48 62

翻译 设计模式基础

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用,共有23 种设计模式。这些模式可以分为三大类:创建型模式、结构型模式、行为型模式。序号 描述 包括 1 创建型模式 提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。 工厂模式 抽象工厂模式 单例模式 建造者模式 原型模式 2 结构型模式 这些设计模式关注类和对象的组合

2022-05-14 14:35:47 84

转载 JSON基础学习

JSON 全称“JavaScript Object Notation”,尽管 JSON 的名称中包含“JavaScript”,但它并不是只能在 JavaScript 中使用,大多数编程语言都支持 JSON(些可以通过第三方库得到支持),例如Java、PHP、Python、C++ 等。在 JSON 中,使用以下两种方式来表示数据:Object(对象):键/值对(名称/值)的集合,使用花括号{ }定义。在每个键/值对中,以键开头,后跟一个冒号:,最后是值。多个键/值对之间使用逗号,分隔,例如{"name

2022-05-14 11:18:35 688

TCNOpen开源源码实现TRDP通信,包括源码下载,开发环境搭建,编译运行,测试

TCNOPEN的总体目标是提供一个合适的环境,开放的兴趣团体。其中合作伙伴公司可以合作开发符合TCN标准的新组件。 对于每个需求,将启动一个特定的开源项目,该项目将贯穿所有需要的阶段:规范、开发、测试、支持。 第一个项目目前正在进行中,与开发的TRDP模块有关。 TRDP(列车实时数据协议)是TCP或UDP协议与使用网络的应用之间的中间模块。 它地包括一个可选附加的安全层(SDT)。SDT是在不可信通信信道上的端到端协议。 SDT实现IEC62280(En50159),并支持安全数据源与一个或多个安全数据接收器之间的安全相关数据的传输。 TRDP体系结构 TRDP组件包括PDCom, MDCom, TRDP Light, VOS(虚拟操作系统)和Utilities。 PDCom处理过程数据,而MDCom处理TCN上的消息数据通信。 TRDP与网络的其他用户共存,例如流通信(如TCP/IP)和基于尽力而为的通信(如UDP/IP)。 TRDP由两个级别组成:轻量TRDP和全功能TRDP。 两个级别都由不同的可选实用程序支持,例如编组/解包、读取TRDP XML配置或转换IP/URI地址。

2024-04-13

wireshark TRDP插件,支持32位与64位操作系统

wireshark TRDP插件,支持32位与64位操作系统

2022-05-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除