C++
文章平均质量分 54
墨然回首.
图形引擎开发
展开
-
WinDbg检查内存泄漏
1.在windbg.exe路径下执行cmd2.输入打开GFlags,我要检查的程序名称为midas XDS.exeC:\Program Files (x86)\Windows Kits\10\Debuggers\x64>gflags.exe /I midas XDS.exe +ust3.第一次拍照,此程序的进程pid为:17136C:\Program Files (x86)\Windows Kits\10\Debuggers\x86>umdh -p:17136 -f:test111.t原创 2021-12-23 11:36:52 · 1657 阅读 · 0 评论 -
调用另外一个项目中的函数-设计模式解耦
背景描述:现需要在项目 CDP_cmd 中调用项目 CDP_dgnCalc 类CAnalRstHelper_JTGTJ212011中的函数:BOOL GetElemValuePositiveOrNegativeMy(IN OUT TElemPosition& tElemPos,OUT double& dCtrlValue, BOOL bPositive);解决方法:1.查看项目属性,发现项目CDP_cmd和项目CDP_dgnCalc均引用项目CDP_db,故可在CDP_db中添加一原创 2021-03-15 19:37:45 · 311 阅读 · 0 评论 -
从DLL中动态加载一个函数:LoadLibrary和GetProcAddress的使用
背景描述:在项目CDP_cmd中需要调用项目CDP_dgnCalc中的类CAnalRstHelper_JTGTJ212011的函数:BOOL GetElemValuePositiveOrNegativeMy(IN OUT TElemPosition& tElemPos,OUT double& dCtrlValue, BOOL bPositive);解决方法:1.在CAnalRstHelper_JTGTJ212011.cpp中添加一个全局函数:EXTERN_C __declspec原创 2021-03-15 15:23:11 · 1316 阅读 · 0 评论 -
C++动态链接库配置
1.在项目文件夹中新建两个文件夹:lib和includeinclude文件夹的放链接库的.h文件:lib文件夹放lib文件:2.由于我动态调用的库是debug下x86多字节的,所以我需要新建一个配置Debug_MBCS3.字符集改为使用多字节字符集这时候打开预处理器定义,会看到继承的值中有_MBCS:如果是Unicode,继承的值为:关于MBCS和Unicode:MBCS表示多字节,比如“a中”,表示3个字节,字母a表...原创 2020-12-16 11:13:56 · 602 阅读 · 0 评论 -
C++ 在控件上使用科学记数法输出数据
方法:str.Format(_T("%.3g"),dNumber);代码实现: //保护层厚度、直径、宽度、高度 str.Format(_T("%.3g"),data.GetCovering()); m_EditCovering.SetWindowText(str); str.Format(_T("%.3g"),data.GetDiameter()); m_EditDiam...原创 2020-05-03 22:43:17 · 997 阅读 · 0 评论 -
C++ 不同名称的字符串数组归类
问题描述: 现有一个数组,数组存放着构件名称:ZC-1,ZC-2,ZC-2,ZC-2,ZC-3,ZC-1,ZC-2,ZC-3,ZC-3,ZC-3,将这些构件名称按照名称分组。如ZC-1放到一个数组里。代码实现://按几何条件归类,相同名称的构件即为几何条件相同,如ZC-1为一类void ClassificationStrutByName(const CString&...原创 2020-04-05 20:30:24 · 302 阅读 · 0 评论 -
C++ 冒泡排序 由大到小
void Sort(vector& vecStrutRebar) const{ for (unsigned int nIndex1 = 0;nIndex1 < vecStrutRebar.size(); nIndex1++) { for (unsigned int nIndex2 = 0 ; nIndex2 < vecStrutRebar.size() - nInd...原创 2020-04-05 20:20:39 · 2183 阅读 · 0 评论 -
C++ CString数字字符串排序
问题描述: 对后缀的字符数字进行排序:代码实现:void SortTypeName(std::vector<CString>& vecName){ std::map<CString,std::vector<CString>> mapName; //mapName<ZC-1,vector<ZC-1-1>> ...原创 2020-04-05 20:16:33 · 1037 阅读 · 1 评论 -
C++编写的表白小程序(图片围成爱心+烟花+音乐)-附源代码
一、效果视频效果:C++编写的表白小程序(图片围成爱心+烟花+音乐)-附源码二、项目完整源代码:链接:https://pan.baidu.com/s/1zea3Wji1VN4FIrqXoa4LWw提取码:ypag三、程序需要调用EasyX图形库官网链接:https://easyx.cn/downloads/使用的版本:EasyX库(附带graphics.h)...原创 2019-12-25 21:59:40 · 37726 阅读 · 19 评论 -
git clone到本地仓库出现错误-fatal: the remote end hung up unexpectedly 解决方法
主要是由于网速太慢的原因,调整网速的限制范围即可:原创 2019-08-10 22:06:12 · 2417 阅读 · 0 评论 -
[计算几何] 拆分所有的线段-将所有的相交线线段拆分开,得到新的线段集合
//分割所有的线段,得到新的线段数组vector<CLine> CMinimumClosedArea::breaklines(vector<CLine> input){ vector<CLine> lines; lines.clear(); lines = input; vector<CLine> output; output.cle...原创 2019-08-03 21:09:39 · 741 阅读 · 0 评论 -
[资源分享]Visual Assist最好的版本-不会过期-2015、2017可用
如下图所示,两步即可安装:下载链接:链接:https://pan.baidu.com/s/1_XHE057doqI0ZhlYwEnB2Q提取码:ujiu原创 2019-06-08 20:05:47 · 3134 阅读 · 5 评论 -
[C++]23.神秘的临时对象
一、有趣的问题输出结果:(是一个随机值)发生了什么:思考:答案:代码段Test(0)产生临时对象: Test() { Test(0); //想直接调用参数构造函数;此时产生临时对象 //等价于 Test(0) 不存在 }添加init()函数避免产生邻时对象:class Test { int mi; ...原创 2018-11-02 20:44:23 · 175 阅读 · 0 评论 -
2.1 C++类对象所占用的空间-为什么空类占用一个字节
一、空类占用一个子节先看下面示例代码:#include <iostream>using namespace std;class A{public:};//类对象所占的空间int main(){ A a; int ilen = sizeof(a); cout << ilen << endl; //输出 1 return...原创 2018-10-26 16:04:19 · 944 阅读 · 0 评论 -
【C++】使用sizeof计算类对象所占空间大小-sizeof总结
决定C ++中对象的大小的因素:1.所有非静态数据成员的大小 2.数据成员的顺序 3.字节对齐或字节填充 4.其直接基类的大小虚函数的存在 5. 正在使用的编译器 6.继承模式(虚拟继承) 一、使用sizeof计算类对象所占空间大小 需要注意,对类做sizeof运算时,并不是简单地把各个成员所占的内存数量相加。需要注意成员顺序不同,可能需要字节补齐。...原创 2018-10-01 15:26:31 · 7769 阅读 · 3 评论 -
【C++】前置操作符(++i)和后置操作符(i++)
一、自增和自减的基本使用方法自增的两种形式: i++ i 的值作为返回值,i 自增 1; ++i i 自增 1,i 的值作为返回值。 Example:#include <iostream>#include <string>using namespace std;int main(){ int i = 0; i++; ...原创 2018-09-26 13:06:02 · 894 阅读 · 0 评论 -
const关键字:从C进化到C++深度剖析
(1)C语言中的const特点const修饰的变量是只读的,本质还是变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在只读存储区分配空间 const只在编译器有用,在运行期无用 注意:const修饰的变量不是真的变量,它只是告诉编译器该变量不能出现在赋值符号的左边 (2)思考:const 能不能定义真正的常量?答:不能,C语言中真正定义的常量只有枚...原创 2018-08-27 18:33:02 · 142 阅读 · 0 评论 -
【C++】引用的本质分析
声明:本文为听课笔记,课程为https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-16326486319.21.2620ebfcFFOSQa&id=559166901112(1)引用的意义1.引用作为变量别名而存在,因此在一些场合可以代替指针 2.引用相对于指针来说具有更好的可读性和使用性 (2)交换函数实现对比...原创 2018-08-31 16:01:28 · 475 阅读 · 0 评论 -
【C++】内联函数分析
一、为什么要使用内联函数: 当程序执行函数调用指令时,CPU存储函数调用之后的指令的存储器地址,复制函数的参数在堆栈上,最后将控制转移到指定的函数。然后,CPU执行功能代码,将功能返回值存储在预定义的存储器位置/寄存器中,并将控制返回给调用功能。如果函数的执行时间小于从调用函数到被调用函数(被调用者)的切换时间,则这可能成为开销。对于大型和/或执行复杂任务的函数,与函数运行所花费的时间相比,...原创 2018-09-02 18:25:10 · 2943 阅读 · 1 评论 -
【C++】布尔类型和引用详细分析
一、C++中的布尔类型(1)特点①C++在C语言的基本类型基本系统之上增加了bool②C++中的bool可取的值只有true和false③理论上bool只占一个字节(2)注意①bool类型只有true(非0)和false(0)两个值②C++编译器会将非0值转化为true,0值转换为false(3)实例分析#include <stdio.h>#in...原创 2018-08-29 19:45:31 · 1562 阅读 · 0 评论 -
【C++】函数参数的扩展(听课笔记)
本文为听课笔记,课程:https://ke.qq.com/course/204044一、函数参数的默认值(1)C++中可以在函数声明时为参数提供一个默认值 当函数调用时没有提供参数的值,则使用默认值。example :int mul(int x = 0);int main(int argc, char *argv[]){ printf("%d\n", mu...原创 2018-09-03 19:30:27 · 251 阅读 · 0 评论 -
【C++】命名空间(namespace)详解
一、为什么使用命名空间考虑一种情况,当我们有两个同名的人,Zara,在同一个班里。当我们需要对它们进行区分我们必须使用一些额外的信息和它们的名字,比如这个区域,如果它们生活在不同的区域或者它们的母亲或父亲的名字,等等。 在您的C++应用程序中也会出现同样的情况。例如,您可能正在编写一些具有名为xyz()函数的代码,并且还有另一个可用的库,它也具有相同的xyz()函数。现在编译器无法知道...原创 2018-09-08 13:53:01 · 97668 阅读 · 12 评论 -
C++和C相互调用-extern "C"的使用
一、C++调用C实际工程中C++和C代码相互调用是不可避免的1.C++编译器能够兼容C语言的编译方式 2.C++编译器会优先使用C++编译的方式 3.extern关键字能强制让C++编译器进行C方式的编译 语法:extern "C"{ //do C-style compilation here}Example:C语言文件 add.c :...原创 2018-09-05 17:32:39 · 1634 阅读 · 1 评论 -
【C++】函数重载分析
函数重载:您可以在相同的范围内对同一个函数名有多个定义。函数的定义必须根据参数列表中的参数和/或参数的数量而有所不同。您不能重载仅由返回类型不同的函数声明。一、函数重载分析(1)特点1.同一个函数名定义不同的函数。 2.当函数名和不同的参数搭配时函数的定义不同 example :#include <stdio.h>#include <string....原创 2018-09-04 15:49:03 · 436 阅读 · 0 评论 -
【C++】强制类型转换-static_cast、dynamic_cast、reinterpret_cast、和const_cast
一、C方式的类型转换(1)语法:(Type)( Expression )Example:#include <stdio.h>typedef void(PF)(int);struct Point{ int x; int y;};int main(){ int v = 0x12345; PF* pf = (PF*)v; //将int 类型的...原创 2018-09-11 08:23:11 · 3130 阅读 · 0 评论 -
【C++】const用法详解及其本质分析
一、const的用法 const是不改变的。在C和C++中,我们使用关键字const来使程序元素保持不变。const关键字可以在C++程序的许多上下文中使用。它可以用于:变量 指针 函数参数和返回类型 类数据成员 类成员函数 对象 1) const变量 如果你用const关键字做任何变量,你就不能改变它的值。同样,必须在声明的时候初始化常数变量。...原创 2018-09-12 11:44:36 · 5522 阅读 · 1 评论 -
【C++】拷贝构造函数 Copy Constructor (深拷贝、浅拷贝、赋值操作符)
一、拷贝构造函数的性质定义: 拷贝构造函数是一个成员函数,它用同一个类的一个对象初始化另一个对象。语法:classname (const classname &obj) { // body of constructor} note: 当类中没有定义拷贝构造函数时,编译器默认提供一个拷贝构造函数,简单的进行成员变量的值赋值。拷贝构造函数的作用:1.从同...原创 2018-09-18 13:53:23 · 702 阅读 · 0 评论 -
【C++】动态内存分配详解(new/new[]和delete/delete[])
一、为什么需要动态内存分配?在C++程序中,所有内存需求都是在程序执行之前通过定义所需的变量来确定的。 但是可能存在程序的内存需求只能在运行时确定的情况。 例如,当需要的内存取决于用户输入。 在这些情况下,程序需要动态分配内存,C ++语言将运算符new和delete合成在一起。(1)特点1.C++中通过new关键字进行动态内存申请 2.C++中的动态内存分配是基于类型进行的 ...原创 2018-09-07 13:14:42 · 90701 阅读 · 12 评论 -
【C++】Virtual 析构函数
使用指向具有非virtual 析构函数 的基类的指针来删除派生类对象会导致未定义的行为。为了纠正这种情况,应该用 virtual 析构函数来定义基类。例如,以下程序导致未定义行为。// CPP program without virtual destructor // causing undefined behavior #include<iostream> ...翻译 2018-09-13 07:52:38 · 290 阅读 · 1 评论 -
【C++】-面试问题-int f()与int f(void)有区别吗?
一、答案解析(1)若在C语言编译器中,int f(): 表示返回值int,参数为任意多个;int f(void): 表示返回值为int,不接收任何的参数。(2)若在C++编译器中,两种解法没有任何区别。表示返回值为int的无参函数。二、实例分析我们可以使用一个实例来阐明两者的区别:#include <stdio.h>struct Stude...原创 2018-08-26 20:47:31 · 7203 阅读 · 0 评论