C++
文章平均质量分 91
C++学习笔记,包括遇到的问题和解决方法
Cain Xcy
万丈高楼平地起,勿在浮沙筑高楼。
展开
-
【QT】静态库与动态库
文章目录开始之前一、静态库(static Library)定义使用场景特点程序示例二、动态库(dynamic Library)定义使用场景特点。程序示例第二种调用开始之前测试环境:Qt 5.15.2 Based on Qt 6.4.3(MSVC 2019, x86_64)操作系统:Windows11 专业版编程语言:C++__编译器:Qt Creator 11.0.3本篇文章所有的代码都是在上述的基础上测试通过,此内容应当是通用,不分版本,注明是为了后续定位缺陷,如有瑕疵,劳请指正。一、静原创 2024-08-13 18:23:12 · 1198 阅读 · 0 评论 -
【C++】Windows API 串口通讯通用类源码
文章目录01、串口通讯02、 CreateFile API03、串口通讯Demo01、串口通讯在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。串口通信方便易行,应用广泛。RS232通信协议是目前最常用的一种全双工点对点式的异步串行通信协议接口标准。RS232接口标准由于出现较早,所以其目前存在很多问题。接口电平值较高,易损坏接口电路的芯片。传输速率较低,大约为20Kbps;传输距离较短,大约为15米左右。接口由三根线TX、RX、GND组成,没有构成差分线原创 2021-08-02 10:09:42 · 1889 阅读 · 0 评论 -
【C++】浅谈强制类型转换(4种)
文章目录01、C风格类型转换02、C++ 四种强制转换类型函数2.1、 static_cast2.2、 const_cast2.3、 reinterpret_cast2.4、dynamic_cast03、总结01、C风格类型转换在学习C语言的时候,很多场合,我们会用到强制类型转换,那个时候,我们是很少考虑这样做是否有问题的,因为这就是C语言不好的地方,什么都可以交给我们处理,因此,错误千奇百怪。C风格的强制转换(Type Cast)容易理解,不管什么类型的转换都可以使用使用下面的方式.int n原创 2021-07-28 18:02:35 · 2134 阅读 · 0 评论 -
【C++】C++ 中libcurl以POST方式发送数据测试(可json发送)
文章目录01、libcurl介绍02、libcurl测试01、libcurl介绍关于libcurl的介绍,我写过一篇博客,不清楚的可以转过去瞧瞧:2019配置Http协议、libcurl第三方库进行POST通讯02、libcurl测试按照上面博客中的方式做完之后,我们就能写一个小项目测试一下效果了,我们以百度为例,测试抓取:https://www.baidu.com/此网站的内容。引用官网的一个实例步骤为原模板/****************************************原创 2021-06-21 16:49:14 · 1088 阅读 · 9 评论 -
【C++】C++操作jsoncpp(写、读、解析)+jsoncpp从0到1配置步骤
章节目录前言01、json文件介绍1.1、json简介1.2、json优势02、C++ 操作 jsoncpp(读、写、解析)前言json文件是比较轻量级的文件,格式简单,使用方便。用来存放信息相比其他方式有自己得天独厚的优势。今天给大家分享的是如何利用C++来操作json文件。如果你知道如何使用jsoncpp类库,可以不用看附录,如果第一次使用,请先到最后,将环境配置好,再进行操作。01、json文件介绍1.1、json简介JSON(JavaScript Object Notation, JS原创 2021-05-14 16:42:24 · 15336 阅读 · 14 评论 -
【C++】C++中防止头文件重复包含的两种方法
文章目录01、错误分析:类型重定义(头文件重复包含)02、解决方案2.1、微软宏2.2、条件编译2.3、两种方法比较03、变量被重复包含3.1、解决办法04、版权声明&总结01、错误分析:类型重定义(头文件重复包含)现象:#include文件的一 个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码:#include "Index.h"#include "Index.h"//当前实际开发中没人会这么写程序,但是我们换一种写法常犯错误如下://#inclu原创 2021-05-13 20:38:25 · 6121 阅读 · 17 评论 -
【C/C++】浅谈C/C++中函数指针与回调函数
目录01、函数指针1.1、函数指针定义1.2、函数指针的定义形式1.3、函数指针与typedef02、回调函数2.1、回调函数定义2.2、回调函数的使用场景03、实例重释04、总结01、函数指针1.1、函数指针定义一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。这种指针就是函数指针。简言之:函数指针原创 2021-05-12 18:15:14 · 1158 阅读 · 17 评论 -
【网络通讯】2019配置Http协议、libcurl第三方库进行POST通讯。
文章目录01、Http协议介绍1.1、什么是http?1.2、请求方法种类01、Http协议介绍1.1、什么是http?超文本传输协议(HyperText Transfer Protocol – HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议。1.2、请求方法种类http协议我也是第一次接触,根据需求,了解到了http目前共有以下几种请求方法。GET功能:请求响应。GET请求会显示请求指定的资源。一般来说GET方法应该只用于数据的读取。GET会方法请求指定的页面信息,并返回原创 2021-05-10 15:47:26 · 523 阅读 · 0 评论 -
【C++】智能指针、悬垂指针、哑指针、野指针分析与规避
01、 目录文章目录01、 目录02、 四种指针的描述03、 野指针的形成原因04、 智能指针设计05、小结02、 四种指针的描述指针:指针是一块地址?指针指向地址?关于指针的描述,我不做过多说明,这是基础,如果连指针是什么都搞不明白,下面的内容也可以不用看了,没太大作用。1. 智能指针:智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference cou原创 2020-09-29 16:18:15 · 439 阅读 · 0 评论 -
【C++】左值引用与右值引用
浅谈左值引用与右值引用左值和右值的概念:左值:能对表达式取地址、或具名对象/变量。一般指表达式结束后依然存在的持久对象。右值:不能对表达式取地址,或匿名对象。一般指表达式结束就不再存在的临时对象。右值引用是C++11中引入的新特性 , 它实现了转移语义和精确传递。它的主要目的有两个方面:消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。能够更简洁明确地定义泛型函数。右值引用和左值引用的区别:左值可以寻址,而右值不可以。左值可以被赋值,右值不可以被赋值,可以用来给左原创 2020-08-31 08:35:01 · 133 阅读 · 0 评论 -
【C++】C++ 11Lambda表达式(学习笔记)
01、文章目录文章目录01、文章目录02、Lambda表达式03、函数式编程04、Lambda Syntax05、Lambda的使用场景06、Lambda示例6.1 示例一6.2 示例二07、小结02、Lambda表达式lamda表达式是c++11规范引入的新语法。“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。lamb原创 2020-08-29 16:24:27 · 500 阅读 · 0 评论 -
【C++】使用C++ 11新特性创建线程池
01、目录目录01、目录02、线程池03、线程池示例3.1 示例一(常规实现)3.2 示例2 (适用于需传参,需要将非静态线程函数写在类中的情况)04、emplace_back的示例和异常05、小结02、线程池顾名思义,线程池就是容纳n个(n>=2)线程的池子(pool),这是字面意思。线程池:因为程序边运行边创建线程是比较耗时的,所以我们通过池化的思想,在程序开始运行前创建多个线程,这样,程序在运行时,只需要从线程池中拿来用就可以了.大大提高了程序运行效率.没错,线程池的存在就是为了程原创 2020-08-29 10:51:57 · 3944 阅读 · 2 评论 -
【C++】C++连接SQL Server 2014
01、文章目录文章目录01、文章目录02、前言03、C++连接SQL Server方式04、C++连接SQL Server步骤4.1 C++与SQL 连接初始化4.2 封装C++连接SQL类4.2.1 CDataBase.h4.2.2 CDataBase.cpp05、总结02、前言SQL Server数据库,对大家应该都不陌生,如果你是计算机专业,可能在学校接触的第一种数据库就是他,因为他是很久以前流行的数据库,在他火的时候,还没有MySQL,Redis等。SQL Server 是一个关系数据库原创 2020-08-19 10:51:34 · 4793 阅读 · 7 评论 -
【C++】空类为何占一个字节的思考?
01、文章目录文章目录01、文章目录02、一个简单的空类示例03、单继承空白基类最优化问题04、多继承空白基类最优化问题05、小结02、一个简单的空类示例当初学习C++的时候,老师提过一下,空类占一个字节,但是,并没有深究,最近看公司源码的时候老是看见空类作为基类,然后向下继承,越看越迷惑,故,了解了一下原理,这里记录一下。Test Code:#include <iostream>using namespace std;//声明一个空类,类名自取,这里我以自己名字为例class原创 2020-08-13 20:31:57 · 854 阅读 · 0 评论 -
【C++】C++条件编译
01、文章目录文章目录01、文章目录02、浅谈条件编译03、各版本条件编译3.1 #if——#else——#endif3.2 #ifndef——#define——#endif3.3 #if——#elif——#else——endif3.4 #ifdef——#endif04、宏定义4.1 定义宏(#define)4.2 取消宏(#undef)05、总结02、浅谈条件编译条件编译是指预处理器根据条件编译指令,有条件地选择源程序代码中的一部分代码作为输出,送给编译器进行编译。主要是为了有选择性地执行相应操作原创 2020-08-11 21:04:12 · 4576 阅读 · 1 评论 -
【C++】位运算
01、目录目录01、目录02、前言03、初识位运算04、位运算操作符4.1 按位与02、前言今天恰逢Visual Studio 2015出了点毛病,迫于无奈之下只有卸载重装,这种比较费时间的事情,就写一篇博客叭。整理了下思路,复习了下位运算,今天就简单聊聊它。虽然位运算很底层,一听人说直接操作二进制,哇,这么高大上。其实,搞明白了也没啥,而且位运算的只是真的不多。我下面就直接开始吧。03、初识位运算其实只要了解计算机的人都或多或少知道,计算机的各种操作都是通过0和1来完成的。没错,计算机操作原创 2020-07-31 22:43:59 · 2368 阅读 · 1 评论 -
【C++】C++连接MySQL读取数据
01、目录目录01、目录02、前言03、利用C++在MySQL中存取数据04、C++连接MySQL的必要API4.1变量类型介绍4.2 API介绍05、实例运用5.1 实例15.2 实例206、总结02、前言关于MySQL的介绍,我这里就不多说了,主要是实操。而添加的头文件和库,由于各个编译器不同,比如Windows和Linux,QT这种肯定都不尽相同,所以,这里也不说。只提一下,我所用到的。03、利用C++在MySQL中存取数据以读取数据为例,这里介绍一下步骤(思路):第一步,要将你的C+原创 2020-07-27 15:06:23 · 3344 阅读 · 6 评论 -
【C++】虚函数、纯虚函数、单继承、多继承(Map Text and Code)
01、文章目录文章目录01、文章目录02、前言03、多态及内存分布04、类的虚函数表与类实例的虚函数指针05、多态及多重继承Code 实现06、多继承下的虚函数表(同时继承多个基类)07、总结02、前言C++相对其他面向对象语言来说,之所以灵活、高效。很大程度的占比在于其多态技术和模板技术。C++虚函数表是支撑C++多态的重要技术,它是C++动态绑定技术的核心。本文章将着重图解虚函数表相关知识,在阅读本文前,博主已经默认你已经学习了C++多态的语法,并且通过代码实践过。03、多态及内存分布多态的原创 2020-07-24 15:05:33 · 292 阅读 · 0 评论 -
【C++】static与C++内存分布
01.目录目录01.目录02.引言03.C++内存布局3.1 内存结构简介3.2 内存分布3.3 堆与栈(区别)04.static关键字4.1 类外的static变量4.1.1 隐藏功能4.1.2 保持变量内容的持久4.1.3 默认初始化为04.2 类内的static成员变量4.2.1 定义与栗子4.2.2 静态成员变量的访问4.2.3 什么情况使用静态成员变量4.3 类内的静态成员函数4.3.1 举个栗子4.3.2 静态成员函数的特点4.3.3 拷贝构造函数的问题05.本文总结02.引言自上次聊了原创 2020-07-06 20:20:13 · 1407 阅读 · 2 评论 -
【C++】STL容器实现二维数组
目录导言01.一个问题02.用法一(我没用过,借鉴知识点)2.1二维vector的定义2.2 二维vector实例03.vector遍历方法3.1 下标遍历方法(常用)3.2 区间迭代(C++11新特性)04.Working遇到的二维vector例子05.总结06.结语导言数组,想必大家并不陌生,C语言中我们经常会定义各种数组,自然也包括二维数组。所有数组都有一个特性,那就是我们在定义他们的时候必须限制他的大小,这是不能徇私的,大家都一样,必须遵守这个规则。01.一个问题如果在工作中要你用C原创 2020-06-16 22:10:03 · 4575 阅读 · 3 评论 -
【C++】Const小结
今天简单小结一下C++中的const关键字,仅仅只是就目前而言的一些理解。C++两个重要的关键字,Const,Static,今天先说Const1. Const修饰变量Const修饰变量:修饰全局变量,修饰局部变量,下面用程序依次说明.首先:Const修饰全局变量#include <iostream>using namespace std;const int a = 10;int main(int argc,char* argv[]){ //这里给指针初始化时,一定.原创 2020-06-09 21:33:00 · 153 阅读 · 0 评论 -
【C++】三大易混概念之隐藏
隐藏:字面意思,把人或者物藏起来,不让人发现,就是隐藏。程序中的隐藏也差不多,只不过不同的是,子类重定义父类。父类中的还是存在的。隐藏的概念隐藏:不同作用域中(父类与子类),函数名或者变量名相同,但是不构成重写(虚函数),则全是隐藏(重定义)。隐藏的范围范围:隐藏不止是成员函数,也可以是成员变量,相同的成员变量就是重定义。隐藏的效果无论在子类的内部或者外部,通过子类对象访问该成员函数或变量,都是访问子类中的同名成员函数或变量。下面看一个例子:初始化列表:默认传值,这个值在你没有调用.原创 2020-06-08 10:14:26 · 432 阅读 · 0 评论 -
【C++】三大易混概念之覆盖
覆盖体现在C++类中,我们平时叫做重写,比如重写某某某的虚函数。虚函数:父类中加上了virtual关键字的成员方法(成员函数)叫做虚函数。嗯,此文章针对入门级学习者,大牛请绕道。一、覆盖覆盖的前提条件:被重写的(父类函数)必须是虚函数。覆盖:当子类中定义了一个与父类完全一样的虚函数时,就叫做子类重写了父类的虚函数,这就叫覆盖。虚函数的两种体现方式:普通重写子类中定义了与父类完全一样的虚函数,包括返回值,函数名,函数参数(类型,个数)都相同时,也就构成了重写或者覆盖。协变重写子类中定.原创 2020-06-06 16:04:03 · 1212 阅读 · 0 评论 -
【C++】extern “C”问题的本质
extern “C”,这个东西主要用在C++中,意思是后面的(下面的)内容按照C编译规则去编译解析,而不是C++编译规则。代码说明://test.c代码#include <stdio.h>#include <stdlib.h>int test(int a , int b){ return a+b;}int main(){ test(2,3); system("pause"); return 0;}//test.cpp代码#include &l.原创 2020-06-06 14:41:21 · 296 阅读 · 0 评论 -
【C++】C++函数重载(详)
C++有三大定义一定要分清楚:重载,重写(类中子类覆盖基类),重定义(隐藏)今天自己给自己挖坑,所以查资料复习了一遍,先说重载,其他两种后面再说。1. C++函数重载的定义概念:同一作用域下,函数名相同,函数参数个数不同,参数类型不同,参数位置不同,这样的一些函数叫做函数重载.这时候可能有人会问,返回值呢,函数返回值不是那么重要吗?咳咳,首先,C++调用函数是可以忽略其返回值的,跟C有很大的区别,感兴趣可以自己写相同的程序在C和C++中run一下。2. 为什么要有函数重载?作用是什么? 首.原创 2020-06-06 12:10:33 · 477 阅读 · 0 评论