- 博客(24)
- 资源 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 内存池C++
内存池首先一张图将一下内存池的原理在C++中自己写内存池其实就是重载new delete和new[] delete[] 函数;为什么free和malloc不能重载呢?因为它俩是C语言提供的,C++基于C语言的所以是系统级函数。内存相当于一个大类,有一片内存供给内存片内存片就是分配内存的单位,根据分配大小单位大小也不同,有64字节,128字节等每一个内存片有一个头可以用于GC,标记这片内存的大小以及使用情况内存的分配方式 单位内存*分配数量流程如下:这里内存管理器是单例模式,所以一
2021-11-05 18:22:21
711
原创 C/S反应堆模型
Sever和TCPSever是个单线程的,但是这里可以将player封装起来,每次连接建立一个client用于注册,如果注册成功再创建player,多次连接就可以实现多个player交互。player由playerMgr管理器管理。每一个客户端都和Player建立绑定,这样就可以实现多线程的效果。最终的类图是这样的,少一个ClientMgr 其实可要可不要,编程最重要的是思想!起初写的是建立连接直接创建用户,这样其实是不对劲的,肯定中间有一个过度的身份去管理所有的玩家。其实还有房间的管理,和玩.
2021-11-16 21:19:14
179
原创 C/C++的const和static和宏
const:C和C++中从const的区别:C中的const是伪常量,不可以给数组指派内存空间,它占用内存空间可以转换成变量使用C++中const是真常量,它可以给数组指派内存空间,如果是一个const取地址,它会生成一个临时的内存空间但是不影响之前的结果因为它在编译期就确定了值。指向常量的指针和常量指针:首先const修饰常量:修饰一般常量 (一般常量是指简单类型的常量),这种常量在定义时,修饰符const可以用在类型说明符前,也可以用在类型说明符后。也就是const int a和 int
2021-11-15 11:25:48
230
原创 仿QQ聊天-C++服务器
结构图:使用到的技术:socket编程select轮循TCP协议消息的分包TCP四层协议应用层为用户的应用提供网络服务传输层定义传输的协议,ip,端口号网络层为不同地理位置的网络主机提供连接和路径选择数据链路层让格式化数据以帧为单位传输,差错校验,物理寻址什么是socket:socket是对底层网络通信的一层抽象,让程序员可以像文件那也操作网络上发送和接收的数据通信地址:ip:是网络层用来路由和通信的标识符端口:传输层管理协议:ip
2021-11-09 23:03:32
2480
原创 类的热注册C++
今天说一下在做游戏的时候用到一种热注册的技术。描述:在游戏开始之处把需要的元素的构造函数注册进去,在需要对应元素的时候根据type选择对应的构造函数。namespace{ class A { public: A() { CreateMgr::Ins()->Push(1, [](int x, int y)->Base* { return new Wall(x, y); }); } }; A a;//必须执行这一句 才会执行A的构造函
2021-11-08 15:06:42
128
原创 C语言魔塔
魔塔描述: 本项目使用C语言完成,通过WASD控制人物上下作用移动和怪物和道具进行碰撞后执行相应的操作,根据NPC的提示完成任务。实现的功能:人物的上下左右移动碰撞检测CollisionCB楼层的切换游戏的读档存档NPC对话道具的捡拾和使用怪物列表商店购买道具战斗系统购买系统使用到的技术:使用结构体指针实现继承效果,让所有的结构体继承于基础结构体Base,把父结构体指针作为子结构体的成员属性,从而拿到父结构体的成员函数和属性;使用函数指针实现成员函数,实现碰撞检测
2021-11-08 14:18:23
5629
1
原创 C/C++部分知识总结
C++命名空间:namespaceC++的结构体struct :C中的结构体不能被继承,C++可以继承;C++默认继承权是publicC中的结构体不能有成员函数,C++有成员函数且权限为publicC++函数的增强:C中函数不可以重载,C++函数可以重载函数的缺省是从右往左的函数的缺省实在 声明的时候设置的函数的占位符只有声明不能直接使用占位符也必须进行参数传递函数重载的作用是:同名函数可以实现不同的功能函数重载的条件:同一个作用域参数个数不同参数类型不同参数顺序不同
2021-11-06 15:14:27
683
原创 八种排序算法
排序算法:八种排序算法总结:冒泡排序:描述:比较相邻的元素,如果第一个比第二个大就交换对每一对相邻的元素进行同样的操作,这步做完之后最后的元素是最大的数每次对越来越少的元素执行相同的步骤//冒泡排序 时间复杂度(平均):O(n^2) 空间复杂度:O(1) 稳定性:稳定void BabbleSort(int n, int arr[]){ //安全检查 if (arr == nullptr || n <= 0) { return; } for (int
2021-11-06 15:03:58
162
原创 Socket网络编程C++
整理自这些网页:https://blog.csdn.net/JHC23/article/details/98055883https://blog.csdn.net/qq_38291480/article/details/107458246https://www.cxyzjd.com/article/freee12/114411950https://cizixs.com/2015/03/29/basic-socket-programming/https://www.codenong.com/cs10
2021-11-03 13:11:41
883
原创 C++配置文件
配置文件先来看一下配置文件的格式首先读取 ,以[]为单位分割,一个[key]对应其下面的key=value ,直到遇到下一个主[key]。数据结构如下:在插入的时候可以插入主[key] 也可以一组一组插入,但会执行查重!!...
2021-09-08 23:30:43
3279
原创 匿名函数-多态-纯虚函数-纯虚类
匿名函数的作用: 解耦纯虚函数:是一个特殊的函数,没有函数体 定义纯虚函数的类无法直接使用,必须要在继承中实现纯虚函数,继承类才可以定义使用。虚析构函数:解决子类对象指向父类指针,释放父类指针时不调用子类的析构函数。纯虚类(抽象类):纯虚类是一个特殊的类,它的内部只有纯虚函数,没有成员变量,纯虚类不能被实例化。纯虚类的作用:提供接口,方便他人调用,隐藏底层实现的细节。图元:// 矩形 圆 三角形 // 初始化(键盘输入) 获取周长 获取面积 获取名称(矩形1 矩形2 圆1 圆2)/.
2021-08-31 22:13:34
410
1
原创 游戏2048(C语言实现)
游戏2048总结游戏逻辑:初始化地图—>打印地图—>移动,旋转—>记录历史—>添加随机数—>判断是否失败知识点:打印移动:一个方向里有相同大小的两个数且中间没有其他数字则可以合并数组中默认下标为-1 当遇到不为0的数时候 index的值由-1改为该不为零的数的下标,然后用标记的该数第二层for循环执行j++ 与下一个数进行比较 如果相同执行加法 把标记的该数+=[i][j] 且 相同数的索引改为-1表示不满足 继续寻找!=0的数 修改其索引执行加
2021-08-31 21:57:42
642
原创 C语言学生管理系统
功能:1.登录2.注册3.添加学生4.统计学生信息5.打印学生信息6.查询学生信息7.修改学生信息8.删除学生(逻辑删除)9.退出注意:里面些许功能只提供了接口没有完善密码只做了掩码没有做回退菜单展示图:#ifndef STUDENT_H_#define STUDENT_H_#include <stdio.h>typedef struct tagUser{ char number[50]; char pwd[50]; int power; //
2021-08-31 21:42:07
321
原创 string迭代器和运算符重载
知识点:手动实现字符串的strlen,strcpy,strcat,strcmp重载字符串之间的+,!=,==,+=等运算符。同样存储字符串使用的是动态数组!!!#include<iostream>#include <string.h>namespace{ //str == str1 //str != str1 //str + str1 //str += str1 //str + "Hello" class String { //friend Str
2021-08-31 20:47:55
142
原创 链表迭代器
链表迭代器:我使用的是双链表,双链表的特点是头和尾不存数据。即:头插是插入到第二个节点的位置,尾插是插入到倒数第二个节点的位置在这里附上双链表的结构:数据结构:typedef struct DoubleLinkNode{ int data; //数据域 struct DoubleLinkNode* prev; //前驱节点指针 struct DoubleLinkNode* next; //后继节点指针}TNode, * PTNode;物理结构:插入:头插:从头节
2021-08-31 20:40:54
1068
原创 动态数组迭代器vector
动态数组迭代器知识点:动态数组(根据存入数据的多少自动扩容的数组);迭代器[注:动态数组在进行删除和插入的时候尾部迭代器可能会失效]代码上已经附上注释!关于动态数组后面会仔细写一篇文章!C++提供的这几个库里面都有标准的迭代器:#include // C++字符串库#include // C++ 列表库#include // C++ 动态数组库#include // C++ 字典库 有序代码#include <iostream>/// <summ
2021-08-31 20:33:04
190
原创 C语言扫雷
扫雷要求是可以指定雷的数量,地图的行和列。扫雷有两种思路计算当前格子周围是否有雷计算当前格子是否为雷,如果是周围八个格子加一需要注意的是雷的周围八个格子内如果有雷,不能把雷改变。这里先书写一种简单的方法,即判断当前格子是否为雷!之后会附上一种复杂的优化的代码,为了便于理解我把扫雷投机取巧了一下!如图假设(i,j)为雷,(为了方便设(i,j)为目标位置)则有3种对周围的格子加一情况(当然还有一种只有一种投机取巧的方法,后面会提到):第一种情况:四个角用左上角举例:当目标位置位于左上
2021-05-16 00:07:41
223
原创 C语言九九乘法表
九九乘法表所有形式的玩法:右下输出:ixj=i*j; 同一行i递减数字递减for (int i = 1; i <= N1; i++) { for (int k = 1; k <= N1 - i; k++) printf(" "); for (int j = i; j >0 ; j--) // 数字递减 { printf("%d*%d=%-2d ", j, i, i * j); } printf("\n"); }数字递增
2021-05-14 22:06:37
733
原创 C语言-字符串
字符串(用" "括起来的字符):“abc” 字符串默认会在结尾 添加一个 \000字符标记\ddd “\078"实际是”\007" 8大于7最高位补0puts函数:输出字符串,自动换行putchar函数:输出单个字符串,可以’a’或者字符变量,不会自动换行printf最重要的输出函数:printf(格式控制串,[输出参数1],[输出参数2],[…]);// %d 用于输出整数 int short// %ld 输出长整形 long// %f 输出 浮点型// %lf
2021-05-14 22:01:12
189
原创 C语言main函数和运算符和转义字符
main函数(有且只有一个main函数):第一种(无参函数)int main(){ return 0}第二种(标准写法|有参函数)int main(int argc, char* argv[]){ return 0; // 一般情况下 返回0 表示执行正确}argc 表示 argv的长度(length)即参数的个数argv 表示程序启动时携带的参数int 返回值类型mian 函数类型(int argc ,char * argv[]) 参数列表
2021-05-14 21:59:36
175
原创 使用VS2019时候的建议
使用VS2019时候的建议关于VS:提升性能:工具->选项->源代码管理:无新建项目:指定生成->文件位置右键项目->属性->常规->输出目录|中间目录$(SolutionDir)../bin/$(Platform)\$(Configuration)\$(SolutionDir)../temp/$(Platform)\$(Configuration)\$(ProjectName)\最后生成的文件是酱紫的:配置:所有配置|平台:x64:复制输出目
2021-05-14 21:52:59
301
原创 模板函数
函数模板和类模板端午节过完了 ,又要开始上学啦,致敬爱学习的我。今天说一下函数模板和类模板声明函数模板以下第一个代码片部分应用《C++面向对象程序设计》声明函数模板template <typename T> //T为类型参数T max(T x,T y) //“T x,T y”为模板形参表{return (x>y)?x:y;...
2019-06-10 15:58:11
366
原创 继承——读写器
公有继承,私有继承,读写器分别有三个类,通过读写器修改每个类的信息。代码比较繁琐,仅供学习使用,基础知识依然是三个文件头文件:这里用的编译器是VS2017#include<string>using namespace std;class stud{ string name; string no; float chi; float math; float en...
2019-06-07 21:08:43
124
原创 C++重载输入输出,重载二进制文件的读和写
C++重载输入输出,重载二进制文件的读和写C++输入输出的重载和对文件的操作这是我第一次写博客,不对的地方还请大家指点!我在这里建立了三个文件夹:首先是头文件:#include <iostream>#include <string>using namespace std;class stud{ string name; string no; flo...
2019-06-06 17:12:48
569
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人