2012年5月21日
摘要: 1、创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类);2、如果类里面有成员类,成员类的构造函数优先被调用;3、基类构造函数如果有多个基类则构造函数的调用顺序是某类在类派生表中出现的 顺序而不是它们在成员初始化表中的顺序;4、成员类对象构造函数如果有多个成员类对象则构造函数的调用顺序是对象在类中 被声明的顺序而不是它们出现在成员初始化表中的顺序;5、派生类构造函数 作为一般规则派生类构造函数应该不能直接向一个基类数据成员赋值而是把值传递 给适当的基类构造函数否则两个类的实现变成紧耦合的(tightly coupled)将更加难于 正确地修改或扩展基类的实现。(... 阅读全文
posted @ 2012-05-21 10:47 莫水千流 阅读(598) 评论(1) 推荐(0)
  2012年5月8日
摘要: 概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了 阅读全文
posted @ 2012-05-08 14:32 莫水千流 阅读(309) 评论(0) 推荐(0)
  2012年4月6日
摘要: 今天看STL源码遇到一个问题:template <class _T1, class _T2>inline void _Construct(_T1* __p, const _T2& __value) { new ((void*) __p) _T1(__value);}上网搜到了一些文章,分享了:原帖地址: http://www.ksarea.com/articles/20080124_cc.htmlplacement new释疑"placement new"? 它到底是什么东东呀?我也是最近几天才听说,看来对于C++我还差很远呀!placement new 阅读全文
posted @ 2012-04-06 10:57 莫水千流 阅读(557) 评论(1) 推荐(1)
摘要: C++ new用法之一 new运算符最常用的是作为运算符的new,比如:string *str = new string(“test new”);作为运算符,new和sizeof一样,是C++内置的,你不能对它做任何的改变,除了使用它。new会在堆上分配一块内存,并会自动调用类的构造函数。C++ new用法之二 new函数第二种就是new函数,其实new运算符内部分配内存使用的就是new函数,原型是:void *operator new(size_t size);new函数返回的是一个void指针,一块未经初始化的内存。如你所见,这和C语言的malloc行为相似,你可以重载new函数,并且增加 阅读全文
posted @ 2012-04-06 10:11 莫水千流 阅读(6474) 评论(0) 推荐(1)
  2012年4月2日
摘要: #define UNIQE_NAME "{1AB792D6-EAF2-3267-9A84-9135681127A4}"#define GIS_MSG "{D48CA993-4925-41cb-8F59-ABAAAFCEF797}"const UINT ID_GIS_INSTANCE = ::RegisterWindowMessage(GIS_MSG);//注册消息// 确保程序只有一个实例在运行m_hOneInstance = ::CreateMutex(NULL, FALSE, UNIQE_NAME);if (GetLastError() == ERR 阅读全文
posted @ 2012-04-02 17:03 莫水千流 阅读(203) 评论(0) 推荐(0)
摘要: OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构 OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&OsVersionInfo); //获取操作系统版本信息 if(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { //Windows98,调用ExitWindowsEx()函数重新启动计算机 DWORD dwReserved; Exit... 阅读全文
posted @ 2012-04-02 17:02 莫水千流 阅读(437) 评论(0) 推荐(0)
摘要: 函数参数入栈的方式 --------------------------------------------------------------- 在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式。 比如说__cdecl,它是标准的c方法的堆栈调用方式,就是在函数调用时的参数压入堆栈是与函数的声明顺序相反的,其它两个可以看MSDN,不过这个对我们编程没有太大的作用 --------------------------------------------------------------- 调用约定 调用约定(Calling convention)决定以下内容:函数参数的. 阅读全文
posted @ 2012-04-02 17:01 莫水千流 阅读(224) 评论(0) 推荐(0)
摘要: Windows下的多线程与线程同步概述多任务是一个操作系统可以同时运行多个程序的能力。基本上,操作系统使用一个硬件时钟为同时运行的每个进程分配“时间片”。如果时间片足够小,并且机器也没有由于太多的程序而超负荷,那么在用户看来,所有的这些程序似乎在同试运行着。多线程是在一个程序内部实现多任务的能力。程序可以把它自己分隔为单独的执行“线程”,这些线程似乎也同时在运行[1]。[g1]多线程的应用非常广泛,最常见的是在需要进行大量计算的程序中使用辅助线程完成计算工作,而用户界面线程响应用户的操作。多线程中不同线程之间的通讯通常是使用共享数据对象来实现的,不管是使用全局变量还是线程过程函数的指针参数进行 阅读全文
posted @ 2012-04-02 17:00 莫水千流 阅读(572) 评论(0) 推荐(0)
摘要: 信号量(Semaphore)内核对象对线程的同步方式与前面几种方法不同,它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。在用CreateSemaphore()创建信号量时即要同时指出允许的最大资源计数和当前可用资源计数。一般是将当前可用资源计数设置为最大资源计数,每增加一个线程对共享资源的访问,当前可用资源计数就会减1,只要当前可用资源计数是大于0的,就可以发出信号量信号。但是当前可用计数减小到0时则说明当前占用资源的线程数已经达到了所允许的最大数目,不能在允许其他线程的进入,此时的信号量信号将无法发出。线程在处理完共享资源后,应在离开的同时通过Relea 阅读全文
posted @ 2012-04-02 16:59 莫水千流 阅读(1567) 评论(0) 推荐(0)
摘要: Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。Non-mfc dll//文件:lib.h#ifndef LIB_H#define LIB_Hextern "C" int add(int x,int y); //声明为C编译、连接方式的外部函数#endif//文件:lib.cpp#include "lib.h"int add(int x,int y){ return x + y;}静态调用:#include 阅读全文
posted @ 2012-04-02 16:58 莫水千流 阅读(639) 评论(0) 推荐(0)