c++
文章平均质量分 58
吴安
大漠孤烟直,长河落日圆。 C++ C# Halcon openCV
展开
-
bmp数据格式
先区分几个概念:16色和16位色一样吗?不一样!颜色位数,即是用多少位字节表示的值,每一位可以表示0和1两值。通常图片的颜色深度,简称色深,就是用位数来表示的,所以,我通常会看到8位色,16位色,24位色和32位色。而我们在其它地方看到的又是16色,256色,16777216色等等,这些怎么一回事呢? 16色即代表16种颜色,256色即256种颜色,8位色就是用8个位来表示的颜色,即2...转载 2019-01-24 15:13:08 · 1068 阅读 · 1 评论 -
strtoul
之前使用strtoul函数时,从来没思考过它的用法,最近在编写驱动设计时,突遇这个函数,发现这函数还是有值得探讨的地方。其函数原型如下:unsigned long strtoul(const char *nptr,char **endptr,int base )参数1:字符串起始地址参数2:返回字符串有效数字的结束地址,这也是为什么要用二级指针的原因。参数3:转换基数。当b转载 2017-01-12 08:17:56 · 216 阅读 · 0 评论 -
C++ operator= 注意事项
版权声明:本文为博主原创文章,未经博主允许不得转载。下面先看一段代码:[cpp] view plain copy #include using namespace std; class Point{ public: Point(float x=0.0,float y=0.0):_x(x),_y(y){转载 2016-12-21 13:42:19 · 1027 阅读 · 0 评论 -
单件类的实现
#include #include #include #include "string"using namespace std;class example_singletom;template class singleton{public: static T* instance(); static void releaseinstance(); singleton(){}原创 2016-11-25 21:42:09 · 1112 阅读 · 0 评论 -
va_start和va_end的使用及原理
本文主要介绍va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表void foo(转载 2016-11-25 17:37:29 · 495 阅读 · 0 评论 -
模板类默认参数,模板类的特化,偏特化, 模板成员函数,模板的专用化例子
#include "stdio.h"#include "stdlib.h"#include #include using namespace std;class Sample2{public: template void print() {printf("\nSample2 print template , "); cout<<"print####:"<<typeid(T)原创 2016-12-07 14:34:27 · 1531 阅读 · 0 评论 -
成员函数(member function)模板(template) 详解 及 代码
成员函数(member function)模板(template) 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/16918085 成员模板(member template) 既可以在普通类(ordinary class), 也可以在类模板(class template);转载 2016-12-07 14:41:02 · 2192 阅读 · 0 评论 -
C++关键字typename的深入理解
在C++模板中,可以使用class或者typename来声明模板参数,那么这两个关键字有什么区别呢?模板参数声明对于模板参数声明,这两个参数没有区别,含义是一样的。template class Widget; // uses "class"template class Widget; // uses "typename"答案:没什么不同。在声明一个 template type p转载 2016-12-07 10:54:30 · 328 阅读 · 0 评论 -
模板函数和类的特化以及偏特化
模板为什么要特化,因为编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该听你的。模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是如果这个模板有多个类型,那么只限定其中的一部分。先看类模板:[cpp] view plain copytemplatetypename T1, ty转载 2016-12-07 09:17:31 · 1009 阅读 · 0 评论 -
c++ 类的继承与派生
c++ 类的继承与派生一、基本概念1、类的继承,是新的类从已有类那里得到已有的特性。或从已有类产生新类的过程就是类的派生。原有的类称为基类或父类,产生的新类称为派生类或子类。 2、派生类的声明:class 派生类名:继承方式 基类名1, 继承方式 基类名2,...,继承方式 基类名n{ 派生类成员声明;}; 3、一个派生类可以同时有转载 2016-11-23 16:21:39 · 301 阅读 · 0 评论 -
父类子类指针函数调用注意事项
父类子类指针函数调用注意事项1,如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩)2,如果以一个衍生类指针指向一个基础类对象,必须先做强制转型动作(explicit cast),这种做法很危险,也不符合生活习惯,在程序设计上也会给程序员带来困扰。(一般不会这么去定义)3,如果基础类和衍生类定义了相同名称的成员函数,那么通过对象指针调转载 2016-11-23 10:49:55 · 1110 阅读 · 0 评论 -
数组指针(也称行指针) &指针数组
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;转载 2016-11-30 17:00:46 · 2674 阅读 · 1 评论 -
VC轻松解析XML文件 - CMarkup类的使用方法
VC轻松解析XML文件 - CMarkup类的使用方法VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等。据说tinyXML很好,可能字符集问题,我编译不了。所以就用CMarkup来解析,使用过后,觉得非常不错,使用起来很方便。CMarkup下载地址:http://www.firstobject.com/发现网上有方法很法,我就摘下来了转载 2016-11-17 08:13:02 · 318 阅读 · 0 评论 -
explicit
在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上。再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决。但稍微留心一下就会发现现有的MFC库或者C++标准库中的相关类声明中explicit出现的频率是很高的。了解explicit关键字的功能及其使用对于我们阅读使用库是很有帮助的,而且在编写自己的代码时也可以尝试使用。既然C++语言提供这种特性转载 2016-11-29 09:03:38 · 281 阅读 · 0 评论 -
类的成员函数做线程的创建
类的成员函数 是不能作为线程的参数,去创建线程的。原因我个人认为是:我们创建的对象,在超出作用域的时候,会自动的销毁掉。这样的话线程这是可能还没有销毁,会引起问题。所以线程的静态函数,可以去作为线程的参数,因为其不会因为类的对象销毁而销毁。这个原理 其实和类的静态函数不能使用非静态的成员函数一样。原因就是其静态函数存在,如果函数体内用了成员变量,对象销毁了,函数会异常。 如果我们要是原创 2016-11-28 20:16:11 · 1063 阅读 · 0 评论 -
C++ 运算符重载
C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性。运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,转载 2016-10-17 16:31:48 · 508 阅读 · 0 评论 -
字符串与整数、浮点数、无符号整数之间的转换常用函数
字符串与整数、浮点数、无符号整数之间的转换常用函数有用的函数,感谢发贴那位兄弟。。。。。。atof(将字符串转换成浮点型数)表头文件 #include 定义函数 double atof(const char *nptr);函数说明atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结转载 2017-01-12 08:20:27 · 280 阅读 · 0 评论 -
单体模式+模板类+智能指针实现CSingleton
单体模式+模板类+智能指针实现CSingleton定义单体(Singleton)模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。理解1. Singleton模式用来取代全局静态变量。C++通过静态成员变量来实现类实例全局唯一性。2. instance()方法是单体提供的唯一调用入口。要点1. 为了防止外界调用产生多个实例转载 2017-02-14 17:00:51 · 364 阅读 · 0 评论 -
泛型链表的反转
#include<iostream>#include "stdlib.h"using namespace std;template<typename T>class mylist{private: struct node { T data; node* m_next; node() { m_next=NULL; } };pub...原创 2018-10-07 17:24:47 · 144 阅读 · 0 评论 -
C++异常机制
C++异常 为什么要用c++的异常处理机制? 在我们平时写C语言程序时,经常出现会出现一些错误,有些是我们可以预测到的,这些我们可以通过返回错误码,或者设置回调函数打印错误信息等方法处理。但还有些程错误是我们不好预测的,如断错误,这时产生错误我们没有处理就会终止程序,然而我们经常运行程序后遇到错误不希望终止,如我们进程使用一些垃圾软件会闪退,这就是因为他门的程序异常没有处理好,所以遇...转载 2018-08-03 11:58:42 · 280 阅读 · 0 评论 -
c++ 多继承
#include "stdafx.h"#include <stdlib.h>#include <iostream>using namespace std;class A{ public: A(){_a = 0x00;} virtual ~A(){} virtual void printA(){} virtual A* clone()co...原创 2018-08-07 12:13:04 · 194 阅读 · 0 评论 -
C++const
C++ const用法小结 (欢迎大家拍砖)C++const 关键字小结 const 是constant的缩写,本意是不变的,不易改变的意思。const 在C++中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。 一、const修饰普通类型的变量。如下:1 const int a = 7; 2 3 int b = a; //it's rig...转载 2018-08-07 11:17:48 · 265 阅读 · 0 评论 -
C++库的链接错误的总结
我们经常在写C++程序的时候 回用到第三方库。或者自己写的库给别人使用。所以经常回遇到链接错误。总结写一下链接错误的原因。 1 有声明 无实现。 我们声明了变量,但是没有去实现。这样的话回出现链接错误。编译的时候,编译器只要知道这个变量的类型就可以。常常是全局变量忘记。2 没有_declspec(dllexport) ,我们的第三方库没有导出的情况下,是使用不了的。...原创 2018-08-02 10:56:17 · 2159 阅读 · 0 评论 -
多字节编码和Unicode编码的转换。
经过测试可以使用 现变成两个函数:CStringA UnicodeToAnsi(CStringW& wstr,int Sel=0) CStringW AnsiToUnicode(char * pChar,int Sel)再Unicode 编译环境下测试 MFC中测试使用。 CStringA UnicodeToAnsi(CStringW& wstr,in...原创 2018-08-01 12:22:21 · 1567 阅读 · 0 评论 -
CString与char*互转、ANSI 和 UNICODE 编码及_T和L宏定义的介绍
1、简述UniCode 下 CString 转 char* 的方法https://blog.csdn.net/neverup_/article/details/5664733之前在写MFC程序的时候经常会用到CString 字符串类型,自从转到Qt就转为用QString了,自然QString比CString好用多了。最近需要将CString 与 char* 进行互转,在使用过程中遇到了...转载 2018-08-01 09:29:40 · 372 阅读 · 0 评论 -
Debug 和 Release 的区别
Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。 Debug版本包括调试信息,所以要比Release版本大很多(可能...转载 2018-07-13 17:43:42 · 285 阅读 · 0 评论 -
C++相对路径
转自:http://www.cnblogs.com/vranger/p/3820783.html 最近节点管理的项目中编程需要用到相对路径和绝对路径,我总是在这一部分弄得不是很清楚,所以把相关的知识摘录一下,以备学习。 C\C++编程中:相对路径+绝对路径电脑硬盘E盘下,建文件夹“test”,"test"下建立子文件夹“file”,"file"下建子文件夹“data”,电脑资源管理器...转载 2018-05-08 16:44:01 · 4224 阅读 · 0 评论 -
DLL详解
DLL(Dynamic Link Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件...转载 2018-05-08 15:56:37 · 2245 阅读 · 0 评论 -
二级指针与指针的引用
#include "stdlib.h"#include "stdio.h"#include <iostream>using namespace std;void show(){ std::cout<<"this is show"<<endl;}void calc(){ std::cout<<"this is原创 2018-05-11 10:44:38 · 918 阅读 · 0 评论 -
编写DLL所学所思(2)——导出类
编写DLL所学所思(2)——导出类2011.10.6烛秋一、导出类的简单方式这种方式是比较简单的,同时也是不建议采用的不合适方式。只需要在导出类加上__declspec(dllexport),就可以实现导出类。对象空间还是在使用者的模块里,dll只提供类中的函数代码。不足的地方是:使用者需要知道整个类的实现,包括基类、类中成员对象,也就是说所有跟导出类相关的东西,使用者都要知道。通过Depende...转载 2018-05-08 21:53:33 · 186 阅读 · 0 评论 -
编写DLL所学所思(1)——导出函数
编写DLL所学所思(1)——导出函数2010.8.31~2010.9.1总结2011.9.28~30整理烛秋动态链接库的使用有两种方式,一种是显式调用。一种是隐式调用。(1) 显式调用:使用LoadLibrary载入动态链接库、使用GetProcAddress获取某函数地址。(2) 隐式调用:可以使用#pragma comment(lib, “XX.lib”)的方式,也可以...转载 2018-05-08 21:51:18 · 216 阅读 · 0 评论 -
C++线程池
[html] view plain copy #include <stdio.h> #include <stdlib.h> #include <vector> #include <algorithm> #include <assert.h> #include <Windows.h> #inclu...转载 2018-04-18 23:57:15 · 249 阅读 · 1 评论 -
C++中explicit
C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。 1 是个构造器 ,2 是个默认且隐含的类型转换操作符。所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象。这样看起来好象很酷, 很方便。 但在某些转载 2017-06-05 11:02:11 · 278 阅读 · 0 评论 -
C++模板的理解
#include #include using namespace std;//using std::cout;//using std::cin;//using std::endl;template class stack{public: void push(T& a); T pop(); stack( int maxSize);//int maxSize void sh原创 2016-10-17 16:15:11 · 331 阅读 · 0 评论 -
模板类中输入流“>>”和输出流“<<”的重载
模板类中操作符重载问题(">"重载)在模板类中输入流“>>”和输出流“>"的重载。一、将输出流">"重载的实现写在类中#include "stdafx.h"#include using namespace std; templateclass T> class Test { public: Tes转载 2016-10-17 14:33:51 · 580 阅读 · 0 评论 -
C++ Template
1. 模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float转载 2016-10-17 09:19:17 · 311 阅读 · 0 评论 -
原子性和volatile
所谓原子操作,就是"不可中断的一个或一系列操作" , 在确认一个操作是原子的情况下,多线程环境里面,我们可以避免仅仅为保护这个操作在外围加上性能昂贵的锁,甚至借助于原子操作,我们可以实现互斥锁。很多操作系统都为int类型提供了+-赋值的原子操作版本,比如 NT 提供了 InterlockedExchange 等API, Linux/UNIX也提供了atomic_set 等函数。 前转载 2016-08-16 13:47:58 · 395 阅读 · 0 评论 -
vector功能
// erase功能:移除vector中部分的元素 void test_vector_erase() { int t[7] = {10, 11, 12, 13, 14, 15, 16}; std::vectorint> vect(t, t + 7); std::cout "vect = "; std::copy(vec转载 2016-01-23 18:57:57 · 401 阅读 · 0 评论 -
CArray和CTypedPtrList的使用初步
方法1:使用CArray定义:class test : public CObject{public: CString m_strName; char m_cAddress[80]; int m_iAge;public: test(); test& operator=( const test& cSrc);};转载 2016-01-05 18:27:22 · 1237 阅读 · 1 评论 -
c++链表类的实现
#include #define NULL 0class Node //节点类{public: Node(){} Node(int n){ num=n; next=NULL; } Node(int n, Node *p){ num=n; next=p;} void setNum(int n) {num =n;} void setNext(Node *p)转载 2016-01-05 09:03:04 · 491 阅读 · 0 评论