随笔分类 -  vc++技术

摘要:在说明什么是友元之前,我们先说明一下为什么需要友元与友元的缺点: 通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都声明成为public(共用的),然而这做带来的问题便是任何外部函数都可以毫无约束的访问它操作它,c++利用friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作,避免把类成员全部设置成public,最大限度的保护数据成员的安全。... 阅读全文
posted @ 2008-11-25 21:23 巩固 阅读(390) 评论(0) 推荐(0)
摘要:C++运算符重载探讨 前言 多态性是面向对象程序设计的重要特征之一。它与前面讲过的封装性和继承性构成了面向对象程序设计的三大特征。这三大特征是相互关联的。封装性是基础,继承性是关键,多态性是补充,而多态又必须存在于继承的环境之中。 所谓多态性是指发出同样的消息被不同类型的对象接收时导致完全不同的行为。这里所说的消息主要是指对类的成员函数的调用,而不同的行为是指不同的实现。利用多态性... 阅读全文
posted @ 2008-11-24 15:38 巩固 阅读(409) 评论(0) 推荐(0)
摘要:这几天写的程序应用到多继承。 以前对多继承的概念非常清晰,可是很久没用就有点模糊了。重新研究一下,“刷新”下记忆。 假设我们有下面的代码: #include class A { private: char data; public: A(){data = 'A';} virtual void Show(){printf("A\n");}; vir... 阅读全文
posted @ 2008-11-21 16:53 巩固 阅读(275) 评论(0) 推荐(0)
摘要:C++多继承 多继承可以看作是单继承的扩展。所谓多继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承。 多继承下派生类的定义格式如下: class :,,… { }; 其中,,,…是三种继承方式:public、private、protected之一。例如: class A ... 阅读全文
posted @ 2008-11-21 16:25 巩固 阅读(1083) 评论(0) 推荐(0)
摘要:在过去的学习中,我们始终接触的单个类的继承,但是在现实生活中,一些新事物往往会拥有两个或者两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。 举个例子,交通工具类可以派生出汽车和船两个子类,但拥有汽车和船共同特性水陆两用汽车就必须继承来自汽车类与船类的共同属性。 由此我们不难想出如下的图例与代码: 当... 阅读全文
posted @ 2008-11-21 15:01 巩固 阅读(328) 评论(0) 推荐(0)
摘要:拷贝构造函数主要在以下三种情况下起初始化作用: 1. 在声明语句中用一个对象初始化另一个对象; 2. 将一个对象作为参数按值调用方式传递给另一个对象时生成对象副本; 3. 生成一个临时对象作为函数的返回结果。 那么接着就看一下在这三种情况下拷贝构造函数分别在什么时候调用,以及如果有临时对象的话,在什么时候析构。先假定有一个类FOO,在构造函数中会输出“Constructing.”,在拷贝构造函数中... 阅读全文
posted @ 2008-11-21 11:45 巩固 阅读(2081) 评论(0) 推荐(1)
摘要:C++拷贝构造函数的几个细节 关键字: c++ 拷贝构造函数是C++最基础的概念之一,大家自认为对拷贝构造函数了解么?请大家先回答一下三个问题: 1. 以下函数哪个是拷贝构造函数,为什么? X::X(const X&); X::X(X); X::X(X&, int a=1); X::X(X&, int a=1, b=2); 2.... 阅读全文
posted @ 2008-11-21 11:07 巩固 阅读(372) 评论(0) 推荐(1)
摘要:虽然对象复制看上去很简单,然而如果你没有对其正确理解,可能会出现一些严重问题。默认情况下,复制对象会导致相应的所有成员的复制。如果你只有实例成员,这看上去是相当不错的。但是如果你的类中含有指向在堆中分配的对象时,情况会怎样呢?考虑下面的代码片断: #include #include class Pe... 阅读全文
posted @ 2008-11-21 10:36 巩固 阅读(286) 评论(0) 推荐(0)
摘要:一、在不使用mfc的程序中获得某个目录下的所有文件名称,包括子目录。把文件名称以一个固定的程度放入一个缓冲中,这个缓冲要足够的大,能容下所有的文件名称。 函数的输入为要查找的根目录,输出为存放所有文件名称的缓冲 算法:使用递归 二、代码: void FindFileInDir(char* rootDir, char* strRet) { char fname[MAC_FILENAMELEN... 阅读全文
posted @ 2008-11-20 16:17 巩固 阅读(1203) 评论(0) 推荐(0)
摘要:随着Internet和Intranet应用的飞速发展,COM(Component Object Model,组件对象模型)以其巨大的潜力渗透到软件学科的各个领域。在Windows操 作平台下,众多以COM形式提供的组件模块... 阅读全文
posted @ 2008-11-19 16:45 巩固 阅读(2801) 评论(0) 推荐(0)
摘要:Word和Excel等文件均称为复合文件。这类文件内部有一个“文件系统”,采用“磁盘文件”的组织方式来组织文件内的数据,也称为“文件中的文件系统”。 每个复合文件中有一个“根存储”(类似于文件系统中的“根目录”),根存储之下是若干“子存储”(类似于“子目录”)和“数据流”(类似于“文件”),子存储之下可以再有子存储和数据流……。 下列代码可将任一复合文件的文件结构进行枚举,如配合树型控... 阅读全文
posted @ 2008-11-19 11:02 巩固 阅读(405) 评论(0) 推荐(0)
摘要:文件结构化存储技术与应用 自从Windows系统推出以后,微软公司就一直致力于完善和采用新的文件存储方法,其中结构化存储是微软公司最为推崇的,该技术采用COM技术架构,当前广泛使用的Office文 件都是采用结构化的存储方式,同时微软公司为推广这一存储方... 阅读全文
posted @ 2008-11-19 10:00 巩固 阅读(1297) 评论(0) 推荐(0)
摘要:准备及条件: COM服务器为进程内服务器,DLL名为simpCOM.dll,该组件只有一个接口IFoo,该接口只有一个方法HRESULT SayHello(void) 在SDK中调用 ===================================== 一、最简单最常用的一种,用#import导入类型库,利用VC提供的智能指针包... 阅读全文
posted @ 2008-11-18 16:52 巩固 阅读(1570) 评论(0) 推荐(0)
摘要:1.创建myCom.dll,该COM只有一个组件,两个接口IGetRes--方法Hello(), IGetResEx--方法HelloEx() 2.在工程中导入组件或类型库 #import "组件所在目录myCom.dll" no_namespace 或 #import "类型库所在目录myCom.tlb" using namespace MYCOM; ... 阅读全文
posted @ 2008-11-18 16:46 巩固 阅读(586) 评论(0) 推荐(0)
摘要:ATL 提供了2个智能指针的模板包装类,CComPtr 和 CComQIPtr,这两个类都在 中声明。CComQIPtr 包含了 CComPtr的所有功能,因此我们可以完全用 CComQIPtr 来使用智能接口指针,唯一要说明的一点就是:CComQIPtr 由于使用了运算符的重载功能,它会自动帮我们调用QueryInterface()函数,因此 CComQIPtr 唯一的缺点就是不能定义 IUn... 阅读全文
posted @ 2008-11-18 15:43 巩固 阅读(5766) 评论(1) 推荐(1)
摘要:CComPtr用法 COM接口指针很危险,因为使用过程中需要每一个使用者都要严格并且正确的AddRef和Release,一旦出现问题,就会造成对象不能被正常释放,或者对象被重复删除,造成程序崩溃。所以使用COM接口,必须小心翼翼才行。 但是,即使所有的代码中,都正确的AddRef和Rel... 阅读全文
posted @ 2008-11-18 15:02 巩固 阅读(9753) 评论(3) 推荐(2)
摘要:在MFC程序中显示JPG/GIF图像 编译:Northtibet 下载源代码 如果你是一个使用VB编程的程序员,要在程序中显示JPG或者GIF图像简直易如反掌,将图像控件拖到Form中,分分钟即可搞掂。但是C++程序员要显示同样的图形却没有那么轻松,那么是不是要自己编写JPG解压缩代码呢?当然不用那么复杂啦!本文将针对这个问题讨论如何在MFC中显示JPG或者GIF图像。 用... 阅读全文
posted @ 2008-11-06 20:31 巩固 阅读(873) 评论(1) 推荐(0)
摘要:在Windows系统里,有一项功能非常实用,就是剪贴板功能,它能够从一个程序里与另一个程序进行数据交换的功能,也就是说两个进程上是可以共享数据。要实现这样的功能,Windows系统在底层上有相应的支持,就是高端地址的内存是系统内存,这样就可以不同的进程进行共享数据了。因此,调用函数GlobalAlloc来分配系统内存,让不同的进程实现共享数据,也就是剪贴板功能,可以在一个进程内分配内存,在另一个进... 阅读全文
posted @ 2008-11-06 19:53 巩固 阅读(922) 评论(0) 推荐(0)
摘要:VC中关于GlobalAlloc,GlobalLock,GlobalUnLock 调用GlobalAlloc函数分配一块内存,该函数会返回分配的内存句柄。 调用GlobalLock函数锁定内存块,该函数接受一个内存句柄作为参数,然后返回一个指向被锁定的内存块的指针。 您可以用该指针来读写内存。 调用GlobalUnlock函数来解锁先前被锁定的内存,该函数使得指向内存块的指针无效。 调用Gl... 阅读全文
posted @ 2008-11-06 19:25 巩固 阅读(5011) 评论(0) 推荐(1)
摘要:C++字符串完全指引之一 —— Win32 字符编码 原著:Michael Dunn 翻译:Chengjie Sun 原文出处:Code... 阅读全文
posted @ 2008-11-05 18:23 巩固 阅读(330) 评论(0) 推荐(0)