- 博客(76)
- 资源 (65)
- 收藏
- 关注
转载 C++友元
1,friend申明一个友元friend一般为一句申明式,它位于一个类的内部,它申明一个类或者一个函数为该类的友元。friend并不是定义一个成员函数,所以friend放在public,protected或者private前都可以,完全是一样的。做为一个友元,即表示在该类或者该函数内部可以访问这个类的私有成员,你和朋友之间是不是应该没有什么隐藏的呢。例子:class A{public:
2008-09-30 19:22:00 3330
转载 标准C++中的Iterator(迭代器)
一、概述Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模式,通过运用该模式,使得我们可以在不知道对象内部表示的情况下,按照一定顺序(由iterator提供的方法)访问聚合对象中的各个元素。由于Iterator模式的以上特性:与聚合对象耦合
2008-09-29 21:52:00 2216 1
原创 《Modern C++ Design》Policies 和Policy Classes
policy所谓policy,其实就是一个类或者类模板的接口,它由内部类型定义(inner type definition),成员函数,成员变量组成。它类似于设计模式中的Strategy.这里先介绍一下Strategy:结构意图定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。适用性
2008-09-29 19:38:00 1337
转载 用C++干干净净地清除进程
读者朋友们可能经常会碰到这样一个问题,想对某些进行操作时,发现这些文件正在被其它程序使用,处于打开状态,而且是被独占打开,这时是没法对文件进行操作的。因此,要想操作这些文件,必须将打开这些文件的进程清除掉。那么如何干净地清除进程呢?其实,在Windows2000操作系统版本中有一个工具程序叫tskill.exe,用它就可以清除掉某个程序的进程,在输入"tskill 程序名"后就可以清除其运行实例。
2008-09-29 17:44:00 2124 1
原创 SHGetFileInfo函数详解
SHGetFileInfo函数WINSHELLAPI DWORD WINAPI SHGetFileInfo( LPCTSTR pszPath, DWORD dwFileAttributes, SHFILEINFO FAR *psfi, UINT cbFileInfo, UINT uFlags);pszPath 参数:指定的文件名。 当u
2008-09-28 16:07:00 10781
原创 《c++沉思录》--一个面向对象程序范例
面向对象有三个要素:数据抽象,继承以及动态绑定 问题描述: 1、一个表达式树包括代表常量、一元运算符、二元运算符的结点。2、我们希望通过调用合适的函数来创建这棵树,然后打印这棵树的完整括号化形式。 面向对象的解决方案:我们可以用一个联合(UNION)来容纳具体的值,用一个List来表示子结点,以包含联合(UNION)和List的类来表示结点。这些类有一个共同
2008-09-28 14:31:00 1040
原创 虚拟内存(Virtual Memory)
虚拟内存(Virtual Memory)是Windows管理所有可用内存的方式。对于32位Windows系统,每个进程所用到的虚拟内存地址从0到2^32-1,总容量4GB,其中2GB是与操作系统以及其他所有进程所共享,另外2GB分派给进程独占(这就是常说的32位Windows中一个进程最多能用2G内存的由来)。4GB虚拟地址空间(Virtual Address Space,VAS)中,2GB的进程
2008-09-28 13:50:00 1468
转载 关于如何换肤、子类化的解决方案
是我尝试过一些方法,以在CAboutDlg中子类化其中的Button为例: 第一种:直接用现成的类 1、自己写一个类class CButtonXP : public CButton{/*...*/} 用MessageMap处理感兴趣的消息。 2、用CButtonXP代替CButton来声明变量m_btn; 3、在void CAboutDlg:DoDataExchange(CDataExchange
2008-09-27 15:54:00 832
翻译 多态和动态绑定(polymorphism and dynamic binding)
FAQ 5.11 多态和动态绑定(polymorphism and dynamic binding)C++的这种特点使新的代码多少可以替代一些旧的代码:面向对象程序强大的真正原因不在于继承;而在于它可以将继承类对象当作基类对象来对待,支持这个特性的机制是多态和动态绑定(polymorphism and dynamic binding),多态允许将一个继承类的对象传递
2008-09-27 15:00:00 1408
转载 堆和栈的区别
一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,
2008-09-26 16:29:00 590
原创 Sleep和WaitForSingleObject ,WaitForMultipleObjects
VOID Sleep(DWORD dwMilliseconds);该函数可使线程暂停自己的运行,直到dwMilliseconds过去为止。关于Sleep函数,有下面几个重要问题值得注意:* 调用Sleep,可使线程自愿放弃它剩余的时间片。* 系统将在大约的指定毫秒数内使线程不可调度。* 你可以调用Sleep,并且为dwMilliseconds参数传递INFINITE。这将告诉系统永远不要调度该线程
2008-09-26 16:12:00 1049
原创 《Modern C++ Design》摘要
1. 你無法特化結構。單單使用templates,你無法特化「class 的結構」(我的意思是其資料成員),你只能特化其成員函式。2. 成員函式的特化並不能「依理擴張」。你可以對「單㆒template 參數」的class template 特化其成員函式,卻無法對著「多個template 參數」的class template 特化其個別成員函式。例如 :template class Widget
2008-09-24 17:16:00 829
转载 重载New操作符
一、重载规则I.可以重载的操作符+- */ %^& |~ !=>*=/= %=^=&=|=>>>===!=>= ||++-- ->*,->[]() operator new operator new[]operator delete operator delete []II.不能重载的操作符::..*? :sizeoftypeidnewdeletestatic_castdynami
2008-09-24 14:10:00 2399
转载 使用::std::vector作为管理动态数组的优先选择
摘要: 本文介绍了C++标准库中的容器类vector,分析了它的优点,并且建议在应用程序中使用它作为动态数组的优先选择,而不是MFC的CArray在一些使用 MFC 的程序中,经常看到许多程序使用 CArray的设计问题,造成使用它的代码的复杂化,增加了维护难度。因此建议使用 ::std::vector。另外,也看到一些程序在用 malloc/realloc/free/new[]/dele
2008-09-24 09:28:00 1257
转载 Visual C 线程同步技术剖析
使线程同步 在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进行。 如果不采取适当的措施,其他线程往往会在线程处理任务结束前就去访问处理结果,这就很有可能得到有关处理结果的错误了解。例如,多个线程同时访问同一个 全局变量,如果都是读取操作,
2008-09-23 17:07:00 751
翻译 VC下轻松实现扩展shell(一)
本节源码 VC 2005的用户需要注意的事项:The Express edition of VC 2005只能支持ATL和MFC其中之一,而文章中的代码需要同时用到ATL和MFC,所以在Express edition of VC 2005下这些代码是不可用的.VC 6的用户需要注意的事项:如果你用的是VC6,你必须更新过Platform SDK,你可以使用 web install ve
2008-09-19 21:41:00 6834
原创 sizeof用法总结
在VC中,sizeof有着许多的用法,而且很容易引起一些错误。下面根据sizeof后面的参数对sizeof的用法做个总结。 A. 参数为数据类型或者为一般变量。例如sizeof(int),sizeof(long)等等。这种情况要注意的是不同系统系统或者不同编译器得到的结果可能是不同的。例如int类型在16位系统中占2个字节,在32位系统中占4个字节。 B. 参数为数组或指针。下面举例说
2008-09-19 12:10:00 941
原创 struct 中字节对齐问题
VC中下面几个结构体大小分别是多少呢struct MyStruct { double m4; char m1; int m3; }; struct MyStruct { char m1; double m4; int m3; }; #pragma pack(push)//保存对齐状态 #pragm
2008-09-19 12:09:00 1249
原创 STL的map用法
1. map中的元素其实就是一个pair.2. map的键一般不能是指针, 比如int*, char*之类的, 会出错. 常用的就用string了,int也行.3. map是个无序的容器, 而vector之类是有序的. 所谓有序无序是指放入的元素并不是按一定顺序放进去的, 而是乱序, 随机存放的(被映射后近似随机存放).所以遍历的时候有些效率差别.4. 判断有没有找到该键的内容可以这样: std:
2008-09-19 11:50:00 775
翻译 自修改代码(Self Modifying Code)详解
自修改代码的简要历史自修改代码有很广泛的用途:1.在10到20年前使用SMC(自保护代码)保护应用程序是很难的,即使是用它来把编译的代码放到内存里.2.在90年代中期95/NT出现了,那时的程序员对在新的操作系统下如何保护应用程序感到迷惑.不知道该如何将保护措施移植到这个新的版本下.已经不可能再自由的访问内存,硬件,和一般的操作系统,所有以前学会的技巧不得不放弃,开始人们认为除了使用V
2008-09-18 17:07:00 8541
转载 程序自修改(SMC)
理论:所谓SMC(Self Modifying Code)技术,就是一种将可执行文件中的代码或数据进行加密,防止别人使用逆向工程工具对程序进行静态分析的方法,只有程序运行时才对代码和数据进行解 密,从而正常运行程序和访问数据。本篇通过一个简单的实例来介绍这个技术。需要的运行环境vc6,程序编译为release版。由于本篇我们要在程序执行过程中,修改代码段中的一个函数内容,而默认情况下,我们编译生成
2008-09-18 11:00:00 3431 1
原创 一个类继承的问题
FAQ 8.14 如果"苹果袋"以kind-of方式继承至"水果袋",那么"水果袋"中就允许放入任何种类以kind-of方式从水果继承来的具体水果么? 原文描述 :Is bag-of-apple a kind-of bag-of-fruit, assuming bag-of-fruit allows the insertion of any kind-of
2008-09-17 13:58:00 676
转载 C语言病毒
对于病毒和木马的启动,除了显示修改注册表,还有一个办法就是把木马或病毒做成Windows服务,不过这有一个不好的地方就是它的通用性,因为服务要用到winAPI,所以这样的病毒和木马只能运行于Windows系统,而且木马病毒的体积也会有所增加。下面我们要把现有的木马病毒程序转换为Windows服务,这个需要三个步骤:一、创建一个新的main入口点,在服务控制管理器中注册,在这个main函数中要提供逻
2008-09-16 20:58:00 2107
原创 整理的笔试面试题
1.已知strcpy函数的原型是:char * strcpy(char * strDest,const char * strSrc);不调用库函数,实现strcpy函数。解释为什么要返回char *。解答:strcpy的实现代码char * strcpy(char * strDest,const char * strSrc){ if ((strDest==NULL
2008-09-16 20:23:00 967
原创 C++中组合的使用
FAQ 5.09 组合使软件在开发过程中可以聚合已存在的组件而不用去新建一个。 组合(有时候叫聚合)是将一个对象(部分)放到另一个对象里(组合)。它是一种 has-a 的关系。例如,FordTaurus是由Engine,Transmission,InstrumentPanel,等等组合而成.也就是说,FordTaurus含有一个Engine.(Engi
2008-09-16 20:15:00 8954 1
转载 超类化和子类化的区别
Q: 我看了WINX开发包中的文档中,你提到了超类,它是什么概念?我平常只听过子类(Subclass)。A: 子类化(Subclass)是指替换窗口过程(WNDPROC)。 超类(Superclass)是替换窗口过程(WNDPROC),并且替换ClassName。 Subclass不太象继承,而像是一种外挂(Hook)行为。 Superclass则更像继承,因为生成了新的窗口类,
2008-09-16 18:00:00 3873
转载 如何超类化窗体
超类化概述在MFC中窗体实例对某个窗体句柄超类化后,系统提供了这样两种能力:1.我们对该窗体实例调用成员函数将会直接改变相关窗体句柄对应的窗体2.系统传给相关窗体句柄的消息会先经过该窗体实例的消息映射 我举一个例子来说明:比如我自己写了一个类叫CSuperEdit(父类为CEdit),在该类中我声明了void OnChar(UINT nChar, UINT nRepCnt, UINT nFla
2008-09-16 17:35:00 947
转载 如何子类化(SubclassWindow)窗体
窗口子类化的作用 窗口子类化技术最大的特点就是能够截取Windows的消息。一旦用户自定义的窗口函数截取了传向原窗口函数的消息,就可以对被截取的消息进行如下处理:将其传给原来的窗口函数。这是对大多数消息应该采取的措施,因为子类通常只对原来的窗口特性作少量的改动截取该消息,阻止其向原窗口函数发送。修改该消息,修改完毕以后再向原窗口函数发送。Windows SDK提供了一些设计好的
2008-09-16 17:02:00 2771 1
原创 UNICODE to ANSI 和 ANSI to UNICODE
Unicode文件头两个字节(Unicode标志),即0xFF 0xFE第一个是将Unicode变成ASCII 第二个是将ASCII变成Unicode inline LPTSTR B2A(BSTR lp) { int nLen=(lstrlenW(lp)+1) LPTSTR str=new char[nLen]; WideCh
2008-09-14 20:07:00 2192
翻译 将代码注入到进程的三种方式
winspy_package.zip>[源码下载] 介绍 在Code Project网站有许多关于password spy的文章,但是这些都是基于Windows Hooks的,还有没有其他方式能实现这种效果呢?是的,有,不过,先让我们简要的回顾一下。要想读控件的内容,一般需要给它发送WM_GETTEXT 消息.edit控件就有这个特点。如果edit控件是在别的进程里
2008-09-14 18:15:00 1684
翻译 什么是内核(kernel)对象?
作为一个软件开发者,你会创建,打开,操作内核对象。系统会创建和操作多种类型的内核对象,例如access token 对象, event 对象,file对象,file-mapping对象,I/O完成端口对象,job对象,mailslot对象,mutex对象,pipe对象,process对象,semaphore对象,thread对象,waitable time对象,和threa
2008-09-13 21:08:00 3111
转载 VC++中利用/GS开关防止缓冲区溢出
缓冲区溢出通常表现为一个最为常见的漏洞而存在于今天的各种软件之中,黑客可以用恶意的输入,从而更改程序的执行流程,由此入侵相应的进程、电脑、或整个域。如果进程运行于一个高度受信的账户之下,如管理员或本地系统账户,那么黑客带来的破坏将是极其严重,并有潜在广泛传播的危险。近几年来爆发的一些"知名"病毒,如红色代码、冲击波、震荡波等等,都源于C/C++代码缓冲区溢出的结果。 从程序的角度来看,缓冲区溢出
2008-09-13 17:27:00 1133
转载 VC编译器参数设置汇总
CL.exe的全部命令开关 /C:在预处理输出中保留注释语句 /c:只编译,不连接,相当于在"Build"菜单下选择了"Compile" /D:定义常量和宏,与源程序里的#define 有相同效果 /E:预处理C、C++源文件,将源文件中所有的预编译指令及宏展开,将注释去掉,然后将预处理器的输出拷贝至标准输出设备输出,并且在每个文件的开头和末尾加入#li
2008-09-13 17:07:00 2165
原创 "软件的彼得原理"是什么?
软件的彼得原理是指轻率的开发者不断的提升和扩展软件直到最后连他们自己也无法理解了,结果是项目慢慢的被毁掉。 软件的彼得原理能毁掉项目。 软件的彼得原理随着时间的推移才会慢慢显露出来,问题可以被延伸到项目中代码的每一行。愚蠢的经理往往不预防这种问题的发生,他们总是认为只要看不到BUG就是最好的。但是有些问题并不是BUG,最少在开始。结果是项目被它的
2008-09-13 15:47:00 1261
原创 在Windows下取得CPU的时钟速度(PROCESSOR_POWER_INFORMATION)
一直想在Windows下取得CPU的时钟速度,找了好久终于找到了函数CallNtPowerInformation,要想使用它,首先必须包含powrprof.h头文件和链接库powerprof.lib.但是还有几个问题: 首先powrprof.h和许多其它在Platform SDK中的头文件一样依然没有被C++验证,如果你在C++程序中包含它的时候如果不小心,依然会
2008-09-12 21:57:00 4607 1
转载 error LNK2019(无法解析的外部符号)
无法解析的外部符号“symbol”是指该符号在函数“function”中被引用,在function中找到了未定义的外部符号 (symbol)。若要解决此错误,请提供符号定义或移除引用它的代码。 1.在 Visual C++ .NET 2003 中,如果使用了 /clr 而未将 CRT 链接到可执行文件,将生成此错误。任何由编译器在未使用 /clr:initialAppDomain 时生成的
2008-09-12 19:59:00 4137 1
翻译 关于继承和动态绑定的机制
FAQ 2.24 继承是一个很强大的手段,它具有很强的扩张能力,它使软件可以有is-a和kind-of的关系。 在下面的例子里,类Vehicle定义了一个=0的成员函数; 也就是在startEngine()成员函数的声明后面写上"=0";这种语法的意思是startEngine()成员函数是纯虚函数并且Vehicle类是一个抽象的基类。实际上,对于其他的类来说,V
2008-09-12 16:09:00 1143
翻译 获取其他程序的信息(VC实现)
源码下载 介绍 最近正试着从其他程序的listview控件中获取信息,因为需要传递一个指针以便存放取得的字符串,但Windows使用的是虚拟内存,指针是不允许跨进程访问的。 Windows是这样通过虚拟内存来管理分配给所有应用程序的内存的:它让程序认为自己拥有2GB的内存空间可用,它也通过保护来避免程序互相占用内存.这样当一个程序有问题时,不会影响到其他
2008-09-12 12:19:00 3598 2
转载 调色板的原理
PC机上显示的图象是由一个个像素组成的,每个像素都有自己的颜色属性。在PC的显示系统中,像素的颜色是基于RGB模型的,每一个像素的颜色由红(B)、绿(G)、蓝(B)三原色组合而成。每种原色用8位表示,这样一个的颜色就是24位的。以此推算,PC的SVGA适配器可以同时显示224约一千六百多万种颜色。24位的颜色通常被称作真彩色,用真彩色显示的图象可达到十分逼真的效果。
2008-09-12 10:11:00 1406
翻译 关于全局对象的作用
FAQ 2.22 尽管C++允许在类的外部声明全局对象,但是最好将全局对象声明为一些类的静态数据成员,在类块的protected:里声明静态数据成员,如果需要,可以用public:静态数据成员来提供get,用procteted:静态数据成员提供set。 例如:考虑当前存在的Car对象的数目,既然让每一个Car对象都去计算Car对象的数目是很繁杂的,就不如把这个值
2008-09-11 20:34:00 1087
C++问题集-C++ FAQ (2nd editer).CHM
2008-09-05
《Windows用户态程序高效排错》
2008-08-25
《计算机编程艺术三》
2008-08-24
计算机编程艺术卷1
2008-08-22
全局键盘钩子源码
2008-08-22
学习.Web.设计(高清晰PDF).Part2.rar
2008-08-20
学习.Web.设计(高清晰PDF).Part1.rar
2008-08-20
一本使用qt的介绍c++和设计模式的好书 .rar
2008-08-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人