代码改变世界

随笔分类 - C++

C++一些基本的内存释放模板

2011-07-24 16:21 by bingcaihuang, 935 阅读, 收藏, 编辑
摘要: 1.方法名称:__delete(template)方法描述:以传入的指针类型,去释放传入的list所包含的所有item.传入的类型必须是指针类型,且不能是void*.如果list为空不会出错template <class T>void __delete(TList* list){if(list == NULL){return;}for(int i=0; i<list->Count; i++){delete (T)list->Items[i];}list->Clear();}2.方法名称:DeleteStruct方法描述:释放结构体所占内存;参数:T* tSt 阅读全文

C/C++ 数据范围int

2011-07-14 09:36 by bingcaihuang, 62793 阅读, 收藏, 编辑
摘要: 速查表:char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)unsigned short 0 ~ 65536 (2 Bytes)int -2147483648 ~ +2147483647 (4 Bytes)unsigned int 0 ~ 4294967295 (4 Bytes)long == intlong long -9223372036854775808 ~ +9223372036854775807 (8 Bytes)double 1.7 * 10^308 (8 Bytes)详细教程:===================== 阅读全文

如何传递成员函数指针参数

2011-07-13 17:02 by bingcaihuang, 3819 阅读, 收藏, 编辑
摘要: 在C++中,成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的,首先我们来回顾一下普通函数指针的传递方法://---------------------------------------------------------------------------int fun1(int i){ return i;}void fun2(int j, int (*p)(int)){ cout < < p(j);}void main(){ int i=1; fun2(i,fun1);}//--------------------------------------------- 阅读全文

C++ ofstream和ifstream详细用法

2011-04-01 09:46 by bingcaihuang, 863 阅读, 收藏, 编辑
摘要: ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器(<<) 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。 2 阅读全文

c++中const对象与const成员函数

