![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++基础概念
文章平均质量分 55
luckyone906
这个作者很懒,什么都没留下…
展开
-
C++ 与Qt之间的关系概述
Qt 提供了 C++ 库:Qt 提供了许多 C++ 库,如 Qt Core、Qt GUI、Qt Widgets、Qt QML 等,这些库可以帮助开发者更快速地创建 GUI 和应用程序。C++ 和 Qt 之间有着密切的关系。Qt 可以使用 C++ 的特性:Qt 可以使用 C++ 的所有特性,包括类、对象、继承、多态等。Qt 是用 C++ 编写的:Qt 的核心部分是用 C++ 编写的,因此,如果你熟悉 C++,那么学习 Qt 会更容易。C++标准库,是指C++自带的,一套完整的,支持各种常用功能的类和函数库。原创 2024-04-27 11:05:37 · 463 阅读 · 0 评论 -
C++位操作中按位置0、置1、取反操作
c++原创 2022-07-03 09:21:20 · 2758 阅读 · 1 评论 -
C++析构函数
格式:~类名(void){ }没有参数,没有返回值,不能被重载,一个类只能有一个析构函数对象销毁时自动执行主要负责清理对象生命周期中的动态资源#include <iostream>using namespace std;class A {public:A(int i = 0) {m_pi = new int(i);}void print(void)const {cout << *m_pi << endl;}~A(void) { //..原创 2022-05-19 19:44:07 · 412 阅读 · 0 评论 -
C++:delete和delete[]释放内存的区别
c++原创 2022-11-12 09:17:49 · 1448 阅读 · 0 评论 -
在Qt中使用全局变量的两种方式,及出现无法解析的命令的问题
很多小伙伴在Qt编程时,不会使用全局变量,其实基本有两种方式来定义使用全局变量,第一种是根据c/c++的extern来进行多文件的使用,第二种方法就是把全局变量放在类中,当做类静态变量来使用,一般来说,第一种方式严重破坏了类的封装,所以还是推荐第二种方式.下面给出简单的示例:1.先在一个.h文件中声明一个类://c.h#ifndef C_H#define C_Hclass QPos{public:static int x; //注意关键字staticstatic int y;};#.原创 2022-04-25 21:54:42 · 4195 阅读 · 0 评论 -
C++中消息机制阻塞实验
VC6标准WIN32程序,Windows消息处理机制:1.在注册窗口类时,指定了消息处理函数WndProc()。2.WinMain()里有消息循环: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg);...原创 2021-10-30 10:34:19 · 1522 阅读 · 0 评论 -
c++中堆、栈内存分配概念示例讲解
首先来看看主要有几种程序内存分配:一个由C/C++编译程序占用内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量值等。其操作方式类似于数据结构中栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量存储是放在一块,初始化全局变量和静态变量在一块区域, 未初始化全局变量和未初始化静态变量在相邻另一原创 2020-12-28 21:33:55 · 3437 阅读 · 0 评论 -
怎么判断应用程序是多少位运行的
C#中int bitSize = IntPtr.Size;//指针多少字节 if(bitSize==8) { MessageBox.Show("64位程序"); } else if(bitSize==4) { ...原创 2020-01-17 22:14:00 · 548 阅读 · 0 评论 -
dll文件的c++制作
1、首先用vs2005建立一个c++的dll动态链接库文件,这时,// DllTest.cpp : 定义 DLL 应用程序的入口点。//#include "stdafx.h"//#include "DllTest.h"#ifdef _MANAGED#pragma managed(push, off)#endifBOOL APIENTRY DllMain(转载 2017-09-12 15:16:21 · 301 阅读 · 0 评论 -
vs2008 C++创建和调用标准DLL
为了共享代码,需要生成标准的dll,本文将介绍在vs2008 C++生成及调用dll。一、生成DLL 生成一个名为FunDll的dll文件,对外函数为addl。 step1:vs2008 环境下,文件-->新建项目,选择visual c++,在选择 “Win32 项目”,键入项目名称,如 FunDll。如图: C++创建和调用标准DLL" styl转载 2017-09-12 15:23:43 · 688 阅读 · 0 评论 -
C# Winform 出现异常:无法将顶级控件添加到控件,解决方案如下:
Form1Test frm = new Form1Test();frm.TopLevel = false; //重要的一个步骤frm.Parent = splitContainerPanel.Panel2;frm.Show();转载 2017-09-21 16:57:04 · 7923 阅读 · 2 评论 -
深入了解Windows句柄到底是什么
总是有新入门的Windows程序员问我Windows的句柄到底是什么,我说你把它看做一种类似指针的标识就行了,但是显然这一答案不能让他们满意,然后我说去问问度娘吧,他们说不行网上的说法太多还难以理解。今天比较闲,我上网查了查,光是百度百科词条“句柄”中就有好几种说法,很多叙述还是错误的,天知道这些误人子弟的人是想干什么。这里我列举词条中的关于句柄的叙述不当之处,至于如何不当先不管,继续往下看就转载 2017-12-20 11:43:25 · 310 阅读 · 0 评论 -
句柄概念
句柄(handle),有多种意义,其中第一种是指程序设计,第二种是指Windows编程。现在大部分都是指程序设计/程序开发这类。第一种解释:句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。第二种解释:整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应转载 2017-12-20 11:53:55 · 4269 阅读 · 1 评论 -
数组内存分配概念
在这里解答一下:int arr[4];&arr[1] = arr[0] + sizeof(int) ;静态分配, 即普通数组, 由于在栈中分配, 而栈的生成方向是自高地址向低地址生成。 所以有:&arr[0] > &arr[1] ....动态分配的数组。针对动态数组。 动态数组的内存分配在heap中。 而heap 的生成是由低地址向高地址生成。 所以有:&arr[0转载 2018-01-02 12:08:27 · 3253 阅读 · 1 评论 -
静态数组和动态数组 内存分布
数组是程序设计中是一个非常重要的概念。数组是一个用于收集大量类似数据的容器,以及其每一个元素能被相同处理过程迭代来处理的一个抽象体。创建数组一般有三种方式:全局/静态范围的数组,局部变量数组,申请堆空间来创建数组。其中,全局/静态范围的数组,以及局部变量属于静态数组。而申请堆空间来创建数组的属于动态数组。a[7]与p1_a[7]是一样的么?静态两维数组的排列顺序转载 2018-01-02 12:18:25 · 4516 阅读 · 0 评论 -
C++编写DLL的方法
在写C++程序时,时常需要将一个class写成DLL,供客户端程序调用。这样的DLL可以导出整个class,也可以导出这个class的某个方法。一、导出整个class方法很简单,只需要在类的头文件中class和类名之间加上_declspec(dllexport),同时在另外一份提供给客户端调用程序使用的类的头文件中class和类名之间加上_declspec(dllimport)。为了能转载 2017-09-12 14:54:35 · 2706 阅读 · 0 评论 -
DLL程序入口DllMain详解
DLL程序入口点函数:DllMain,注意:大小写是区别的(仅导出资源的DLL可以没有DllMain函数)。函数原型:[cpp] view plain copy print?BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reaso转载 2017-09-12 14:46:44 · 22137 阅读 · 1 评论 -
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.... 此错误的解
调用DLL里的函数 或 类成员函数 碰到此错误:Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling conven转载 2017-08-30 14:44:21 · 637 阅读 · 0 评论 -
dll动态库调用约定
1、动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中转载 2017-08-30 15:00:09 · 1621 阅读 · 0 评论 -
c++中vector的用法详解
vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: 1.文件包含: 首先在程序开头处加上#include以包含所需要的类文件vector 还有一定要加上using转载 2017-09-09 10:43:48 · 270 阅读 · 0 评论 -
C++中extern关键字的作用
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数转载 2017-09-09 10:50:55 · 5623 阅读 · 1 评论 -
windows重绘机制原理
一.Windows程序中的绘制和更新与DOS环境比较,Windows中的应用程序在处理文字和图形绘制时有以下区别:1.只能在窗口的客户区域绘制文字和图形2.在窗口上绘制的内容不一定能够保留到程序下一次有意地改写时。比如,当您的窗口被其他窗口覆盖,Windows不会保存您的窗口,当其他窗口移开时,Windows会要求你自己重新绘制窗口。二.WM_PAINT消息Window转载 2017-09-17 21:33:52 · 1650 阅读 · 0 评论 -
双缓冲技术绘图原理及简单的VC实现
为了增加自己对双缓冲绘图技术的理解,简要做个笔记(以Windows为例): 1、Windows 绘图原理 我们在 Windows 环境下看到各种元素,如菜单、按钮、窗口、图像,从根本上说,都是“画”出来的。这时的屏幕,就相当于一块黑板,而 Windows 下的各种 GDI 要素,如画笔、画刷等,就相当于彩色粉笔了。我们在黑板上手工画图时,是一笔一划的,电脑亦然。只不过电脑的速度比手工快转载 2017-09-10 15:46:15 · 670 阅读 · 0 评论 -
C#中Tuple的使用
定义:元组是具有 特定数量和序列 的元素 的数据结构 (注意断句哈!)元组通常有四种使用方式︰一、表示一组数据例如,一个元组可以表示一条数据库记录,并且每一个分量对应表示这条记录的每个字段便于对数据集进行访问和操作,例如下面这个例子(数据集市每个学生和他的分数,最后求出所有成绩的学生的平均分数):二、便于对数据集进行访问和操作例如下转载 2017-09-11 14:56:04 · 3967 阅读 · 0 评论 -
调用C++dll
1.dll的优点代码复用是提高软件开发效率的重要途径。一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用。比较常见的例子是各种应用程序框架,ATL、MFC等,它们都以源代码的形式发布。由于这种复用是“源码级别”的,源代码完全暴露给了程序员,因而称之为“白盒复用”。“白盒复用”的缺点比较多,总结起来有4点。 暴露了源代码;多份拷贝,造成存储浪费;转载 2017-09-12 14:03:23 · 310 阅读 · 0 评论 -
在C++里,有两种方法创建对象:
方法一:ClassName object(param);这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。例如,我定义了一个这样的类:class Rec原创 2016-08-29 21:40:48 · 726 阅读 · 0 评论 -
C/C++中函数参数传递
昨天看了内存管理的有关内容,有一点了解,但不是很深入,发现之前写代码时有很多细节问题没有注意到,只知道这样做可以实现功能,却不知道为什么可以这样,对于采用自己的方法造成的隐患也未知,更不晓得还有其他方法可以实现,我们知道C++强大的一个原因是因为对于一个问题的答案多种解答方法或思路,我想着也许就是它难学的原因。因为你只知道一种或极少数的实现方法,却不知道其他的实现方法,换句话说,就是对这个东西很掌转载 2017-12-28 15:37:57 · 700 阅读 · 0 评论 -
VS2013 MFC基于对话框编程(创建工程)
一、新建MFC项目选择:基于对话框MFC的使用: 在共享DLL中使用MFC (程序运行需要dll) 在静态库中使用MFC (程序较大,运行时不需要dll) 设置MFC程序主框架样式和标题 高级功能 若是用不上“ActiveX控件”可以去掉勾选,若要涉及到网络编程就把“windows嵌套字”选上 完成 二、MFC程序执行流程转载 2018-02-01 10:59:09 · 1960 阅读 · 0 评论 -
c++ 多线程:线程句柄可以提前关闭,但是线程并没有关闭
很多程序在创建线程都这样写的:ThreadHandle = CreateThread(NULL,0,.....);CloseHandel(ThreadHandle );1,线程和线程句柄(Handle)不是一个东西,线程是在cpu上运行的.....(说不清楚了),线程句柄是一个内核对象。我们可以通过句柄来操作线程,但是线程的生命周期和线程句柄的生命周期不一样的。线程的生命周期就是线程函数从...转载 2019-07-27 13:05:37 · 1210 阅读 · 0 评论 -
C++ 创建文件夹的四种方式
在开头不得不吐槽一下,我要的是简单明了的创建文件夹的方式,看得那些文章给的都是复杂吧唧的一大坨代码,不仔细看鬼知道写的是啥。因此,为了方便以后自己阅读,这里自己写一下 C++ 创建文件夹的四种方式:文章目录使用 system() 调用 dos 命令使用头文件 direct.h 中的 access 和 mkdir 函数调用 Windows API 函数调用 MFC 封装好的接口函数貌似...转载 2019-07-26 21:21:33 · 10101 阅读 · 0 评论 -
MFC中char*,string和CString之间的转换
string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的转换十分必要。以下我用简单的图示指出三者之间的关系,并以标号对应转换的方法。1 string 转为 CStringCString.format("%s",string.c_str());...转载 2019-07-26 20:56:59 · 1194 阅读 · 0 评论 -
线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的用法
线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的用法注:使用结构CRITICAL_SECTION 需加入头文件#include “afxmt.h”定义一个全局的锁 CRITICAL_SECTION的实例和一个静态全局变量CRITICAL_SECTIONcs;//可以理解为锁定一个资源 staticintn_AddValu...转载 2019-07-29 15:26:39 · 480 阅读 · 0 评论 -
指针强制转换问题
void ff(void* abc)//任意类型数据指针(指针即内存地址) { int* z = (int*)abc;//强制转换成int* 指针变量 int zz = *z;//获取内存中的值 }...原创 2019-02-26 11:56:47 · 482 阅读 · 0 评论 -
C/C++串口通信原理及读写与操作
http://wangbaiyuan.cn/c-serial-communication-write-reading.html [展开]文章目录 在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。串口通信方便易行,应用广泛。一般情况下,工控机和各智能仪表通过RS485总线进行通信。RS485的通信方式是半双工的,只能由作为主节点的工控...转载 2019-02-17 09:03:07 · 1744 阅读 · 0 评论 -
C++多线程编程(入门实例)
多线程在编程中有相当重要的地位,我们在实际开发时或者找工作面试时总能遇到多线程的问题,对多线程的理解程度从一个侧面反映了程序员的编程水平。 其实C++语言本身并没有提供多线程机制(当然目前C++ 11新特性中,已经可以使用std::thread来创建线程了,因为还没有系统地了解过,所以这里不提了。),但Windows系统为我们提供了相关API,我们可以使用他们来进行多线程编程。创建线程的...转载 2019-02-21 17:31:50 · 724 阅读 · 0 评论 -
c++内存测试
void MemoryTest()//内存测试 {//指针嵌套 char rr;//栈中分配内存(系统自动分配释放) int ee = (int)&rr;//将rr的内存地址转换成整型数 char* yy = &rr;//定义一个字符型指针yy,将rr内存地址赋予yy int* zz = (int*)&yy;//存放指针的指针变...原创 2019-02-15 14:27:21 · 712 阅读 · 0 评论 -
c++中sscanf的用法
sscanf 读取格式化的字符串中的数据。swscanf 是 sscanf 的宽字符版本;swscanf 的参数是宽字符串。 swscanf不处理 Unicode 全角十六进制或"兼容性区"字符。 除此以外,swscanf 和 sscanf 的行为完全相同。函数语法 1 int sscanf( const char *buffer, cons...转载 2019-02-15 14:14:30 · 7274 阅读 · 0 评论 -
C++ int与string的转化
int本身也要用一串字符表示,前后没有双引号,告诉编译器把它当作一个数解释。缺省情况下,是当成10进制(dec)来解释,如果想用8进制,16进制,怎么办?加上前缀,告诉编译器按照不同进制去解释。8进制(oct)---前缀加0,16进制(hex)---前缀加0x或者0X。string前后加上双引号,告诉编译器把它当成一串字符来解释。注意:对于字符,需要区分字符和字符表示的数值。比如:char...转载 2019-01-24 15:34:03 · 15519 阅读 · 0 评论 -
closehandle()函数
引用自《百度百科》,用于解决今天遇到的close handle 后什么时候释放资源问题: 方法名称:CloseHandle位置:Kernel32.dllBOOL CloseHandle(HANDLE hObject);参数hObject :代表一个已打开对象handle。返回值TRUE:执行成功;FALSE:执行失败,可以调用GetLastErro...转载 2019-01-18 18:59:01 · 2225 阅读 · 0 评论 -
#ifndef.#define, #endif 的用法
文件中的#ifndef.#define, #endif 很关键,是为了避免多重包含,比如如果两个C文件同时包含同一头文件,那么就会出现问题,所以使用这种方法可以有效避免这种情况。一般用法:以add.h为例1 #ifndef _ADD_H_2 #define _ADD_H_3 4 //在这里包含add.h的类定义及变量和函数的声明5 比如函数声明:int add(int ...转载 2018-11-08 16:28:45 · 873 阅读 · 0 评论