![](https://img-blog.csdnimg.cn/20190828130244756.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
♬ -- C\C++
文章平均质量分 72
个人学习C++的笔记...
艾米莉亚糖
Make a little progress every day ...
展开
-
UDP 通信流程
udp是一个面向无连接的,不安全的,报式传输层协议,udp的通信过程默认也是阻塞的。转载 2022-07-17 16:35:57 · 18372 阅读 · 1 评论 -
TCP 通信流程
TCP是一个面向连接的,安全的,流式传输协议,这个协议是一个传输层协议。转载 2022-07-17 16:28:26 · 3951 阅读 · 0 评论 -
C++ 单例模式讲解和代码示例(C++实现线程安全的单例模式 )
单例是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。单例拥有与全局变量相同的优缺点。 尽管它们非常有用, 但却会破坏代码的模块化特性。在某些其他上下文中, 你不能使用依赖于单例的类。 你也将必须使用单例类。 绝大多数情况下, 该限制会在创建单元测试时出现。基础单例实现一个粗糙的单例非常简单。 你仅需隐藏构造函数并实现一个静态的构建方法即可。相同的类在多线程环境中会出错。 多线程可能会同时调用构建方法并获取多个单例类的实例。main.cc:..转载 2022-01-18 11:47:36 · 589 阅读 · 0 评论 -
const的用法,Const函数,Const变量,函数后面的Const
在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针。可以改变this所指向的值,但不能改变 this所保存的地址。在 const成员函数中,this的类型是一个指向 const类类型对象的 const指针。既不能改变 this所指向的对象,也不能改变 this所保存的地址。关键字:Const,Const函数,Const变量,函数后面的Const看到 const关键字,C++程序员首先想到的可能是 const常量。这可不是良好的条件反射。如果只知道用 const定义转载 2021-04-28 16:44:18 · 4221 阅读 · 1 评论 -
程序内存分配 堆栈
程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在...转载 2021-01-02 19:35:27 · 237 阅读 · 0 评论 -
虚函数有什么用,什么时候用
刚开始学C++学到“类”这一章的时候一直不明白虚函数用来做什么。看书上举的例子不太明白。#include<iostream>using namespace std; class Father{public: void Show() { cout<<"父类Show函数"<<endl; }}; class Son:public Father{public: void Show() { cout<<"子类Show函数"&l转载 2020-05-22 14:29:32 · 661 阅读 · 1 评论 -
C++的抽象类详解
在介绍抽象类之前,我们先介绍一下纯虚函数。1.纯虚函数在基类中仅仅给出声明,不对虚函数实现定义,而是在派生类中实现。这个虚函数称为纯虚函数。普通函数如果仅仅给出它的声明而没有实现它的函数体,这是编译不过的。纯虚函数没有函数体。纯虚函数需要在声明之后加个=0;class <基类名>{virtual <类型><函数名>(<参数表>)=0; ......};2.抽象类含有纯虚函数的类被称为抽象类。抽象类只能作为派生类的基类,.转载 2020-05-21 09:58:26 · 8630 阅读 · 3 评论 -
QPair和QMap以及结构体struct的连用
在头文件里面:定义一个QPair和一个struct结构体#ifndef TESTCLASS_H#define TESTCLASS_H#include <QDialog>#include <QMap>namespace Ui {class TestClass;}typedef QPair<QString,int> OnlyKey;...原创 2020-01-13 14:07:27 · 3503 阅读 · 1 评论 -
C++ 常用数学函数
一.头文件cmath.h或math.h中包含的常用数学函数,使用时要头文件引用,两者区别:1.cmath是标准C++里面推荐使用的库。math是C语言的旧头文件.2.用后面那个就好 math.h,前面那个如果没有C++对应的库会出错用后面的一定不会出错.二.常用的数学函数:1.开平方double sqrt(double x);2.求常数e的x次方double e...转载 2019-07-31 10:18:13 · 5226 阅读 · 4 评论 -
C++中的 inline (内联)用法
1. 引入inline关键字的原因在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。下面我们来看一个例...转载 2019-06-05 17:27:12 · 268 阅读 · 0 评论 -
条件编译 #if #ifdef #ifndef ... 的妙用详解_透彻
本文主要介绍c语言中条件编译相关的预编译指令,包括#define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined。#define 定义一个预处理宏#undef 取消宏的定义#if 编译预处理中的条件命令,相当于C语法中的if语句#ifdef ...转载 2019-06-05 15:32:59 · 5618 阅读 · 1 评论 -
map里面再嵌套一个map(二级map)
例子 :首先定义一个二级 mapStr , 然后将 List 里的值赋值到 map 里面. map<string,map<string,int>> mapStr; list<string> l_Fruits; l_Fruits.push_back("apple"); l_Fruits.pu...原创 2019-05-06 18:21:04 · 14632 阅读 · 0 评论 -
QPair 的用法
QPair 就和 C++ 里的 Pair 用法差不多.类模板:template <class T1, class T2> struct pair参数:class T1是第一个值的数据类型,class T2是第二个值的数据类型。功能:pair将一对值(可以是不同的数据类型)组合成一个值,两个值可以分别用pair的两个公有函数first和second访问。具体用法:...转载 2019-04-16 16:21:54 · 14826 阅读 · 0 评论 -
ListCtrl失去焦点仍然高亮显示并改变单元格颜色
这里使用VS2010的MFC进行讲解 :1.找到需要添加的消息的ListControl控件的属性,选择事件里面,选择NM_CUSTOMDRAW事件,程序自动生成方法.2.在.cpp文件中自动生成的OnNMCustomdrawList1 方法里面添加代码. (1).为List实现失去焦点仍然高亮显示.void CDlgDacggl::OnNMCustomdrawList1(NM...原创 2019-01-18 11:26:37 · 1818 阅读 · 0 评论 -
MFC连接Access的Mdb数据库,获取表名、字段名、记录数据
搞了半天才搞好的,主要问题就是那个连接 office2013 的问题了,一般高版本的office连接access数据库使用下面的即可 :m_pConnection->ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=D:\\Data.mdb;"; 红字代表mdb位置。...转载 2018-12-15 22:58:11 · 3189 阅读 · 0 评论 -
MFC获取SqlServer数据库所有表、字段名、记录数据
代码如下过程其实不是每一步都有,但是主要功能都在!//1、连接数据库类BOOL CSqlDlg::Ado(CString strConn){::CoInitialize(NULL); // 初始化OLE/COM库环境 try{ m_pConn.CreateInstance("ADODB.Connection"); //创建Connection对象 m_pConn...转载 2018-12-15 16:00:31 · 2614 阅读 · 1 评论 -
MFC对导出Excel的详细讲解
MFC读写Excel详细步骤说明 : 代码编译可能会编译不通过,主要是看注释说明.准备工作:打开开发环境VC或VS新建一个基于对话框的简单工程; 通过类向导添加类-->类型库中的MFC类打开创建类对话框 选择文件,位置编辑框填入Excel.exe的详细目录,可以通过浏览选择,在接口下方选择_Application(应用),_Workbook(视窗)Wor...转载 2018-12-05 17:21:57 · 3250 阅读 · 0 评论 -
MFC将ListControl中的数据导出到Excel
导出Excel的第一种方法用的是: Excel::_ApplicationPtr ptrExcelApp; Excel::_WorkbookPtr ptrBook; Excel::_WorksheetPtr ptrSheet; Excel::RangePtr ptrRange; #import "C:\\Program Files\\Common Files\\Microsoft ...转载 2018-12-04 16:11:25 · 3152 阅读 · 0 评论 -
MessageBox与AfxMessageBox(主要详解)的区别
AfxMessageBox详细使用说明:在屏幕上显示一个消息框。int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 ); int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nTyp...转载 2018-11-21 18:30:18 · 1283 阅读 · 0 评论 -
TCP服务器连接客户端数过多的问题
TCP状态迁移,CLOSE_WAIT & FIN_WAIT2 的问题TCP状态迁移 : 大家对netstat -a命令很熟悉,但是,你有没有注意到STATE一栏呢,基本上显示着established,time_wait,close_wait等,这些到底是 什么意思呢,在这篇文章,我将会详细的阐述。 大家很明白TCP初始化连接三次握手吧:发SYN包,然后返回...转载 2018-10-20 00:54:05 · 1732 阅读 · 0 评论 -
TCP 粘包解决
TCP 粘包:什么是粘包现象 : TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。为什么出现粘包现象 :(1) 发送方原因 我们知道,TCP默认会使用Nagle算法。而Nagle算法主要做两件事: 1)只有上一个分组得到确认,才会发送下一个分组; 2)收集多个小分组,在一个确认到来时一...原创 2018-10-03 22:06:00 · 3577 阅读 · 0 评论 -
I/O 多路复用
I/O类型: 接下来我们将介绍几种常见的I/O模型及其区别 阻塞I/O:blocking I/O(如果没有信息,则阻塞) 非阻塞I/O:nonblocking I/O 多路复用I/O:I/O multiplexing (select and poll) 信号I/O:signal driven I/O (SIGIO) ...原创 2018-10-03 18:21:53 · 498 阅读 · 1 评论 -
TCP 服务器/客户端(实现下载)
TCP/IP : TCP/IP:在网络通信中,TCP/IP是主流协议() 应用层:用户自定义的协议(HTTP,EMAIL,),用于用户之间数据的传送 传输层:(传输控制:TCP,UDP)负责点对点之间连接建立,传输控制协议的指定() 网络层:用于查找路由(查找) 网络接口层 : 将二进制转换为数据帧。TCP帧: [源端号][目...原创 2018-10-03 15:57:50 · 1539 阅读 · 0 评论 -
服务端客户端通讯,注册,上线,下线,私聊,广播(UDP)
框架:C/SClient:向服务器发送请求消息 1、注册 2、验证上线 3、发送消息:广播消息/私人消息(******) 4、退出消息(****) 多进程开发:父进程接收信息 子进程:发送消息Server: 1、接收用户请求 注册 上线 接收发送消息请求并转发 ...原创 2018-10-02 22:06:27 · 425 阅读 · 0 评论 -
send/sendto和recv/recvfrom各自的区别
一般情况下: send(),recv()用于TCP,sendto()及recvfrom()用于UDP 但是send(),recv()也可以用于UDP,sendto()及recvfrom()也可以用于TCP sendto可以在参数中指定发送的目标地址 , send需要socket已建立连接, sendto 可用于无连接的 socket 对于send的有连接socket,两者一样,...转载 2018-10-02 16:31:41 · 16782 阅读 · 1 评论 -
UDP 服务器/客户端
UDP:面向无连接,不安全,不可靠的,没有状态的传输协议 数据报:报文传输(目的方要么整个报文收,要么都不收到) 网络字节序:网络采用统一的字节顺序 htons();将端口转换指定的顺序存储服务器:接受用户的请求并作响应Server客户端:向用户发出请求,并等待响应 (知道 IP与端口)UDP:C/S客户端 ...原创 2018-10-02 15:39:31 · 1939 阅读 · 0 评论 -
TCP/IP 网络协议
TCP/IP : TCP/IP:在网络通信中,TCP/IP是主流协议() 应用层:用户自定义的协议(HTTP,EMAIL,),用于用户之间数据的传送 传输层:(传输控制:TCP,UDP)负责点对点之间连接建立,传输控制协议的指定() 网络层:用于查找路由(查找) 网络接口层:将二进制转换为数据帧。 注:帧就是网络发达单位T...原创 2018-10-02 12:50:40 · 853 阅读 · 0 评论 -
ISO/OSI 网络协议
网络 : 网络目的:信息资源共享 两台主机如何通信: 协议:双方约定的规则 协议:是由语法与语义 ISO/OSI: ISO/OSI协议:定义7层 (市场不采用它,国际定为标准的) 应用层: 应用层: 表示层: ...原创 2018-10-02 11:45:53 · 1553 阅读 · 0 评论 -
多线程条件变量
Linux C++ 多线程使用pthread_cond 条件变量多线程中经常需要使用到锁(pthread_mutex_t)来完成多个线程之间的互斥操作。 但是互斥锁有一个明显到缺点: 只有两种状态,锁定和非锁定。 ...原创 2018-10-02 01:12:34 · 265 阅读 · 0 评论 -
打字小游戏
打字小游戏的实现 , 先展示一下截图 , 此程序在 VC++ 上直接运行就ok 。简单的说一下原理 , 首先定义了一个数组 , 用于储存 A-Z a-z 0-9 的字符 , 再定义一个类 , 用于获取屏幕的 x , y 的坐标 。然后获取随机的字符从屏幕上面向下移动,每移动一次刷新一下界面 , 重新获取x , y 的坐标达到移动的效果 。 如果打字对了 5 次后 , 等级难度会...转载 2018-09-29 18:45:30 · 365 阅读 · 0 评论 -
多线程,同步,互斥(生产者/消费者)
数据污读:bool 的 true 和 bool 的 false , 当1线程执行true时读文件, 为false时2线程读文件,但是由于线程的cpu分时复用,可能还会执行 true 操作 , 导致读入数据异常 . ...原创 2018-09-27 00:45:17 · 828 阅读 · 0 评论 -
线程,多线程与同步互斥
进程:只是分配资源的单位 , 不执行指令(是而靠线程执行指令)线程(#include<pthread.h>) (Thread轻量级的进程):进程内部的一条执行路径(俗称进程的轻量级)主线程:每一个进程必须有一个默认线程,称为主线程(执行主函数)线程函数:线程执行指令的指令集(函数)线程属性进程的:线程是进程的资源,进程退出,该进程的线程就会退出。并发:同时执行 单CPU...原创 2018-09-26 23:14:32 · 365 阅读 · 0 评论 -
进程通讯(命名管道,信号集)
命名管道:(由于匿名管道(没有名字,没有路径)通信只能具有亲缘关系的进程之间能,大大限制了进程间通信的能力)命名管道的特点: 1、可以使用不同进程(无论是否有亲缘关系的进程)通信 2、是一个特殊文件:文件名与路径(文件系统中),是一个FIFO的文件(没有lssek) 3、普通在读写方面没有阻塞,而FIFO文件却与普通不同在读写方面: ...原创 2018-09-20 00:40:47 · 291 阅读 · 0 评论 -
进程通讯 (匿名管道)
程序:是有限指令的集合进程:将程序执行一次的过程注:分配资源的单位进程间通信(IPC):system IPC V由于进程间彼此隔离,故有下列方法来使用进程间通信。1、管道:匿名、命令管道 Shell命令: 管道 command1 | command2 系统API: int pipe(int fd[2]); 返回值:成功与否的...原创 2018-09-19 00:38:08 · 302 阅读 · 0 评论 -
文件目录,遍历文件夹文件及属性
目录文件: 1、创建目录: 注:目录需要执行的权限,创建文件夹mode& ~umask 2、读取目录的内容:子文件 打开目录 opendir 读取目录 struct dirent *readdir(DIR *dirp); 关闭目录 ...原创 2018-09-18 13:05:10 · 868 阅读 · 0 评论 -
Linux 文件&file描述符,文件属性 ls -l , stat
I/0: std(标准): 键盘 屏幕 非标准: 打印机...Linux系统的文件操作: 特点:不带缓冲API: 打开文件: int open(const char* PATH,int flag,int mode);注:返回的是文件的描述符(下标>=0) 失败:返回-1 最小空元素文件描述符的下标() 操作...原创 2018-09-17 00:58:23 · 556 阅读 · 0 评论 -
execv 函数的应用
execv函数族:系统来调用某程序模块 int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, ..., ...原创 2018-09-17 00:02:29 · 20581 阅读 · 3 评论 -
进程 (子进程,僵尸,孤儿,守护进程,多进程拷贝)
程序:有限的指令(二进制)的集合。存放外存中 a.out QQ.exe 特点:静态的(没有执行) 进程:正在运行的程序(将程序执行一次) * 系统为该进程分配空间task_struct,获取CPU的执行权 *进程结束,系统会让此进程释放空间 单进程(单任务):此进程中没有分配多个进程同时执行多进程(多任务):在耗时的任务上,分配多个进程(任务获取CP...原创 2018-09-16 23:35:07 · 318 阅读 · 0 评论 -
C++ 文件操作
输入输出: 标准输入输出流:istream/ostream cin/cout对象 文件输入输出流:对文件操作读写等操作 ifstream/ofstream是C++标准库提供的一个面向对象的软件包输出:(读)将信息输送到外设中 插入流: <<插入:(写操作)将信息获取电脑 本质:ifstream和ofstr...原创 2018-09-16 22:51:45 · 496 阅读 · 0 评论 -
try_catch 捕捉异常错误
运行错误:由于在编写代码造成的错误,运行时可以出现异常错误。 系统会直接让此程序结束。捕获错误: throw-try-catch throw抛出错误 try在代码保护段或者调用函数中捕获异常,catch识别错误 try { //代码保护段 } catch(表达式)//用于区分错误类型 { ...原创 2018-09-16 22:37:50 · 2232 阅读 · 0 评论