随笔分类 -  C++

SetConsoleCtrlHandler 处理控制台消息(转)
摘要:SetConsoleCtrlHandler 处理控制台消息一、如何处理所有的控制台消息。 第一步,首先要安装一个事件钩子,也就是说要建立一个回调函数。调用Win32 API,原型如下:BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine, // 回调函数BOOL Add // 表示添加还是删除); 参数HandlerRoutine是一个指向函数的指针,原型如下:BOOL WINAPI HandlerRoutine(DWORD dwCtrlType // 控制事件类型); 所有的HandlerRoutine函数只有一个参数dw... 阅读全文
posted @ 2013-05-24 17:49 一个人的天空@ 阅读(576) 评论(0) 推荐(0)
MENUITEMINFO结构的翻译(转)
摘要:MENUITEMINFO结构包含关于一个菜单项信息typedef struct tagMENUITEMINFO { UINT cbSize; UINT fMask; UINT fType; UINT fState; UINT wID; HMENU hSubMenu; HBITMAPhbmpChecked; HBITMAPhbmpUnchecked; DWORD dwItemData; LPTSTR dwTypeData; UINT cch;HBITMAPhbmpItem;} MENUITEMINFO, FAR *LPMENUITEMINFO;成员cbSize结构的大小,字节fMask检索或设置 阅读全文
posted @ 2013-05-20 15:18 一个人的天空@ 阅读(1947) 评论(0) 推荐(0)
Base64加密原理(转)
摘要:Base64是一种加料置位加密法,那为什么叫base64呢?因为无论明文是什么(比如汉字,特殊符号等),加密后的密文都只会变成字母A-Z、a-z和0-9 和+和/这64个字符,被他加密体后积一般会变成原来的4/3。Base64的标准在RFC2045里的24页可以看到。http://wenku.baidu.com/view/bd567523aaea998fcc220e8e.html下面我就来加密一个astralidea的简写AST来说明他的加密原理。为了说明方便,我们用人的思考方式,而不是计算机的方式,下面是上图的说明。1.假设有3个字符,首先先将他换成10进制ASCII码,然后转成2进制,少位 阅读全文
posted @ 2013-05-14 15:02 一个人的天空@ 阅读(20107) 评论(0) 推荐(1)
关于几个HTML文档接口的使用探讨
摘要:问题: 在使用Active Accessibility SDK的过程中,我从某个窗口的句柄来获得IHTMLDocument2指针。有没有什么方法可以从IHTMLDocument2指针来获得IWebBrowser2指针?我用QueryInterface在两个接口(IHTMLDocument2 和 IWebBrowser2)上试过,但没有成功。我也用网景(Netscape)的 HTMLWindow2 指针试过从get_navigator获取IOmNavigator *。也以失败告终。请高手指点。解答:这个问题通常是COM编程中存在的共性问题。你有了窗口,文档,或者浏览器,你明明知道可以通过这些已知 阅读全文
posted @ 2013-04-26 20:39 一个人的天空@ 阅读(2021) 评论(0) 推荐(0)
[原创]设计模式----建造者模式
摘要:定义将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。实用范围1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。2 当构造过程必须允许被构造的对象有不同表示时。角色在这样的设计模式中,有以下几个角色:1 builder:为创建一个产品对象的各个部件指定抽象接口。2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。3 Director:构造一个使用Builder接口的对象。4 Product:表示被构造的复杂对象。Co... 阅读全文
posted @ 2013-02-19 14:10 一个人的天空@ 阅读(608) 评论(0) 推荐(0)
[原创]设计模式----抽象工厂模式
摘要:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。定义为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类简介当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知 阅读全文
posted @ 2013-02-19 13:36 一个人的天空@ 阅读(1511) 评论(0) 推荐(1)
[原创]设计模式----简单工厂模式
摘要:从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。实现方式(附图)简单工厂模式的UML类图(见上图)简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。该模式中包含的角色及其职责工厂(Creator)角色简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用 阅读全文
posted @ 2013-02-19 11:28 一个人的天空@ 阅读(550) 评论(0) 推荐(0)
[原创]设计模式----访问者模式
摘要:访问者模式(Visitor Pattern)是GoF提出的23种设计模式中的一种,属于行为模式。据《大话设计模式》中说算是最复杂也是最难以理解的一种模式了。定义(源于GoF《Design Pattern》):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。从定义可以看出结构对象是使用访问者模式必备条件,而且这个结构对象必须存在遍历自身各个对象的方法。这便类似于Java语言当中的collection概念了。涉及角色:1.Visitor 抽象访问者角色,为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给 阅读全文
posted @ 2013-02-19 11:09 一个人的天空@ 阅读(1820) 评论(0) 推荐(1)
C++类成员变量的初始化方法(转)
摘要:关于这个问题是引起来源于一则面试问题:引用型成员变量如何初始化?回答的不是很确定,于是对这个问题研究一下。1、普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。class CA{public:int data;……public:CA();……};CA::CA():data(0)//……#1……初始化列表方式{//data = 0;//……#1……赋值方式};2、static 静态变量:static变量属于类所有,而不属于类的对象,因此不管类被实例化了多少个对象,该变量都只有一个。在这种性质上理解,有点类似于全局变量的唯一性。clas 阅读全文
posted @ 2013-01-22 17:15 一个人的天空@ 阅读(1249) 评论(0) 推荐(0)
C++类构造函数初始化列表(转)
摘要:构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:classCExample{public:inta;floatb;//构造函数初始化列表CExample():a(0),b(8.8){}//构造函数内部赋值CExample(){a=0;b=8.8;}};上面的例子中两个构造函数的结果是一样的。上面的构造函数(使用初始化列表的构造函数)显式的初始化类的成员;而没使用初始化列表的构造函数是对类的成员赋值,并没有进行显式的初始化。初始化和赋值对内置类型的成员没有什么大的区别,像上面的任一个构造函数都可以。对非内置类型成员变量,为了避免 阅读全文
posted @ 2013-01-22 16:58 一个人的天空@ 阅读(279) 评论(0) 推荐(0)
设计模式C++实现(1)——工厂模式(转)
摘要:软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》两本书。本文介绍工厂模式的实现。 工厂模式属于创建型模式,大致可以分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。听上去差不多,都是工厂模式。下面一个个介绍,首先介绍简单工厂模式,它的主要特点是需要在工厂类中做判断,从而创造相应的产品。当增加新的产品时,就需要.. 阅读全文
posted @ 2013-01-15 23:09 一个人的天空@ 阅读(236) 评论(0) 推荐(0)
理解虚基类、虚函数与纯虚函数的概念(转)
摘要:引言 一直以来都没有写过一篇关于概念性的文章,因为我觉得这些概念性的东西书本上都有并且说的也很详细写来也无用,今天突发奇想想写 一写,下面就和大家讨论一下虚基类、虚函数与纯虚函数,一看名字就让人很容易觉得混乱。不过不要紧待看完本文后你就会理解了。正文 虚基类 在说明其作用前先看一段代码classA{public:intiValue;};classB:publicA{public:voidbPrintf(){cout<<"ThisisclassB"<<endl;};};classC:publicA{public:voidcPrintf(){cout&l 阅读全文
posted @ 2013-01-12 00:17 一个人的天空@ 阅读(5083) 评论(0) 推荐(1)
C++虚函数,纯虚函数,抽象基类,虚基类(转)
摘要:虚函数:目的:为了引起晚绑定实现方法:在声明函数时使用virtual关键字纯虚函数:目的:提供抽象的接口实现方法:virtual int foo()=0;特点:如果一个类中包含纯虚函数,则该类的VTABLE是不完整的,故而无法生成该类的对象。这样的类称为纯抽象基类纯抽象基类,也称为纯虚类:目的:提供抽象的接口实现方法:包含纯虚函数特点:不能生成该类的对象虚基类:目的:为了消除二义性实现方法:virtual继承特点:一个类既可以作为某个类的虚基类,也可以作为另一个类的非虚基类。 阅读全文
posted @ 2013-01-12 00:16 一个人的天空@ 阅读(419) 评论(0) 推荐(1)
虚函数的应用特性(转)
摘要:虚函数的应用特性例:编写三个类:没有虚函数、有一个虚函数、有两个虚函数,在主函数中定义这三个类的对象,分别取这个类所占的内存空间的大小,观察在内存中的分配; 代码如下:/**//*************************************************************************虚函数的应用特性例子************************************************************************/#include<iostream.h>//没有虚函数的类classCNoVirtual...{i 阅读全文
posted @ 2013-01-12 00:15 一个人的天空@ 阅读(220) 评论(0) 推荐(0)
C++ 纯虚类(转)
摘要:纯虚类有以下特征:含有一个纯虚函数的类,叫做纯虚类。纯虚类不可以定义对象。我个人觉得这个说法应该就是把纯虚类的主要特点说明了:1、只要有一个纯虚函数。就称为纯虚类。所以如果子类没有实现纯虚函数,相当子类也有纯虚函数,所以子类也是纯虚类。2、其他类的定义与使用方式都与一般的类差不多。大致有如下地方:纯虚类可以有成员变量 (可以)纯虚类可以有普通的成员函数(可以)纯虚类可不可以有其他虚函数(可以)纯虚类可不可以又带有参数的构造函数? (可以)可不可以在纯虚类的派生类的构造函数中显式调用纯虚类的带参数构造函数(可以)3、使用方式上:不可以定义一个对象。下面是另外一篇文章中说的说法:(纯虚类也称为抽象 阅读全文
posted @ 2013-01-12 00:15 一个人的天空@ 阅读(2570) 评论(0) 推荐(0)
C++虚类的作用(转)
摘要:虚基类的作用当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份。例如:classCBase { };class CDerive1:virtual public CBase{ };class CDerive2:virtual public CBase{ };class CDerive12:public CDerive1,CDerive2{ };则在类CDerive12的对象中,仅有类CBase的一个对象数据虚基类的特点: 虚基类构造函数的参数必须由最新派生出来的类负责初始化(即使不是直接继承); 虚基类的构造函数先于非虚基类的构造函数执行。重写“C+ 阅读全文
posted @ 2013-01-12 00:14 一个人的天空@ 阅读(542) 评论(0) 推荐(0)
动态链接库dll,静态链接库lib, 导入库lib
摘要:目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的找到是哪个obj有错,即静态lib只是壳子。动态库一般会有对应的导入库,方便程序静态载入动态链接库,否则你可能就需要自己LoadLibary调入DLL文件,然后再手工GetProcAddress获得对应函数了。有了导入库,你只需要链接导 阅读全文
posted @ 2012-10-17 10:00 一个人的天空@ 阅读(598) 评论(0) 推荐(0)
为什么C++编译器不能支持对模板的分离式编译(转)
摘要:首先,C++标准中提到,一个编译单元[translation unit]是指一个.cpp文件以及它所include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件,后者拥有PE[Portable Executable,即windows可执行文件]文件格式,并且本身包含的就已经是二进制码,但是,不一定能够执行,因为并不保证其中一定有main函数。当编译器将一个工程里的所有.cpp文件以分离的方式编译完毕后,再由连接器(linker)进行连接成为一个.exe文件。举个例子://---------------test.h------- 阅读全文
posted @ 2012-10-16 10:29 一个人的天空@ 阅读(246) 评论(0) 推荐(0)
运行时和运行时库 (摘录)
摘要:Runtime: When a program is running, or executing, it is said to be in runtime. The term is mostly used by software developers to specify when errors in a program occur. A "runtime error" is an error that happens while the program is executing. For example if a program told you that 2 + 2 w 阅读全文
posted @ 2012-10-15 16:40 一个人的天空@ 阅读(312) 评论(0) 推荐(0)
C Runtime Library来历, API, MFC, ATL关系(转)
摘要:首先说明,我google了半天,想找到英文的关于这个资料,但是实在找不到,只好转载国人的讨论。CRT原先是指Microsoft开发的C Runtime Library,用于操作系统的开发及运行。后来在此基础上开发了C++ Runtime Library,所以现在CRT是指Microsoft开发的C/C++ Runtime Library。在VC的CRT/SRC目录下,可以看到CRT的源码,不仅有C的,也有C++的。 CRT原先的目的就是支持操作系统的运行。因为Windows操作系统除汇编部分外,都是用C/C++编写的,所以内核及许多关键服务都在CRT上运行(它们都采用dll技术动态链接)。此外 阅读全文
posted @ 2012-10-12 11:36 一个人的天空@ 阅读(302) 评论(0) 推荐(0)