2011-03-29 12:21 by bingcaihuang, 1721 阅读, 收藏, 编辑
摘要: 一些成员函数改变对象,一些成员函数不改变对象。 例如: int Point::GetY() { return yVal; } 这个函数被调用时,不改变Point对象,而下面的函数改变Point对象: void Point:: SetPt (int x, int y) { xVal=x; yVal=y; } 为了使成员函数的意义更加清楚,我们可在不改变对象的成员函数的函数原型中加上const说明:class Point { public: int GetX() const; int GetY() const; void SetPt (int, int); void OffsetPt (int, 阅读全文

c/c++ xml解析器

2011-03-28 08:50 by bingcaihuang, 681 阅读, 收藏, 编辑
摘要: C/C++里常用的是这几个:1、expat,C接口的sax的XML解析器,不过有人在他上面封装了DOM。2、libxml,C接口的XML解析器,支持dom,在非win平台上也被大量使用。3、xerces:这个就不用说了,IBM的东东质量还是不错的(附带可以加上icu和xalan)4、tinyxml:这个是比较轻量级的xml解析器,5、msxml:MS出品的,用起来还不错。6、xml4chttp://www-128.ibm.com/developerworks/cn/xml/x-xml4c/index.html除了上面这些,不太推荐用其他的,因为其他的使用的人比较少,出了问题找不到人,而且BUG 阅读全文

虚基类的用法

2011-03-15 15:14 by bingcaihuang, 852 阅读, 收藏, 编辑
摘要: 由类A,类B1和类B2以及类C组成了类继承的层次结构。在该结构中,类C的对象将包含两个类A的子对象。由于类A是派生类C两条继承路径上的一个公共基类,那么这个公共基类将在派生类的对象中产生多个基类子对象。如果要想使这个公共基类在派生类中只产生一个基类子对象,则必须将这个基类设定为虚基类。虚基类的引入和说明 前面简单地介绍了要引进虚基类的原因。实际上,引进虚基类的真正目的是为了解决二义性问题。 虚基类说明格式如下: virtual <继承方式><基类名> 其中,virtual是虚类的关键字。虚基类的说明是用在定义派生类时,写在派生类名的后面。例如: class A { pu 阅读全文

理解虚基类 虚函数与纯虚函数的概念

2011-03-15 14:47 by bingcaihuang, 224 阅读, 收藏, 编辑
摘要: 引言 一直以来都没有写过一篇关于概念性的文章,因为我觉得这些概念性的东西书本上都有并且说的也很详细写来也无用,今天突发奇想想写一写,下面就和大家讨论一下虚基类、虚函数与纯虚函数,一看名字就让人很容易觉得混乱。不过不要紧待看完本文后你就会理解了。正文 虚基类 在说明其作用前先看一段代码C++代码classA{public:intiValue;};classB:publicA{public:voidbPrintf(){cout<<"ThisisclassB"<<endl;};};classC:publicA{public:voidcPrintf(){co 阅读全文

C/C++怎样产生任意指定范围的随机数?

2011-03-12 14:00 by bingcaihuang, 19728 阅读, 收藏, 编辑
摘要: srand(time(NULL));之后调用rand()即可得到0 ~ 32757范围的随机数包含头文件stdlib.h和time.h 或 cstdlib和ctime#include <stdlib.h>#include <time.h>或#include <cstdlib>#include <ctime>用下列公式即可得到指定范围[m,n]的随机数:r = rand()%(n - m + 1) + m;注意:n - m 的绝对值不能超过32767 阅读全文

在MFC,Win32程序中向控制台(Console)窗口输出调试信息

2011-03-12 13:54 by bingcaihuang, 11137 阅读, 收藏, 编辑
摘要: 在MFC程序中输出调试信息的方法有两种,一种是使用TRACE宏,可以向Output窗口输出调试信息;另一种是用MessageBox,弹出消息框来输出调试信息,但会影响程序的运行。其实有一种方法可以更为方便的输出调试信息,就是输出到控制台(Console)中,即不影响程序运行,又便于查看调试信息。方法如下:1、#include <conio.h>2、在需要开启控制台窗口的地方调用AllocConsole();//注意检查返回值3、在需要输出调试的时候调用_cprintf等函数如_cprintf("i=%d\n", i);4、关闭控制台的时候调用FreeConsol 阅读全文

Visual Studio与.net framework版本对应关系

2011-03-12 13:54 by bingcaihuang, 1005 阅读, 收藏, 编辑
摘要: Visual Studio .net 2002 .net framework 1.0Visual Studio .net 2003 .net framework 1.1Visual Studio 2005 .net framework 2.0Visual Studio 2008 .net framework 3.5Visual Studio 2010 .net framework 4.0 阅读全文

使用Visual Leak Detector检测内存泄漏

2010-12-24 09:19 by bingcaihuang, 618 阅读, 收藏, 编辑
摘要: 1.初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题。当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题。内存泄漏是最常见的内存问题之一。内存泄漏如果不是很严重,在短时间内对程序不会有太大的影响,这也使得内存泄漏问题有很强的隐蔽性,不容易被发现。然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人的,从性能下降到内存耗尽,甚至会影响到其他程序的正常运行。另外内存问题的一个共同特点是,内存问题本身并不会有很明显的现象,当有异常现象出现时已时过境迁,其现场已非出现问题时的现场了,这给调试内存问题带 阅读全文

什么是线程同步

2010-12-24 09:06 by bingcaihuang, 1770 阅读, 收藏, 编辑
摘要: 在编写多线程程序时无可避免会遇到线程的同步问题。什么是线程的同步呢?  举个例子:如果在一个公司里面有一个变量记录某人T的工资count=100,有两个主管A和B(即工作线程)在早一些时候拿了这个变量的值回去 ,过了一段时间A主管将T的工资加了5块,并存回count变量,而B主管将T的工资减去3块,并存回count变量。好了,本来T君可以得到102块的工资的,现在就变成98块了。这就是线程同步要解决的问题。  在.Net的某些对象里面,在读取里面的数据的同时还可以修改数据,这类的对象就是“线程安全”。但对于自己编写的代码段而言,就必须使用线程同步技术来保证数据的完整性和正确性了。有几个规律:1 阅读全文

消除WINVER警告

2010-12-24 09:02 by bingcaihuang, 662 阅读, 收藏, 编辑
摘要: 一、WINVER Compile result: WINVER not defined. Defaulting to 0x0502 (Windows Server 2003) windows server 2003 winver=0x0502 windows xp winver=0x0501 windows 2000 winver=0x0500 windows nt 4.0 winver=0x0400 windows me winver=0x0500 windows 98 winver=0x0410 windows 95 winver=0x0400在stdafx.h的开头定义:0 阅读全文

文件路径 正斜杠和反斜杠

2010-12-22 09:37 by bingcaihuang, 12859 阅读, 收藏, 编辑
摘要: c++中\\是一种转义字符,他表示一个\,就像\n表示回车一样。所以C++中的路径名:D:\matcom45\doc\users\_themes\m.dat应为:CString filename=_T("D:\\matcom45\\doc\\users\\_themes\\m.dat");或CString filename=_T("D:/matcom45/doc/users/_themes/m.dat");"./ " 加不加都一样,就是指当前目录"../ " 表示当前目录的上级目录,即当前的父目录正斜杠,又称左斜杠,符号是"/";反斜杠,也称右斜杠,符号是"\"。  在Unix/Linux 阅读全文

C++中rand随机数

2010-12-08 09:48 by bingcaihuang, 623 阅读, 收藏, 编辑
摘要: 一、C++中不能使用random()函数 random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过。 可改用C++下的rand函数来实现。 1、C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。 随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试) 2、C++中另一函数srand(),可以指定不同的数(无符号整数变元)为种子。但是如果种子相同,伪随机数列也相同。一个办法是让用户输入种子,但是仍 阅读全文

堆(Heap)栈(Stack)

2010-12-08 09:40 by bingcaihuang, 246 阅读, 收藏, 编辑
摘要: 1、内存分配方面:堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、申请方式方面:堆:需要程序员自己申请,并指明大小。在c中malloc函数如p1 = (char *)malloc(10);在C++中用new运算符,但是注意p1、p2本身是在栈中的。因为他们还是可以认为是局部变量。栈:由系统自动分配。 例如,声明在函数中一个局部变量 阅读全文

c语言变量存储

2010-12-08 09:21 by bingcaihuang, 296 阅读, 收藏, 编辑
摘要: 一般认为在c中分为这几个存储区:1. 栈-- 有编译器自动分配释放 2. 堆-- 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3. 全局区(静态区)-- 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束释放。 4. 另外还有一个专门放常量的地方。程序结束释放在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。在所有函数体外定义的是全局量,加了static修饰符后不管在哪里都存放在全局区(静态区),在所有函数体外定义 阅读全文

函数的重载、覆盖与隐藏

2010-12-03 10:21 by bingcaihuang, 374 阅读, 收藏, 编辑
摘要: 1.重载与覆盖成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。代码2.隐藏(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual... 阅读全文

VC数据类型

2010-12-03 09:26 by bingcaihuang, 316 阅读, 收藏, 编辑
摘要: 标识符 实际类型 意义CHAR char 8位Windows(ANSI)字符。CCHAR char 8位Windows(ANSI)字符。PSZ char* 一个以"NULL"结束的Windows字符串的指针PCHAR CHAR* 一个CHAR型指针PSTR CHAR* 一个以"NULL"结尾的8位Windows(ANSI)字符串指针LPSTR CHAR* 一个以"NULL"结尾的8位WINDOWS... 阅读全文