- 博客(37)
- 收藏
- 关注
原创 型别对型别的映射(Type2Type)
就是这样一个结构:template typename T>struct Type2Type { typedef T OriginalType; };假定有个片断如下,创建一个T*template class T,class U>T* Create(const U& arg){ return new T(arg);}如果对于某个类如“Widget”,其ctor要有两个
2008-11-25 22:25:00
1245
原创 类型和值之间的映射(Int2Type)
在C++中,术语“转化”(conversion)描述的是从另外一个类型的值(value)获取一个类型(type)的值的过程。可是有时候你会需要一种不同类型的转化:可能是在你有一个类型时需要获取一个值,或是其它的类似情形。在C++中做这样的转化是不寻常的,因为类型域和值域之间隔有有一堵很严格的界线。可是,在一些特定的场合,你需要跨越这两个边界,本栏就是要讨论该怎么做到这个跨越。映射
2008-11-25 21:53:00
1228
原创 解析C++虚函数表
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,
2008-11-24 15:12:00
922
1
原创 C++设计模型之五:Prototype Pattern
Prototype模式并不是简简单单一个clone方法,Prototype模式的意义在于动态抽取当前对象运行时的状态,同时通过提供统一的clone接口方法,使得客户代码可以在不知道对象具体类型时仍然可以实现对象的拷贝,而无需运用type-switch检测对象的类型信息来分别调用创建方法来创建一个新的拷贝。 使用Prototype模式,在需要复制自身来创建新产品,不需
2008-11-05 04:41:00
1170
原创 c++设计模式之四:Builder Pattern
Builder模式要解决的问题是,当我们要创建很复杂的对象时,有时候需要将复杂对象的创建过程和这个对象的表示分离开来。由于在每一步的构造过程中可以映入不同参数,所以步骤相同但是最后的对象却不一样。也就是说将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。 Builder模式的关键在于在创建一个复杂对象时,其组合过程往往涉及复杂
2008-11-05 02:20:00
1183
原创 C++设计模式之三:Singleton Pattern
Singleton模式解决问题十分常见,我们怎样去创建一个唯一的变量(对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合的设计范式(如C++中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式中,这一点可能就只能是通过Singleton模式来实现了。 Singleton模式典型的结构图为
2008-11-05 00:11:00
581
原创 C++设计模式之二:AbstractFactory Pattern
AbstractFactory模式就是用来解决这类问题的:要创建一组相关或者相互依赖的对象。 AbstractFactory模式关键就是将这一组对象的创建封装到一个用于创建对象的(ConcreteFactory)中,维护这样一个创建类总比维护n多相关对象的创建过程要简单的多。 AbstractFactory模式典型的结构图为: 代码如下://Abst
2008-11-04 22:45:00
901
原创 C/C++内存对齐
一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从
2008-11-02 02:52:00
856
原创 typedef和typename关键字
1、类型说明typedef 类型说明的格式为: typedef 类型 定义名; 类型说明只定义了一个数据类型的新名字而不是定义一种新的数据类型。定义名表示这个类型的新名字。 例如: 用下面语句定义整型数的新名字: typedef int SIGNED_INT; 使用说明后, SIGNED_INT就成为int的同义词了, 此时可以用SIGNE
2008-10-27 16:41:00
1417
原创 C/C++ 程序设计员应聘常见面试试题深入剖析
1.引言 许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷
2008-10-26 23:55:00
1106
原创 腾讯笔试题
一. 单选题(每题4分,15题,共60分) 1.考虑函数原型void hello(int a,int b=7,char* pszC="*"),下面的函数调用钟,属于不合法调用的是:A hello(5) B.hello(5,8) C.hello(6,"#") D.hello(0,0,"#")2.下面有关重载函数的说法中正确的是: A.重载函数必须具
2008-10-26 23:50:00
3516
原创 C/C++语言void及void指针
1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个vo
2008-10-26 23:44:00
704
原创 C++内存管理
Bill Gates 曾经失言: 640K ought to be enough for everybody — Bill Gates 1981 C++程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。 1、内存分配方式 内存分
2008-10-26 23:41:00
521
转载 四种类型转化方法
一、C 风格(C-style)强制转型如下: (T) expression // cast expression to be of type T 函数风格(Function-style)强制转型使用这样的语法: T (expression) // cast expression to be of type T 这两种形式之间没有本
2008-10-26 23:33:00
660
原创 C++设计模式之一:Factrory Pattern
Factory模式的两个最重要的功能:1)定义创建对象的接口,封装对象的创建;个人见解:核心的主要部分在于一个具体类上,Factory接收到请求自动判断提供什么产品,但是对于一个factory而言,倘若添加一个新的产品,需要做太多的改动,换句话来说,添加一个新的产品必须改动整个factory工厂。 #include using namesp
2008-10-26 16:36:00
1095
原创 C/C++ 笔试、面试题目
1.求下面函数的返回值(微软)int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; } 假定x = 9999。 答案:8思路:将x转化为2进制,看含有的1的个数。2. 什么是“引用
2008-07-20 23:26:00
811
原创 想成为嵌入式程序员应知道的0x10个基本问题
C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的ASC
2008-07-20 23:23:00
480
原创 C语言面试题大汇总之华为面试题
1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量? 答:ex
2008-07-20 23:17:00
617
原创 凹凸笔试题目(嵌入式软件开发)
Embedded Software Design Engineer1 读程序段,回答问题int main(int argc,char *argv[]){int c=9,d=0;c=c++%5;d=c;printf("d=%d/n",d);return 0;}a) 写出程序输出b) 在一个可移植的系统中这种表达式是否存在风险?why?#include "stdio.h"int a=0; i
2008-07-20 23:14:00
880
原创 c语言面试题-----指针篇
1. char * const p; char const * p const char *p 上述三个有什么区别? char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p---------------------------------
2008-07-20 23:11:00
2375
原创 C++ sizeof 使用规则及陷阱分析
1、什么是sizeof 首先看一下sizeof在msdn上的定义: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value
2008-07-10 13:25:00
621
转载 Linux内存管理(3)
内存管理实例代码功能介绍我们希望能通过访问用户空间的内存达到读取内核数据的目的,这样便可进行内核空间到用户空间的大规模信息传输。具体的讲,我们要利用内存映射功能,将系统内核中的一部分虚拟内存映射到用户空间,从而使得用户空间地址等同与被映射的内核内存地址。代码结构体系介绍内核空间内存分配介绍因此我们将试图写一个虚拟字符设备驱动程序,通过它将系统内核空间映射到用户空间——将内核
2008-06-26 22:35:00
872
转载 Linux内存管理(2)
进程内存的分配与回收创建进程fork()、程序载入execve()、映射文件mmap()、动态内存分配malloc()/brk()等进程相关操作都需要分配内存给进程。不过这时进程申请和获得的还不是实际内存,而是虚拟内存,准确的说是“内存区域”。进程对内存区域的分配最终多会归结到do_mmap()函数上来(brk调用被单独以系统调用实现,不用do_mmap()),内核使用do_mmap()函
2008-06-26 22:27:00
952
转载 Linux内存管理(1)
前言内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容,无论市面上或是网上都充斥着大量涉及内存管理的教材和资料。因此我们这里所要写的Linux内存管理采取必重就轻的策略,从理论层面就不去板门弄斧,贻笑大方了。我们最想做的和可能做到的是以开发者的角度谈谈对内存管理的理解,最终目的是把我们在内核开发中使用内存的经验和对Linux内存管理的认识与大家共享。当然这其中我们也会设计一些诸如段页等内
2008-06-26 22:19:00
854
转载 堆和栈的区别
堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静
2008-06-05 12:37:00
457
转载 Opengl开发库介绍
Opengl开发库介绍 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。它采用C语言风格,提供大量的函数来进行图形的处理和显示。OpenGL库函数的命名方式非常有规律。所有OpenGL函数采用了以下格式:
2008-01-15 12:44:00
4245
转载 内存映射文件
对文件进行操作几乎是所有应用程序都必须进行的,并且这常常是人们争论的一个问题。应用程序究竟是应该打开文件,读取文件并关闭文件,还是打开文件,然后使用一种缓冲算法,从文件的各个不同部分进行读取和写入呢?M i c r o s o f t提供了一种两全其美的方法,那就是内存映射文件。与虚拟内存一样,内存映射文件可以用来保留一个地址空间的区域,并将物理存储器提交给该区域。它们之间的差别是,物理存储
2008-01-11 15:54:00
4395
转载 string table一个小问题
假如某一个string table是/nTest42/nTest42/n/n/nTest4264.Document/nTest42 Document那么:这么核心的东西才给20分第一个/nTest42标书主窗口的标题第二个/nTest42是新文件名紧接着的两个/n,其中的第一个用在file open 和save对话框中的标志符第二个是用于file open 和save对话框的过滤器中的扩张类型nT
2008-01-08 21:08:00
997
转载 浅谈HOOK技术在VC编程中的应用 (zz)
引言 Windows操作系统是建立在事件驱动机制之上的,系统各部分之间的沟通也都是通过消息的相互传递而实现的。但在通常情况下,应用程序只能处理来自进程内部的消息或是从其他进程发过来的消息,如果需要对在进程外传递的消息进行拦截处理就必须采取一种被称为HOOK(钩子)的技术。钩子是Windows操作系统中非常重要的一种系统接口,用它可以轻松截获并处理在其他应用程序之间传递的消息,并由此可以完成一些普
2007-12-28 14:29:00
1206
转载 Hook
一、基本概念: 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获
2007-12-28 14:20:00
513
转载 DLL简介
DLL文件即动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序 EXE 文件中,会产生一些问题:一个缺点是增加了应用
2007-12-28 09:46:00
806
转载 vc类与头文件
Class Header file CAnimateCtrl afxcmn.h CArchive afx.h CArchiveException afx.h CArray afxtempl.h CAsyncMonikerFile afxole.h CAsyncSocket afxsock.h CBitmap afxwin
2007-12-26 15:55:00
1021
原创 VC++中各种字符串
CString ,BSTR ,LPCTSTR之间关系和区别CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。typedef OLECHAR FAR* BSTR;typedef const char * L
2007-12-25 13:59:00
1157
转载 视图中的OnCreate和OnInitialUpDate进行初始化有何不同?
时间上,两者先后顺序不同,构造函数生成本类的对象,但没有产生窗口,OnCreate后窗口产生, 然后才是视图的OnInitialUpDate,一般在这里对视图的显示做初始化。简单点,就是ONCREATE只是产生VIEW的基本结构和变量而在OnInitialUpDate()中,主要初始化视图中控件等。对各个变量进行初始化操作。例子。我们要在视图中添加一个button和combobox控件则OnCre
2007-12-25 13:58:00
603
转载 MFC应用程序中处理消息的顺序
MFC应用程序中处理消息的顺序 1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数3.WindowProc() 该函数负责发送消息到OnWn
2007-12-25 11:46:00
625
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人