C++
wingWC
Qt/OpenCV/AI
展开
-
程序调试的常用方法
常用的程序调试方法有四种:--单步调试(一步一步观察程序是如何运行的,理清逻辑思路)--局部变量(打开局部变量观看其是否被赋值)--打log,在可疑的地方打赏log观看其值是否被打印出来--内存泄漏(用专门的内存泄漏软件查找)原创 2017-03-30 21:50:34 · 6125 阅读 · 0 评论 -
C++11 for_each函数与Qt中foreach函数比较
#include <iostream>#include <string>#include <algorithm>#include <vector>#include <iterator>#include <QCoreApplication>#include <QDebug>using namespace std;void add(int& i){ i++;}void out(原创 2017-10-17 22:02:29 · 1917 阅读 · 0 评论 -
《函数指针的理解》
顾名思义,函数指针是一个指向函数的指针,该指针存放了函数的地址,地址中有着函数名,函数参数等信息,其基本语法如下:c++函数指针的定义形式:返回类型 (类名称::*函数成员名称)(参数类型,参数类型,参数类型,….); 对于函数指针的使用,以上篇中Qt的信号槽为例,我们可以写为: int MainWindow::FunPoint() { qDeb原创 2017-09-27 17:08:23 · 426 阅读 · 0 评论 -
《Effective C++读书笔记》--条款06:若不想使用编译器自动生成的函数,就应该明确拒绝
首先我们要明确,编译器产出的所有函数都是public,因此将成员函数声明为private且故意不去实现他们可以阻止编译器为你自动生成你不想要的函数。但我们在member函数或friend函数中使用该函数时,那么会在连接时发生错误,我们可以将错误迁移至编译阶段,此时的方法就是专门设计一个阻止拷贝动作的基类,这个基类的实现如下:class Uncopyable{protected: Un原创 2017-08-28 13:56:08 · 285 阅读 · 0 评论 -
关于初始化列表的总结
使用初始化列表主要有两个方面的原因:一是某些情况下不得不使用初始化列表,二是基于效率方面的考虑,一下我们具体分析这两种情况:一:必须使用初始化列表:初始化列表是在构造函数之前执行的,当我们的成员变量中具有常量值,引用或者没有无参构造函数的类时,我们必须使用初始化列表初始化。因为常量值只能被定义一次,且不能给常量赋值,对于类成员变量来说,由于编译器会在调用构造函数之前初始化该类,此时会调用该原创 2017-08-17 17:03:04 · 329 阅读 · 0 评论 -
什么情况下必须使用C++的初始化列表
先给理论。 1. 初始化 != 赋值. a.初始化代表为变量分配内存. 变量在其定义处被编译器初始化(编译时). 在函数中, 函数参数初始化发生在函数调用时(运行时). b.赋值代表"擦除对象当前值, 赋予新值". 它不承担为对象分配内存的义务. 2. C++中, 类成员的初始化于初始化列表中完成, 先于构造函数体执行. 即成员真正的初始化发生在初始化列表中, 而不是构造函数体中.再给说明。转载 2017-08-17 09:37:05 · 1822 阅读 · 0 评论 -
c++中对类中私有成员中的静态变量初始化
1.static成员的所有者是类本身和对象,但是多有对象拥有一样的静态成员。从而在定义对象时不能通过构造函数对其进行初始化。2.静态成员不能在类定义里边初始化,只能在class body外初始化。3.静态成员仍然遵循public,private,protected访问准则。4.静态成员函数没有this指针,它不能返回非静态成员,因为除了对象会调用它外,类本身也可以调用。今天写程序出现:err转载 2017-07-23 11:20:30 · 7730 阅读 · 0 评论 -
《C++学习笔记》--static成员函数
1 static函数是在类的作用域中,可以避免与其它类的成员或全局对象名字冲突2 可以实施封装,static函数可以是类的私有成员,全局函数则不可以3 static函数与特定类关联,这种可见性可以清晰的显示出程序意图4 static成员函数属于类不属于对象,访问方式:ClassName::Func();一般在实现回调函数, 或者线程函数时使用,其他地方尽量少使用。转载 2017-05-17 22:33:27 · 324 阅读 · 0 评论 -
《数据结构与算法》--插入排序(类模板实现)
#include using namespace std;void PrintArray(int *p,int n,int i){ cout<<i<<":"; for(int k=0;k<n;k++) { cout<<p[k]<<" "; } cout<<endl;}void InsertSort(int *p,int len原创 2017-04-25 15:07:08 · 343 阅读 · 0 评论 -
《Qt数据类型》--基本数据类型QByteArray,QString,char,byte之间的转换
在上位机通讯中,根据通讯协议,有时候需要发送16进制的数据,本人在编程的时候容易把各种数据字面值和实际值搞混淆,故写这篇文章给大家参考,也给自己提醒。在Qt中串口的接收和发送的数据类型都是QByteArray,因此我们需要在通讯的双方进行数据转换,此时我们根据通讯协议,有的设备接收字符串,而有的设备接收16进制的数据。一般我们发送16进制的数据时使用长度为一个字节的数据类型,比如char,原创 2017-05-23 13:14:18 · 9515 阅读 · 0 评论 -
《C++基本的数据类型》
在计算机中,基本的单位为字节(8位,即8个电子开关),同样的数据类型在不同位数的机器上可能有所不同,比如int类型在32位机中占4个字节(32位),在64位机中占8个字节(64位),unsigned所表示的范围比有符号的大一倍,C++中有隐式类型转换,即所占字节少的可以向所占字节多的转换(比如char转换为int),否则需要强制类型转换(比如(int)char),所有的数据类型在计算机中都是以2进转载 2017-05-23 11:18:15 · 336 阅读 · 0 评论 -
C++内存管理 RAII
C++和C#,python等语言不同,其本身是没有gc机制的,因此我们需要手动来管理内存,一般来说,我们只要将每一个new出来的对象delete之后,就可以保证资源不被泄漏,但万事都不是那么理想的,我们可能因为忘记delete而导致内存泄漏,并且当开发大型项目时,我们可能不了解其他人的代码意图,导致不能正确释放内存,因此,我们有几种方法来解决该问题。 RAII即当资源取得时机就是初始化时机原创 2017-12-20 14:29:31 · 644 阅读 · 0 评论