11 2011 档案
UML类图关系大全
摘要:UML类图关系大全1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。对象引用本身就是有向的,更适合表达我们所讨论的那种关系。所以这种关系在设计的时候比较少用到,关联一般都是有向的。使用ROSE 生成的代码是这样的:classC1...{public:C2*theC2;};classC2...{public:C1*theC1;};双向关联在代码的表现为双方都拥有对方的一个指针,当然也可以是
阅读全文
placement new, operator new and new operator (转)
摘要:笔者觉得这3个new有点意思,有时候我也被搞懵了,这些创造者难不成觉得C++过于简单,所以搞一点含糊的术语出来。这次总结一下,以便再懵的时候有个参考。有错的地方请不吝赐教,多谢先!简单点吧:1. new operator,即熟悉的new操作符,用它从堆中分配一个对象,并且初始化。CHeapObject* p=new CHeapObject(name);既然是操作符,那么它的行为就和其他+-*/操作符一样,是由C++语言定义的,不能改变,即使通过重载的方式也不能改变。C++规定了new操作符的行为:分配一个合适的空间容纳CHeapObject对象,然后调用其构造函数初始化对象。2. operat
阅读全文
placement new (转)
摘要:有关placementnew 作者: hzh5121. placementnew的含义placementnew是重载operatornew的一个标准、全局的版本,它不能够被自定义的版本代替(不像普通版本的operatornew和operatordelete能够被替换)。void*operatornew(size_t,void*p)throw(){returnp;}placementnew的执行忽略了size_t参数,只返还第二个参数。其结果是允许用户把一个对象放到一个特定的地方,达到调用构造函数的效果。和其他普通的new不同的是,它在括号里多了另外一个参数。比如:Widget*p=newWi.
阅读全文
POD(plain old data)
摘要:看書的時候,一直看到" POD" 這個關鍵字,可能是我從來沒有好好把一本C++的書看完吧(還是眼睛自動忽略 orz),後來上網查了一下,在這邊分享一下好了..POD 是Plain Old Data的簡寫,是指一些系統的int, char, float、指標、array之類的資料型別,這應該蠻好想像的,就是C++ compiler提供的內建型別,比較特別的是類別與結構,如果類別和結構帶有trivial constructor,也是POD的一種class vector3D{ float x, y, z; } ; struct size{ int width, height; }
阅读全文
模版的特化与偏特化
摘要:模版的特化与偏特化 Partial Template Specialization能够让你在模板(Template)的所有可能的实体中特化出一组子集. 1.模板的特化(template specialization): 例如,定义如下的一个模板: template<class Window, class Controller> class Widget { ... 泛化实现代码 ... }; 然后你可以像下面那样明确地加以特化: template<> //注意:template后面的尖括号中不带任何内容; class Widget<ModalDialog, MyC
阅读全文
memmove和memcpy
摘要:1.memmove函数原型:void *memmove(void *dest, const void *source, size_t count)返回值说明:返回指向dest的void *指针参数说明:dest,source分别为目标串和源串的首地址。count为要移动的字符的个数函数说明:memmove用于从source拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。2.memcpy函数原型:void *memcpy(void *dest,const void *source,size_tcount);返
阅读全文
char与wchar_t的区别
摘要:有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,有必要把来龙去脉搞清楚。 为了搞清这些函数,就必须理请几种字符类型的写法。char就不用说了,先说一些wchar_t。wchar_t是Unicode字符的数据类型,它实际定义在<string.h>里: typedef unsigned short wchar_t; 不能使用类似strcpy这样的ANSI C字符串函数来处理wchar_t字符串,必须使用wcs前缀的函数,例如wcscpy。为了让编译器识别Unicode字符串,必须以在前面加一个“L”,例如: wchar_t *szTest=L"This
阅读全文
我的问题
摘要:什么是 non-trivial default constructor, non-trivial copy constructor, non-trivial assignment operator, non-trivial destructor?
阅读全文
NP问题
摘要:NP问题简述: 一个NP-完全的问题具有如下性质:它可以在多项式时间内求解,当且仅当所有的其他的NP-完全问题也可以在多项式时间内求解。P是所有可在多项式时间内用确定算法求解的判定问题的集合。NP问题是所有可用多项式时间算法验证其猜测准确性的问题的集合。 令L1和L2是两个问题,如果有一确定的多项式时间算法求解L1,而这个算法使用了一个在多项 式时间内求解L2的确定算法,则称L1约化为L2。如果可满足性约化为一个问题L,则称L问题是NP-难度的。如果L是NP难度的且L(-NP,则称L是 NP-完全的。NP并不是NON-POLYNOMIAL,把NP说成是NON-POLYNOMIAL,是...
阅读全文
C++ 中结构体的继承关系
摘要:今天才发现,C++中结构体不仅能够定义方法,还能有继承关系。如下面代码所示: namespace std{ struct output_iterator_tag{}; struct input_iterator_tag{}; struct forward_iterator_tag :public input_iterator_tag{ }; struct bidirectional_iterator_tag :public forward_iterator_tag{ }; struct random_access_iterator_tag :public bidirectional_itera
阅读全文
杂项
摘要:1. STL关联式容器的成员函数lower_bound()和upper_bound():lower_bound(val): 返回容器中第一个值【大于或等于】val的元素的iterator位置。upper_bound(val): 返回容器中第一个值【大于】val的元素的iterator位置。
阅读全文
回调函数
摘要:1. 什么是回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回 调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。2. 回调函数实现的机制 (1)定义一个回调函数; (2)提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者; (3)当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。3. 为什么要使用回调函数 因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,...
阅读全文
写技术博客的注意事项 [转]
摘要:个人认为写博客(Blogging)是技术总结的最佳方式,甚至可以这样子讲,博客就是积累,从一定角度上讲是酱紫的。可能是受规范约束习惯了,感觉写博客也有一些注意事项,虽然之前写了很多文章,但感觉都不是很规范,现总结写博客应该注意的几点,以随时提醒自己。1. Do not Repeat Documents, link to it 不要重复文档,给出链接就好。重点写自己的心得,体会和总结。对于那些在官方文档中都讲的很清楚的东西就没有必要再进行重复了,给出相应的链接就好了。特别是对于像MSDN这种非常丰富的官方文档,最好不要去重复它的内容,因为你不一定比官方讲的清楚。重点应该放在自己的心得,体会和总结
阅读全文
词法分析器生成工具flex
摘要:1.FLEX简介 单词的描述称为模式(Lexical Pattern),模式一般用正规表达式进行精确描述。FLEX通过读取一个有规定格式的文本文件,输出一个如下所示的C语言源程序。 +------------+ +------------+ +----------------+ | 输入文件*.l |------>|flex工具 |------>|输出文件lex.yy.c | +------------+ +------------+ +----------------+ FLEX的输入文件称为LEX源文件,它内含正规表达式和对相应模式处理的C语言代码。LEX源文件的扩展名习...
阅读全文
C++ string类
摘要:string 是C++中的字符串。 字符串对象是一种特殊类型的容器,专门设计来操作的字符序列。 不像传统的c-strings,只是在数组中的一个字符序列,我们称之为字符数组,而C + +字符串对象属于一个类,这个类有很多内置的特点,在操作方式,更直观,另外还有很多有用的成员函数。 string 的定义为:typedef basic_string<char> string;成员函数(Member functions) (constructor) 构建字符串对象 (构造函数成员)operator=字符串赋值 (公有成员函数) 以下全为公有成员函数迭代器(Iterator) begin返
阅读全文
Linux中pt_regs结构体
摘要:该系统调用所需要的参数pt_regs在include/asm-i386/ptrace.h文件中定义:struct pt_regs {long ebx; //可执行文件路径的指针(regs.ebx中long ecx; //命令行参数的指针(regs.ecx中)long edx; //环境变量的指针(regs.edx中)。long esi;long edi;long ebp;long eax;int xds;int xes;long orig_eax;long eip;int xcs;long eflags;long esp;int xss;};该 参数描述了在执行该系统调用时,用户态下的CPU寄
阅读全文
Linux exec()函数
摘要:说是exec系统调用 ,实际上在Linux中,并不存在一个exec()的函数形式,exec指的是一组函数,一共有6个,分别是:#include <unistd.h>extern char **environ;int execl(const char *path, const char *arg, ...);int execlp(const char *file, const char *arg, ...);int execle(const char *path, const char *arg, ..., char *const envp[]);int execv(const ch
阅读全文
Linux中的clone()函数
摘要:int clone(int (*fn)(void *), void *child_stack, int flags, void *arg);这里fn是函数指针,我们知道进程的4要素,这个就是指向程序的指针,就是所谓的“剧本", child_stack明显是为子进程分配系统堆栈空间(在linux下系统堆栈空间是2页面,就是8K的内存,其中在这块内存中,低地址上放入了值,这个值就是进程控制块task_struct的值),flags就是标志用来描述你需要从父进程继承那些资源, arg就是传给子进程的参数)。下面是flags可以取的值标志含义CLONE_PARENT创建的子进程的父进程是调用
阅读全文
do/while(0)的妙用
摘要:在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。 1. do...while(0)消除goto语句。 通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出函数,当然,退出前先释放资源,我们的代码可能是这样: version 1 bool Execute() { // 分配资源 int *p = n...
阅读全文
C语言 gets()和scanf()函数的区别
摘要:scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。char string[15]; gets(string); /*遇到回车认为输入结束*/scanf("%s",string); /*遇到空格认为输入结束*/所以在输入的字符串中包含空格时,应该使用gets输入。scanf和gets获取字符串时的区别在C语言中,能构获取字符串的函数至少有两个:1.scanf(
阅读全文
Linux头文件和库的搜索路径
摘要:Include的header文件,连结数据库,系统定义,总共有下列来源指定gcc去那找。 当初在编译时指定的(在~gcc/gcc/collect2.c:locatelib() 写在specs内的 后来用-D -I -L指定的 gcc环境变量设定(编译的时候) ld.so的环境变量(这是run time的时候) 一、头文件 gcc 在编译时如何去寻找所需要的头文件 : ※所以header file的搜寻会从-I开始 ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INC...
阅读全文