- 博客(40)
- 收藏
- 关注
原创 gcc g++的区别
是 GNU 编译器套件中的两个重要工具,它们的核心区别在于。强制所有文件按 C++ 处理,无论扩展名。(C++ 编译器),但传递的默认参数不同。自动链接 C++ 标准库,无需额外操作。编译 C++ 时需手动启用这些特性。默认不链接 C++ 标准库(如。两者都是调用 GCC 的。编译 C 代码时不会。
2025-02-27 14:33:09
228
原创 模板实现必须放在头文件中与特殊情况
但可以通过特定技术实现部分分离。这保持了代码的可读性,但本质上实现仍在头文件中。会被编译器实例化,其他类型(如。,可以通过显式实例化将实现放在。时,编译器无法实例化。)仍会引发链接错误。
2025-02-27 10:25:52
407
原创 HTTP 和 TCP/IP-傻傻分不清
HTTP 是应用层协议,必须基于 TCP/IP(或其他传输层协议,如 QUIC/HTTP3)才能工作。:TCP 通过四次挥手断开连接(HTTP/1.1 默认启用 Keep-Alive 复用连接)。:TCP/IP 像高速公路和物流系统,HTTP 像快递包裹上的订单信息。:TCP/IP 可支持多种应用层协议(如 FTP、SMTP、SSH)。是构建在 TCP/IP 之上的“应用规则”,定义数据如何交互。HTTP 和 TCP/IP 是计算机网络中不同层次的协议,:认为 HTTP 是替代 TCP/IP 的协议。
2025-02-17 14:16:27
1481
1
原创 设计原则名称与缩写统计
在软件设计领域,有许多重要的设计原则,以下为你介绍常见的设计原则及其名称和缩写:=========================================================================
2025-02-13 17:30:58
681
原创 TCP/IP 四层模型数据的封装过程
TCP/IP 数据的封装过程是数据在网络中传输时的核心机制,它将数据逐层添加协议头部信息,最终转换为物理层可传输的比特流。:用户应用程序(如HTTP、FTP、SMTP)生成需要传输的数据(例如一个网页请求或电子邮件内容)。IP层添加源IP(192.168.1.100)和目的IP(如203.0.113.5),封装为IP包。以太网层添加源MAC(00:1A:2B:3C:4D:5E)和目的MAC(网关MAC),封装为帧。源IP地址、目的IP地址、TTL(生存时间)、协议类型(TCP/UDP)、校验和等。
2025-02-13 17:12:16
870
原创 tcp/ip网络模型
TCP/IP(Transmission Control Protocol/Internet Protocol)是一个协议族,为了便于理解和实现,它采用了分层的体系结构。
2025-02-13 14:06:54
692
原创 网络模型分层与对比
OSI(Open Systems Interconnection)模型和 TCP/IP 模型都是用于描述网络通信过程的概念框架,它们有相似之处,但也存在一些明显的差异。
2025-02-13 14:05:01
838
原创 TCP/IP 协议
TCP/IP 协议(Transmission Control Protocol/Internet Protocol)是一个协议族,它是互联网通信的基础,定义了计算机和网络设备如何连接到互联网以及如何在它们之间传输数据。
2025-02-13 13:54:53
650
原创 桥接模式 & 与装饰器模式的比较
桥接模式和装饰器模式在设计思想和应用场景上有着明显的区别。桥接模式侧重于结构的解耦,使得不同的实现可以独立变化,而装饰器模式则侧重于功能的扩展,使得对象在运行时可以动态地增加新行为。
2024-08-12 10:02:50
461
原创 策略模式和模板方法的区别
策略模式是一种行为设计模式,允许在运行时选择算法的行为。它定义了一组算法,将每个算法封装起来,并使它们可以互换。模板方法是一种行为设计模式,定义一个算法的骨架,允许子类在不改变算法结构的情况下重新定义算法的某些特定步骤。目的策略模式:目的是选择算法或行为。模板方法:目的是定义一个算法的整体结构。结构策略模式:算法是通过不同的策略类实现的,它们实现相同的接口。模板方法:算法的结构在基类中定义,子类实现某些部分。灵活性策略模式:策略可以在运行时自由切换。模板方法。
2024-08-11 22:10:56
527
原创 6.使用 std::call_once 实现单例模式
使用实现单例模式是一个现代且安全的选择,特别是在多线程环境中。相比传统的单例实现方式,它提供了更好的线程安全性和代码简洁性。然而,开发者需要根据具体的需求和环境来选择最合适的实现方法。在 C++11 及其后续版本中,是一种非常优雅且有效的实现单例模式的方法。
2024-08-11 00:12:34
318
转载 5.C语言中全局变量在多个文件中使用
用C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一个全局变量,然后包含到两个不同的c文件中,希望这个全局变量能在两个文件中共用。举例说明:项目文件夹project下有main.c、common.c和common.h三个文件,其中common.h文件分别#include在main.c和common.c文件中。现在希望声明一个字符型变量key,在main.c和common.c中公用。有人想,既然是想两个文件都用,那就在common.h中声明一个unsigned char key
2021-09-02 15:52:19
5125
原创 4.关联容器重载排序运算符,invalid comparator
工程中需要将自定义结构作为map的key,于是在自定义结构中重载了默认升序运算符“<”,错误代码如下,问题出在代码中标注的那一行,当第二次向map中插入值时,map内部自动按升序排序,到注释那行崩溃。原因:升序排列,默认严格模式strict weak ordering,元素相等时必须返回false。#include <iostream>#include <algorithm>#include <map>using namespace std;st.
2021-08-18 11:11:23
221
原创 3.模板类简单实例
模板类简单实例先看代码1.主程序(.cpp)#include "Params.h"#include <iostream>using namespace std;int main(){int a = 666;std::string str = "123123";Params<int, std::string> pms;pms.Hello(a, str);return 0;}模板类Param...
2021-08-12 19:36:44
456
原创 2.c++动态链接库实现回调
c++动态链接库实现回调创建动态链接库dllvs新建工程,选择动态链接库(dll);工程创建后会自动生成dllmain.cpp,以及DllMain函数,是dll的入口函数,具体功能可以百度查看,一般用不到,可以直接将dllmain.cpp删除,或者放着不管。新建类Handle,代码如下,定义一个HandleCall回调处理函数,用来处理主程序(startcall)传入的参数和回调函数,通过__declspec(dllexport)导出整个Handle类,也可以单独导出某个函数,主程
2021-08-12 19:35:40
856
原创 1.system启动exe传参
1.system启动exe传参场景进程启动进程并传递参数启动进程代码(cpp)std::string strTemp = "start C:\\Users\\chengbochen\\source\\repos\\ToRun\\Debug\\Run.exe aaaaaaaaaaaa bbbbbbbbbbb cccccccccccc";system(strTemp.c_str());被启动进程代码(cpp)#include <iostream>int m
2021-08-12 19:34:14
611
原创 noteBook3.2-JS
Javascript在body中时,会在页面加载时执行;在head中时,会在被调用时执行,但是比页面初始加载早。放入head的代码是在页面加载前运行,放入body中的代码是在页面加载后运行。客户端脚本一班放在head中,用括起来,如果浏览器不支持脚本则调过不执行,也不会提示错误。slice提取字符串的片断,并在新的字符串中返回被提取的部分substring提取字符串中两个指定的索引号之间的
2017-11-06 21:51:09
453
1
原创 noteBook3.1-CSS
段落强制换行粗体斜体下划线删除线,贯穿线上标下标标题 #:1~6字体大小颜色强调文字,斜体加重字体显示编程代码显示示例文字显示键盘按键文字缩小字体放大字体无换行居中预格式化文本(所修饰代码中空格个数不变)有序列表无序列表Internet的基本协议是TCP/IP协议(传输控制协议),其最上层是应用层
2017-11-01 16:22:57
365
1
原创 noteBook3.3-HTML
HTML(Hyper Text Markup Language)超文本编辑语言CSS:控制网页内容的显示效果HTML+CSS=静态网页JS+Jquery=动态网页HTML的标签p:段落标签 :空格h#:标题标签:注释符:图片src:路径height,width,border:高宽和边框,单位都是px像素alt:当图片中由于某些原因显示失败时显
2017-10-27 16:56:43
395
1
原创 noteBook2.16-C#基础第十六天
进程类计算机中每一个程序都是一个进程,一个进程又由多个线程组成;单线程带来的问题:程序假死(程序未结束则不能操作下一步)用多线程解决;在.Net下,不允许跨线程访问;Process Using System.Threading.Tasks;Process[] pros=Process.GetProcesses();//获得电脑中正在运行的线程Process.
2017-10-26 15:24:03
246
原创 noteBook2.15-C#基础第十五天
File文件,Path路径,FileStream文件流,StreamReader&StreamWriter(对象为字符串)Directory(操作对象为文件夹、目录)Directory. CreateDirectory (@" ");//创建文件夹Directory. Delete(@" ");Directory.Delete(@" ",true
2017-10-26 14:37:24
226
原创 noteBook2.14-C#基础第十四天
多态(让一个对象能够表现出多种的状态,即类型)三种方法:a.提供的类中能够抽象出一个父类,且父类中必须写几个类共有的一个方法,在不知道怎么写这个方法的情况下用抽象类;b.若抽象出来的父类中的方法可以写,并需要创建父类的对象,用虚方法;c.给出的类中根本找不出父类,但都有一个共同的能力,用接口(多继承情况)。1.虚方法将父类的方法标记为虚方法,使用关键字Virtual,这个函
2017-10-25 21:36:44
263
原创 noteBook2.13-C#基础第十三天
FileStream文件流(操作对象为字节,适用于所有文件)StreamReader&StreamWriter:操作对象为字符//FileStream fsRead=new FileStream(@" ",FileMode.OpenOrCreat,File.Access.Read);//内容分别为:路径,对文件的操作选择,对文件内数据的操作选择byte[] buffer=new
2017-10-25 16:26:25
321
1
原创 noteBook2.12-C#基础第十二天
Path类Path.GetFileName(str);//快速获得str路径下的文件名称Path.GetFileNameWithoutExtension(str);//获得文件名,不包括扩展名Path.GetExtension();//获取扩展名Path.GetDirectoryName(str);//获取所在文件夹名称(包括路径)Path.GetFullPath(str);/
2017-10-25 15:37:04
263
原创 noteBook2.11-C#基础第十一天
集合:很多数据的一个集合,(长度任意改变,类型随便);数组:长度不可变,类型单一;ArrayList list=newArrayList();list.Add(1);list.Add(3.14);list.Add(true);list.Add('男');list.Add(list);*可以加入任意格式的内容,输出为list所在类的命名空间,但是好写不好拿。Ar
2017-10-25 14:59:12
269
原创 noteBook2.10-C#基础第十天
继承:当需要在一些类中重复写相同的成员时,可以将这些重复的成员单独封装到一个类中,作为这些类的父类。父类 基类子类 派生类1.子类继承了父类的属性和方法,但子类没有继承父类的私有字段;2.子类没有继承父类的构造函数,但是子类会默认调用父类无参数的构造函数,创建父类对象,让子类可以使用父类的成员;所以如果在父类中重新写了一个有参的构造函数,则无参的
2017-10-19 21:30:52
310
原创 noteBook2.9-C#基础第九天字符串
字符串字符串的不可变性:当给一个变量重新赋值后,旧值并没有销毁,而是重新开辟了一块空间存储新值;程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立刻把它销毁。*可以将字符串看作是char类型的一个只读数组;ToCharArray()将字符串转化为char数组;newstring(char[] chs)将char数组转化为字符串;**字符串每次改变操作都会重开空间,
2017-10-19 20:45:56
197
原创 noteBook2.8-C#基础第八天
命名空间:用于解决类的重名问题,可以看做“类的文件夹”,可以认为类是属于命名空间的;如果当前项目没有这个类的命名空间,手动导入三个方法:1.鼠标点;2.Alt+Shift+F10;3.记住命名空间,手动输入;引用类:在一个项目中引用另一个项目的类,两步:1.添加引用;2.引用命名空间;值类型&引用类型:区别1.在内存上存储的地方不一样;区别2.分别传递两种类型时
2017-10-19 20:09:13
241
原创 noteBook2.7-C#基础第七天
构造函数:帮助初始化对象(给对象的每个属性依次赋值)是一个特殊的方法1.构造函数没有返回值,也不用写void;2.构造函数的名称必须与类名一样;*创建函数的时候会执行构造函数;*构造函数可以重载;*类中默认有一个无参的构造函数,当写一个新的构造函数后,不管有参数还是无参数,默认的无参构造函数就被替代了。publicclassProgramTest{
2017-10-19 16:47:44
272
原创 noteBook2.6-C#基础第六天
面向过程:面向的是完成某事的过程,强调完成事情的动向。(例大象装冰箱——>三个过程)用面向过程方法解决某事,当执行人不同时,需要为每个人量身定做方法。面向对象:找个对象帮你做事(屏蔽因人不同而产生的麻烦,找通用的方法)把冰箱作为对象:1.冰箱门可以被打开(调用a方法开门);2.大象可以被塞进去(调用b方法塞大象);3.冰箱门可以被关上(调用c方法关门);a,b,c为通用
2017-10-19 16:25:21
305
原创 noteBook2.5-C#基础第五天
out,ref,params:1.out.如果在一个方法中返回多个相同类型的值,可以返回一个数组;但是如果返回多个不同类型的值,返回数组就不适用了,此时可以利用out参数。out必须在方法内部赋值。2.ref.能够将一个变量带入一个方法中进行改变,改变完成后,将改变后的值带出方法。ref要求必须在方法外赋值,而方法内可以不赋值。*交换变量值:不借用中间变量public st
2017-10-19 11:10:59
223
原创 noteBook2.4-C#基础第四天
结构:(一次性声明多个不同类型的变量)[public] Struct结构名{成员;//字段(与变量作用一样)"变量在程序运行期间只能存储一个值,而字段可以存储多个值"}数组:(一次性声明多个相同类型的变量)数组类型[ ] 数组名=new数组类型[数组长度]; //长度一旦固定不可再更改int[] nums=new int[10]; int[] nums={1,2
2017-10-18 17:17:36
175
原创 noteBook2.3-C#基础第三天
常量:Const 变量类型 变量名=值;//类型不可变,变量可重新赋值枚举:[public] enum枚举名{value1,value2,.....}public:访问修饰符,公开的公共的,那都可以访问enum:关键字枚举名要符合Pascal命名规范;将枚举声明到命名空间的下面,类的外面,表示这个命名空间下的所有类都可以使用这个枚举。枚举就是
2017-10-15 19:33:04
197
原创 noteBook2.2-C#基础第二天
类型转换:string-->double,int“123”-->123Convert.ToDouble(str);Convert.ToInt(str);运算符:一元运算符,二元运算符,逻辑运算符;一元运算符优先级高于二级运算符;逻辑与优先级大于逻辑或try...catch:异常反馈语句try{//可能出现异常的代码}c
2017-10-15 19:13:34
193
原创 noteBook2.1-C#基础第一天
.cs 类文件,类不占内存,对象站内存.sln 解决方案文件.csproj 项目文件 解决方案文件夹包含项目文件夹Console.WriteLine(" ");Consile.ReadKey();//可以用来暂停当前程序,等待用户按下任意键继续,且按下键显示在项目中注释符:单行注释符// 多行注释符/**/ 文档注释符///(用于注视函数和类)快捷方式:
2017-10-14 21:01:26
236
原创 noteBook1-plc
接口:RS232RS485/422支持多点通信(ppi网络通信,自由口通信,MPI通信-S7200从站,profibus网络-S7200从站,以太网)以太网:快速,传输量大,适合服务器-客户机结构、S7200之间数据交换OPC:嵌入式过程控制标准,工业标注,统一标准软件接口PC-Access:支持PPI,MPI,Profibus,S7协议(以太网),Modem等
2017-10-14 19:57:52
237
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人