- 博客(30)
- 资源 (3)
- 收藏
- 关注
原创 锁相关
#ifdef __USE_UNIX98/* Read-write locks. */typedef struct _pthread_rwlock_t{ struct _pthread_fastlock __rw_lock; /* Lock to guarantee mutual exclusion */ int __rw_readers;
2012-08-18 15:44:26 918
原创 函数的重载,隐藏,覆盖
重载:在同一个类里,函数名字和参数不同--->两个使编译后的函数名字不同。隐藏:子类函数名字隐藏基类里面的函数和基类函数的重载函数,如果要重载基类的函数,可以用public: using Base::func;覆盖:子类覆盖基类的虚函数,见虚函数表。
2012-05-14 00:08:07 346
转载 STL序列式容器中删除元素的方法和陷阱一
<br />在 STL (标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在 STL 中删除容器有很多陷阱,网上也有不少网友提到如何在 STL 中安全删除元素这些问题。本文将讨论编程过程中最经常使用的两个序列式容器 vector 、 list 中安全删除元素的方法和应该注意的问题, 其它如 queue 、 stack 等配接器容器( container adapter ),由于它们有专属的操作行为,没有迭代器( iterator )
2010-09-20 18:08:00 425
转载 UNICODE
简介 如果你编写的程序是针对非英语国家的用户,如中国、日本、东欧和中东地区,那么你一定要熟悉 UNICODE 字符集。尤其是用 Visual C++/MFC 编写针对上述国家和地区的用户的程序时,如果你想让自己的应用程序得到更广泛的用户,那么必须考虑代码 UNICODE 的兼容性,也就是说它既在 ASCII 模式下运行 ,也能在UNICODE 模式下运行。本文将介绍 UNICODE 的一
2010-04-17 20:12:00 379
转载 __cdecl,__fastcall, __stdcall,__thiscall 区别
函数参数入栈的方式 --------------------------------------------------------------- 在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式。 比如说__cdecl,它是标准的c方法的堆栈调用方式,就是在函数调用时的参数压入堆栈是与函数的声明顺序相反的,其它两个可以看MSDN,不过这个对我们编程没有太大的作用 ------
2010-03-05 11:34:00 578
转载 第一个WIN32程序
看的时候觉得挺sb的一程序连复窗口都没有,可是编译起来还是挺费劲的。不过最后还是出来了心情不错 呵呵。 有一个问题总结一下,就是在编译的时候,如果出现: “unexpected end of file while looking for precompiled header directive执行 cl.exe 时出错.”那么在“工程”-》“设置”-》“c/c++”里设置
2010-03-05 11:01:00 530
原创 类中静态成员函数调用成员变量的发法(单件模式)
在类中定义一个自身类的对象指针,在构造函数中使对象指针指向当前对象,在静态成员函数中通过此对象指针指向一个成员函数,在此成员函数中调用成员变量。 class A{public: A();int Go();static void diaoyong();private: int x; static int y; static A* a;
2009-12-29 17:04:00 909
转载 C++笔试面试题
今天去9City笔试才发现很多基本的东西都忘记了,以后面试前要看看这篇文章了!唉,老了!①链表反转单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的
2009-11-24 22:18:00 480
原创 编程实现栈
#include#includeusing namespace std;class CStack{public: CStack(int nSize); ~CStack(); void push(char a); void pop();private: char* m_pData; int m_nLength; // 栈长度 int m_nCount; // 当前元素个
2009-11-24 17:16:00 405
转载 C语言中的移位操作
C语言中的移位操作,内容不多。不过有些地方你不注意,就疏忽了。 先做两个小题先。 (1)unsigned char x=3;x>1是多少?(2)char x=3;x>1是多少?(3)char x=-3;x>1是多少? 3写成二进制数是00000011;-3写成二进制数是(补码)11111101。(负数的二进制表示是原码反码加
2009-11-13 11:20:00 1264
原创 对字符数组(非字符串)使用strlen的注意
char arr1[]={a,b,c};char arr2[10]={a,b,c};coutcout strlen(arr1)的时候,它会越界搜索到arr2,因为arr1没有结束符,而arr1和arr2是连在一块的内存,如果是遍历到系统内存,程序就有可能挂,因为有些系统内存是不也许访问的char arr1[]={a,b,c};char xx = 0
2009-11-06 09:31:00 1107
原创 GetMessage和PeekMessage区别,SendMessage()和PostMessage()区别
所谓空闲时间(Idle time),是指“系统中没有任何消息等待处理”的时间。空闲时间常常发生,不要认为你移动鼠标时产生一大堆的WM_MOUSEMOVE,事实上夹杂在每个WM_MOUSEMOVE之间就可能存在许多空闲时间。毕竟,计算机的速度超乎想象(这是几年前写的一句话,可想而知,现在的计算机速度就更不用说了)。 后台工作最适宜在空闲时间完成。要处理空闲时间,可以以下列循环取代WinMain中
2009-11-05 18:31:00 770
原创 static 使用总结
第一、类静态成员1.初始化静态成员变量必须初始化类的静态成员可以是公有的也可以是私有的:无论公私必须在外部初始化。如int A::_i = 1; //必须这样初始化 //初始化完毕才能赋值2、访问公有的外部可以直接访问(A::b=5;),私有的则不可以。3、类成员间调用类成员函数可以调用静态成员变量和静态成员函数,反之则不行。#include#inclu
2009-11-01 21:09:00 416
转载 堆和栈
什么是堆栈 在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。 堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。 要点: 堆:顺序随意 栈:后进先出(Last-In/First-Out) [编辑本段]堆和栈的区别 一、预备知识—程序的内存分配 一个由
2009-09-18 18:03:00 421
原创 递归实现strlen(const char* psz)
#includeint len=0;int StrLen(char* pz){ if((*pz)!=/0) { StrLen(pz+len+1); ++len; } else return 0; return len;}void main(){ char* cpz = "abcv"; cout}
2009-09-18 16:12:00 410
转载 HGE注意事项
1.用VS编译后的hge程序不能在其他机器上运行: 首先先确定hge.dll和bass.dll还有其他相关文件是否在hge程序的目录 下或者其找得到的地方. 然后请确认项目属性中公共语言运行库是否为关闭 具体做法项目属性(project properties)->配置属性(configuration p roperties)->公共语言运行库(common language runtim
2009-09-14 11:59:00 750
原创 HGE引擎里面的声音问题
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){m_hge = hgeCreate(HGE_VERSION);m_hge->System_SetStateInt(HGE_SAMPLERATE, 32000);m_hge->System_SetState(HGE_SHOWSPLASH, false);m_hge->System_SetStat
2009-09-03 15:40:00 549
原创 strlen和sizeof
char name[14]="how are you ?";//此处若写成name[13]则会报错,说“name”: 数组界限溢出,还有个/0 int x; x=strlen(name);//若x=sizeof(name),则下面输出结果为14,数组的大小 cout char* name2 = "how are you ?"; int y; y = strlen(name2);//若写成y
2009-09-03 11:44:00 426
转载 Strcpy和Strncpy
strncpy char * strncpy(char *s1,char *s2,size_t n); 将字符串s2中最多n个字符复制到字符数组s1中,返回指向s1的指针。 注意:如果源串长度大于n,则strncpy不复制最后的/0结束符,所以是不安全的,复制完后需要手动添加字符串的结束符才行。 Strcpy和Strncpy的区别- - 第一种情况: c
2009-09-02 22:27:00 513
原创 指针的赋值问题
第一种(正确):char* a;char* b="123131";a=b; 第二种:char* a=new char[10];char* b="134123";a=b;第二种写法就错了,因为a占据的内存没有释放,又给它赋一个新的地址,它就不知道怎么办了,删除不是,不删除也不是。 第二种写法改正:char* a=new char[10];char
2009-09-02 18:20:00 481
原创 拷贝构造函数
#include "stdafx.h"#include #include using namespace std;class CA{public: CA(); ~CA(); CA(const CA&); void Init(int a,char* chvar) { x = a; memcpy(ch,chvar,10*sizeof(char))
2009-09-02 18:08:00 429
原创 多重继承与虚函数表
#include "stdafx.h"#include using namespace std;class CA{public: virtual void showa() { cout } virtual void showd() { cout }};class CB{public: virtual void showb() { cout }};class CC{public:
2009-08-24 15:18:00 315
原创 单继承与虚函数表
参考资料:http://hi.baidu.com/liangjianxiong2/blog/item/ec4e614eceb89fc2d1c86a90.html代码:(代码与图不对应)class CA{ virtual show1() { cout } virtual void show2() { cout
2009-08-24 14:58:00 412
原创 前增量与后增量的区别
效率比较:前增量效率高,后增量要创建一个临时对象。 使用前增量时,对对象(操作数)进行增量修改,然后再返回该对象.所以前增量运算符操作时,参数与返回的是同一个对象.着与基本数据类型的前增量操作相似,返回的也是左值. 使用后增量时,必须在增量之前返回原有的对象值.为此,需要创建一个临时对象,存放原有的对象,以便对操作数(对象)进行增量修改时,保存最初的值.后增量操作返回的是原有对
2009-08-24 11:52:00 2893
转载 system的使用
system函数 是可以调用一些DOS命令,比如system("cls");//清屏,等于在DOS上使用cls命令下面列出常用的DOS命令,都可以用system函数调用:ASSOC 显示或修改文件扩展名关联。AT 计划在计算机上运行的命令和程序。ATTRIB 显示或更改文件属性。BREAK 设置或清除扩展式 CTRL+C 检查。CACLS 显示或修改文件的访问控
2009-08-20 18:08:00 449
转载 静态成员函数
除静态数据成员外,C++也允许定义static成员函数。静态的数据成员被所有的对象共享,也就是说,静态数据成员不属于对象,而是属于类的。与静态数据成员类似,静态成员函数也是属于类的。 注意:静态成员函数仅能访问静态的数据成员,不能访问非静态的数据成员,也不能访问非静态的成员函数,这是由于静态的成员函数没有this指针。类似于静态的数据成员,公有的、静态的成员函数在类外的调用方式为: 类名:
2009-08-20 17:28:00 723
原创 C++的四种类型转换
在c++中,提供了四种类型转换,static_cast、dynamic_cast、 reinterp_cast、const_cast。当然,如果你要用()强转也行,c++是兼容c的。 static_cast ( expression )常常用于下面几种情况:一、用于类层次结构中基类和子类之间指针或引用的转换。包括进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基
2009-08-20 16:27:00 717
原创 空指针的成员函数调用
指针为NULL了,函数还能调用吗?于是写了一个简单的程序来做测试,代码如下:class A {public: int i; void f() { cout }};void main() { A * p= NULL; p->f();} 测试发现,程序能够正常运行。把p赋一个非空值如p=(A*)123; 同样如此。于是想搞明白
2009-08-20 15:20:00 463
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人