![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 54
landscape 南北
C/C++/C#/Uinty3D/Socket编程/C++跨平台开发
展开
-
C/S反应堆模型
Sever和TCPSever是个单线程的,但是这里可以将player封装起来,每次连接建立一个client用于注册,如果注册成功再创建player,多次连接就可以实现多个player交互。player由playerMgr管理器管理。每一个客户端都和Player建立绑定,这样就可以实现多线程的效果。最终的类图是这样的,少一个ClientMgr 其实可要可不要,编程最重要的是思想!起初写的是建立连接直接创建用户,这样其实是不对劲的,肯定中间有一个过度的身份去管理所有的玩家。其实还有房间的管理,和玩.原创 2021-11-16 21:19:14 · 166 阅读 · 0 评论 -
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 · 220 阅读 · 0 评论 -
仿QQ聊天-C++服务器
结构图:使用到的技术:socket编程select轮循TCP协议消息的分包TCP四层协议应用层为用户的应用提供网络服务传输层定义传输的协议,ip,端口号网络层为不同地理位置的网络主机提供连接和路径选择数据链路层让格式化数据以帧为单位传输,差错校验,物理寻址什么是socket:socket是对底层网络通信的一层抽象,让程序员可以像文件那也操作网络上发送和接收的数据通信地址:ip:是网络层用来路由和通信的标识符端口:传输层管理协议:ip原创 2021-11-09 23:03:32 · 2450 阅读 · 0 评论 -
类的热注册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 · 109 阅读 · 0 评论 -
C/C++部分知识总结
C++命名空间:namespaceC++的结构体struct :C中的结构体不能被继承,C++可以继承;C++默认继承权是publicC中的结构体不能有成员函数,C++有成员函数且权限为publicC++函数的增强:C中函数不可以重载,C++函数可以重载函数的缺省是从右往左的函数的缺省实在 声明的时候设置的函数的占位符只有声明不能直接使用占位符也必须进行参数传递函数重载的作用是:同名函数可以实现不同的功能函数重载的条件:同一个作用域参数个数不同参数类型不同参数顺序不同原创 2021-11-06 15:14:27 · 625 阅读 · 0 评论 -
八种排序算法
排序算法:八种排序算法总结:冒泡排序:描述:比较相邻的元素,如果第一个比第二个大就交换对每一对相邻的元素进行同样的操作,这步做完之后最后的元素是最大的数每次对越来越少的元素执行相同的步骤//冒泡排序 时间复杂度(平均):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 · 147 阅读 · 0 评论 -
内存池C++
内存池首先一张图将一下内存池的原理在C++中自己写内存池其实就是重载new delete和new[] delete[] 函数;为什么free和malloc不能重载呢?因为它俩是C语言提供的,C++基于C语言的所以是系统级函数。内存相当于一个大类,有一片内存供给内存片内存片就是分配内存的单位,根据分配大小单位大小也不同,有64字节,128字节等每一个内存片有一个头可以用于GC,标记这片内存的大小以及使用情况内存的分配方式 单位内存*分配数量流程如下:这里内存管理器是单例模式,所以一原创 2021-11-05 18:22:21 · 700 阅读 · 0 评论 -
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 · 857 阅读 · 0 评论 -
C++配置文件
配置文件先来看一下配置文件的格式首先读取 ,以[]为单位分割,一个[key]对应其下面的key=value ,直到遇到下一个主[key]。数据结构如下:在插入的时候可以插入主[key] 也可以一组一组插入,但会执行查重!!...原创 2021-09-08 23:30:43 · 3248 阅读 · 0 评论 -
匿名函数-多态-纯虚函数-纯虚类
匿名函数的作用: 解耦纯虚函数:是一个特殊的函数,没有函数体 定义纯虚函数的类无法直接使用,必须要在继承中实现纯虚函数,继承类才可以定义使用。虚析构函数:解决子类对象指向父类指针,释放父类指针时不调用子类的析构函数。纯虚类(抽象类):纯虚类是一个特殊的类,它的内部只有纯虚函数,没有成员变量,纯虚类不能被实例化。纯虚类的作用:提供接口,方便他人调用,隐藏底层实现的细节。图元:// 矩形 圆 三角形 // 初始化(键盘输入) 获取周长 获取面积 获取名称(矩形1 矩形2 圆1 圆2)/.原创 2021-08-31 22:13:34 · 388 阅读 · 1 评论 -
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 · 133 阅读 · 0 评论 -
链表迭代器
链表迭代器:我使用的是双链表,双链表的特点是头和尾不存数据。即:头插是插入到第二个节点的位置,尾插是插入到倒数第二个节点的位置在这里附上双链表的结构:数据结构:typedef struct DoubleLinkNode{ int data; //数据域 struct DoubleLinkNode* prev; //前驱节点指针 struct DoubleLinkNode* next; //后继节点指针}TNode, * PTNode;物理结构:插入:头插:从头节原创 2021-08-31 20:40:54 · 1059 阅读 · 0 评论 -
动态数组迭代器vector
动态数组迭代器知识点:动态数组(根据存入数据的多少自动扩容的数组);迭代器[注:动态数组在进行删除和插入的时候尾部迭代器可能会失效]代码上已经附上注释!关于动态数组后面会仔细写一篇文章!C++提供的这几个库里面都有标准的迭代器:#include // C++字符串库#include // C++ 列表库#include // C++ 动态数组库#include // C++ 字典库 有序代码#include <iostream>/// <summ原创 2021-08-31 20:33:04 · 172 阅读 · 0 评论