C/C++
文章平均质量分 86
安静平和
这个作者很懒,什么都没留下…
展开
-
[]运算符的重载和二维数组类的[][]运算符重载
微软的MFC框架中的CWordArray、CByteArray等一些类提供了一套用面向对象机制封装的数组类,使用起来非常方便,相当于VB中的变长数组,而且由于完善的封装,免去了用标准C++的new方法分配内存的操作,避免了因为忘记delete内存而造成内存泄漏的情况发生(前提是这些类的实例是在栈上创建,不是在堆上创建)。由于这些类重载了[]运算符,使得我们不必非要使用蹩脚的SetAt(),GetA转载 2014-02-27 11:19:47 · 5269 阅读 · 0 评论 -
C++中引用传递与指针传递区别
从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数转载 2014-04-17 22:40:44 · 990 阅读 · 0 评论 -
c++中数组名与函数的区别
文章转自http://tech.163.com/05/0823/11/1RR94CAS00091589.html引言 指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针"。很幸运,我的大学老师就是其中之一。时至今日,我日复一转载 2014-04-18 09:51:45 · 932 阅读 · 0 评论 -
C#——详析GetHashCode方法
GetHashCode函数一般是在操作HashTable或者Dictionary之类的数据集的时候被调用,目的是产生一个Key,为了方便在 HashTable或者 Dictionary中的检索。 每个类型,不管是值类型还是引用类型,都提供这个基本函数,同样也可以像重写ToString或者Equals函数一样去重写它。但是不建议重写此函数,而且在使用这个函数也需要加倍小心。转载 2014-04-10 22:54:18 · 50496 阅读 · 7 评论 -
覆盖、重写、重载
父类有方法 object fun(); 如果在子类中也定义方法object fun(); 则原创 2014-07-24 16:39:53 · 822 阅读 · 0 评论 -
C++中double数据类型的内存模型
今天在使用union联合体的时候无意中发现double的内存模型和古怪,o(︶︿︶)o 唉,只能说自己当时计算机组成没有学好,更确切的说是自己当时没怎么学懂,好在今天解决了它。首先发一个代码(问题的引出):断点调试:查看memory: 由此图大家可以看到double类型的b成员的值很古怪,到底是怎么组织的呢转载 2014-07-21 16:47:32 · 1840 阅读 · 0 评论 -
dllimport与dllexport作用与区别
我相信写WIN32程序的人,做过DLL,都会很清楚__declspec(dllexport)的作用,它就是为了省掉在DEF文件中手工定义导出哪些函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出类。但是,MSDN文档里面,对于__declspec(dllimport)的说明让人感觉有点奇怪,先来看看MSDN转载 2014-08-18 16:36:32 · 7854 阅读 · 1 评论 -
C++用new和不用new创建类对象区别
起初刚学C++时,很不习惯用new,后来看老外的程序,发现几乎都是使用new,想一想区别也不是太大,但是在大一点的项目设计中,有时候不使用new的确会带来很多问题。当然这都是跟new的用法有关的。new创建类对象,使用完后需使用delete删除,跟申请内存类似。所以,new有时候又不太适合,比如在频繁调用场合,使用局部new类对象就不是个好选择,使用全局类对象或一个经过初始化的全局类指针似乎更加高原创 2014-08-20 13:30:08 · 918 阅读 · 0 评论 -
C++ C# JAVA 创建对象
创建对象:C++和Java的异同C++Java类定义: Class User {...};类定义:Class User {...}对象构造: (1) User u(...);对象构造: (2) User* p = new User(.原创 2014-08-20 13:37:53 · 1245 阅读 · 0 评论 -
C++ 值传递、指针传递、引用传递详解
C++ 值传递、指针传递、引用传递详解收藏人:学海无涯GLC++中引用返回和标准返回的区别举个例子:int &f(int &x){return x;}int main(){int a = 10;int b = f(a);return 0;}所谓引用传递就是不复制内存,把自己传递给对方,标准传递就是把自己的复制品传递给对方.程序首先定义变量转载 2014-09-17 09:50:32 · 992 阅读 · 0 评论 -
OpenCV
OpenCV(Open Source Computer Vision Library) 由公司在背后提供支持。它包含了超过500个函数来实现用于图形处理和计算机视觉方面的通用算法。转载 2014-09-16 15:03:05 · 7896 阅读 · 0 评论 -
把一个类的析构函数定义成virtual
#include using namespace std; class A { public: virtual ~A() { cout << "Destroy A" << endl; } }; class B : public A { public: ~B() { cout << "Destroy B" << endl; } }; int main(转载 2014-11-05 13:47:21 · 664 阅读 · 0 评论 -
vc中调用Com组件的方法详解
需求:1.创建myCom.dll,该COM只有一个组件,两个接口: IGetRes--方法Hello(), IGetResEx--方法HelloEx()2.在工程中导入组件或类型库 #import "组件所在目录myCom.dll" no_namespace或 #import "类型库所在目录myCom.tlb" using namesp转载 2015-04-22 17:01:48 · 1322 阅读 · 1 评论 -
使用ATL设计组件
新建一个工程: 点击OK,其它都是Next一直到Finish. 工程建好后,可以看到如下类视图: 点击Project->Add Class… 选择ATL Simple Object转载 2015-04-22 16:51:49 · 710 阅读 · 0 评论 -
#import 指令 C++
#import 指令C++特殊处#import指令用于从一个类型库中结合信息。该类型库的内容被转换为C++类,主要用于描述COM界面。语法#import "文件名" [属性]#import [属性]属性:属性1,属性2,...属性1 属性2 ...文件名是一个包含类型库信息的文件的名称。一个文件可为如下类型之一:*转载 2015-04-22 17:37:01 · 12074 阅读 · 1 评论 -
Visual C++中的AFX前缀
Afx前缀是微软MFC的Application Framework技术团队的名称简写,"X"没有什么意义,是比较流行的结尾字符,如activex等。这个小组最初的宪章是要"utilize the latest in object oriented technology to provide tools and libraries for developers writing t转载 2015-04-22 17:28:46 · 1748 阅读 · 0 评论 -
CallBack函数 回调函数
CallBack函数定义回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。实现的机制[1]定义一个回调函数;[2]提供函数实现的一方在初始化转载 2015-04-20 13:03:57 · 1035 阅读 · 0 评论 -
fopen\fread\fwrite\fscanf\fprintf\fseek\feof\rewind\fgets\fputc等系列函数使用总结
函数原型:FILE * fopen(const char * path,const char * mode);返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。fopen_s,_wfopen_s安全性上相对于fopen有所增强,如果成功则返回0,失败则返回响应的错误代码errno_t fopen_s( FILE** p转载 2015-04-17 14:17:46 · 1040 阅读 · 0 评论 -
c_str函数
函数声明:const char *c_str();c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同.这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针比如:最好转载 2015-04-17 14:35:43 · 816 阅读 · 0 评论 -
C++ Vector的使用
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。1 基本操作(1)头文件#include.(2)创建vector对象,vector vec;(3)尾部插入数字:vec.push_back(a);(4)使用下标访问元素,cout(5)使用迭代器访问元素.vectorint>::iterator it;for(it=ve转载 2015-04-17 14:24:47 · 545 阅读 · 0 评论 -
C++ - _T含义 C++语言中“_T”是什么意思?
_T("")是一个宏,定义于tchar.h下。#define __T(x) L ## x#define _T(x) __T(x)--------------------------------------------------------------_T("Hello")是一个宏,他的作用是让你的程序支持Unicode编码,因为Windows使用两种字符集ANSI和UNI转载 2015-04-17 15:06:42 · 15778 阅读 · 1 评论 -
C++ map
C++ map的基本操作和使用 来源:(http://blog.sina.com.cn/s/blog_61533c9b0100fa7w.html) - C++ map的基本操作和使用_Live_新浪博客 Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本的转载 2015-04-17 15:16:38 · 496 阅读 · 0 评论 -
怎样使用CMenu类
CMenu类的使用CMenu类从CObject类派生而来。为什么要使用CMenu类呢?AppWzard不是把菜单做好了吗?在资源编辑器上修改菜单不是很方便吗? 我是个vc++初学者,自从当斑竹以来,天天看贴子,也学到了不少东西。感觉学vc++稍微深入一点好,至少要能搞清楚AppWizard在背后都干了些什么东西。事实上mfc就是用CMenu类来生成菜单的转载 2015-04-17 11:16:02 · 738 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数转载 2015-05-08 15:21:00 · 447 阅读 · 0 评论 -
CDC中的SelectObject
、看MSDN中的解释:Selects an object into the device context(选择一个对象到设备上下文中去).[cpp] view plaincopyCPen* SelectObject( CPen* pPen ); CBrush* SelectObject( CBru转载 2015-05-08 10:31:20 · 2471 阅读 · 0 评论 -
C++ Char数组的赋值
1、定义的时候直接用字符串赋值char a[10]="hello"; //sizeof(a)为10或char a[]="hello"; //sizeof(a)为6注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!2、对数组中字符逐个赋值char a[10]={'h','e','l','l','o'}; //sizeof(a)为转载 2015-05-08 13:08:57 · 42661 阅读 · 2 评论 -
刷新--MFC界面刷新函数比较
一:什么时候才会发生重绘窗口的消息? 当需要更新或重新绘制窗口的外观时,应用程序就会发送WM_PAINT消息。对窗口进行重新绘制。二:Invalidate() -- RedrawWindow() -- UpdateWindow()三个函数有什么异同? Invalidate()是强制系统进行重画,但是不一定就马上进行重画。因为Invalidate(转载 2015-05-05 13:24:06 · 935 阅读 · 0 评论 -
COM:IUnknown、IClassFactory、IDispatch
COM组件有三个最基本的接口类,分别是IUnknown、IClassFactory、IDispatch。COM规范规定任何组件、任何接口都必须从IUnknown继承,IUnknown包含三个函数,分别是 QueryInterface、AddRef、Release。这三个函数是无比重要的,而且它们的排列顺序也是不可改变的。QueryInterface用于查询组件实现的其它接口,说白了也就是看转载 2015-05-20 13:14:09 · 925 阅读 · 1 评论 -
extern用法
在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。0. extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。这里需要注意的是,被引用的变量v的链接属性必须是外链接(external)的,也就是说a.c要引用到v,不只是取决于在a.c转载 2015-05-08 15:08:28 · 764 阅读 · 0 评论 -
sscanf函数用法 和其中的正则表达式
此文所有的实验都是基于下面的程序: char str[10]; for (int i = 0; i 执行完后str的值为 str = "!!!!!!!!!!" 我们把str的每个字符都初始化为惊叹号,当str的值发生变化时,使用printf打印str的值,对比先前的惊叹号,这样就可以方便的观察str发生了怎样的变化。下面我们做几个小实验,看看使用sscanf转载 2015-06-16 16:11:46 · 696 阅读 · 0 评论 -
C++ 标准IO库 iostream,fstream,sstream
1.标准IO类C++标准IO类型在三个独立的头文件中定义:iosstream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,sstream多定义的类型则用于读写存储在内存中的string对象。下图为继承关系图: 2.国际化字符支持扩展了wchar_t类型,占2个字节,相应的类为:wiostream,wostream,wistream等等,相应的标准输入输出对象,转载 2015-06-16 15:35:07 · 1185 阅读 · 0 评论 -
C++ 标准输入输出 函数 fopen fread等系列函数使用总结
函数原型:FILE * fopen(const char * path,const char * mode);返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。fopen_s,_wfopen_s安全性上相对于fopen有所增强,如果成功则返回0,失败则返回响应的错误代码errno_t fopen_s( FILE** p转载 2015-06-16 15:43:50 · 4749 阅读 · 0 评论 -
基于COM组件的软件开发 技术方案一
本人刚开始学习,用短浅的眼光总结出自己的观点,不知正确与否:已有平台开发接口和平台软件(exe)1、开发COM(DLL),实现规定的接口2、注册DLL3、通过XML配置文档,告诉平台有哪些DLL可用4、平台根据XML提供的CLSID,去注册表查找DLL所在文件位置5、加载DLL6、使用函数GetProcAddress(...)得到DLL库中函数DllGe原创 2015-06-23 10:51:58 · 870 阅读 · 0 评论 -
GetMessage和PeekMessage的区别
在Win32中使用GetMessage和PeekMessage都可以获取对应该程序产生的消息。他们有什么区别呢?GetMessage的一般用法是GetMessage(&msg,NULL,0,0);这样可以接受所有的消息,GetMessage在没有产生消息的时候并不返回,而是一直在等待,直到一个消息返回;当消息不是WM_QUIT时,返回一个非零值,也就是说,当是WM_QUIT时会转载 2015-05-19 13:42:57 · 697 阅读 · 0 评论 -
GetLastError 与 SetLastError
#include #include #define ERROR_NOT_SUPPORTED 50Lint func(int m){ if(m == 0 ) //SetLastError(0xe0000001); SetLastError(ERROR_NOT_SUPPORTED); else ret转载 2015-07-09 18:02:54 · 2173 阅读 · 0 评论 -
GetLastError 在程序中的使用
在VC中编写应用程序时,经常需要涉及到错误处理问题。许多函数调用只用TRUE和FALSE来表明函数的运行结果。一旦出现错误,MSDN中往往会指出请用GetLastError()函数来获得错误原因。 可问题是,GetLastError()返回的只是一个双字节数值(DWORD)。OH,MY GOD!目前Win32的出错编号已经从0排到11031,而这还不是错误编码的全部。因为错误代码还在不转载 2015-07-09 17:58:44 · 3532 阅读 · 0 评论 -
关于MFC中Document, Frame, View以及Document Template结构关系
MFC之所以能成为Application Framework, 很大的原因就在于其Document/View结构对于快速开发的支持. Document/View很好地划分了程序代码的前台后台, 让程序员可以专心于设计数据结构和UI.Document即为“资料”, 按我理解就是饭店的厨师, 而View就是饭店的服务员. View负责点菜和上菜(对用户请求做出直接响应), 而Document负责烹转载 2015-07-10 17:28:39 · 1600 阅读 · 0 评论 -
vc 添加消息及消息处理函数
添加自定义消息和函数:1.在要添加消息的类头文件中定义宏 #define WM_xxx WM_USER+n(n>=0);2.在类的声明中添加消息处理函数的声明 afx_msg void xxxx(WPARAM wParam,LPARAM lParam);3.在类的实现文件中消息映射部分添加消息映射 ON_MESSAGE(WM_xxx, xxxx);4.自己编写消息处理函数。转载 2015-07-10 10:56:35 · 1636 阅读 · 0 评论 -
MFC类层次结构图
http://www.cppblog.com/andxie99/archive/2008/06/04/9747.html整理资料,看到几张MFC的类层次结构图。也来看看MFC的发展吧:转载 2015-07-10 11:15:12 · 7795 阅读 · 1 评论 -
ATL中的RGS文件介绍
VC的ATL向导会生成com对象注册用的rgs文件。如果程序中有想写到注册表中的地方,可以手工编辑这个脚本,可以省去调用一堆操作注册表的API。关于rgs的详细规则,MSDN上面有,搜索ATL Registrar这个主题即可以看到,下面只是一点简单的介绍:HKCR //表示下面的注册表项都写到HKCR下面 { SecEdit.EditCtrl.1 = s 'EditC转载 2015-07-03 17:00:30 · 1354 阅读 · 0 评论