
C++学习
文章平均质量分 58
tttt418
记录点滴,分享知识。
展开
-
C++ 内存泄露的检测
首先,我们需要知道C运行库的Debug版本提供了许多检测功能,使得我们更容易的Debug程序。在MSDN中有专门的章节讲这个,叫做Debug Routines,建议大家先看看里面的内容吧。我们会用到里面很重要的几个函数。其中最重要的是 _CrtDumpMemoryLeaks();自己看MSDN里的帮助吧。使用这个函数,需要包含头文件crtdbg.h该函数只在Debug版本才有用,当在调试器下运行程转载 2009-08-22 17:42:00 · 1026 阅读 · 2 评论 -
获取文件大小
#include #include #include #include #define _AFXDLLusing namespace std;void main(){ // 此文件在工程打开状态下为不可访问 char* filepath = "..//test.ncb"; // 方法一 struct _stat info; _stat(filepath, &info); int size = info.st_size;// 大小:byte cout // 方转载 2010-11-17 15:31:00 · 542 阅读 · 1 评论 -
字符和数值的相互转换
老忘… 写这里提醒下字符串转换为其它数据类型 strcpy(temp,"123"); 短整型(int) i = atoi(temp); 长整型(long) l = atol(temp); 浮点(double) d = atof(temp)原创 2010-11-17 15:26:00 · 916 阅读 · 1 评论 -
VC中Radio Button的用法
先为对话框加上2个radio button,分别是Radio1和Radio2。问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了?关键是选上,“默认”只要放在OnInitDialog()即可。三种方法可以让它选上,第一种:((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//不选上((CButton *)GetDlgIt转载 2010-11-17 22:08:00 · 551 阅读 · 0 评论 -
解决VC6.0中ostringstream类输出__int64类型导致的错误error C2593: 'operator <<' is ambiguous
#includeint main(){ std::ostringstream ss; ss __int64 i; // error C2593: 'operator ss }以上代码提示错误error C2593: 'operator { char buf[255]={0}; _i64tot( data, buf,10); stream return stream;原创 2010-11-18 10:45:00 · 2369 阅读 · 1 评论 -
stack类
与vector、list、deque等顺序容器不同,stack是标准库提供的顺序容器适配器。适配器(adapter)从本质上说是使一类事物的行为类似于另一类事物的行为的一种机制。容器适配器就是让一种已经存在的容器类型采用另一种不同的抽象类型的工作方式实现。stack就可以使任何一种顺序容器以栈的方式工作。由此可见,stack是一种逻辑上的概念,是在基本容器上次的一种封装。常用的stack相关的操作:#include stack stk;s.empty();s.size();s.pop(); 删除栈顶元素s.原创 2010-11-17 08:51:00 · 737 阅读 · 1 评论 -
FILE指针在两个dll中无法正确操作的问题
<br />int main(int argc, char* argv[])<br />{<br /> FILE * stream;<br /> if( (stream=fopen("F://1.txt","w+")) !=NULL )<br /> {<br /> printf("fp1=%X/n", stream);<br /> testFile( stream );<br /> }<br /> return 0;<br />}<br />//dl转载 2011-01-07 14:52:00 · 2130 阅读 · 2 评论 -
基类和派生类的构造函数
<br />关于基类和派生类的构造函数这篇文章写的很清楚,转载过来:<br /> <br /><br />1. 顺序<br /> 当创建一个派生类的对象时,系统首先自动创建一个基类对象,也就是说,在调用派生类构造函数创建派生类对象之前,系统首先调用基类的构造函数创建基类对象。当派生类对象生命期结束时,首先调用派生类的析构函数,然后调用基类的析构函数。简而言之,就是说,构造函数:基类->派生类。析构函数:派生类->基类。<br />这个我们完全可以通过一个小程序来说明://通过输出就可以看出在创建派转载 2010-11-15 11:48:00 · 1109 阅读 · 0 评论 -
HEAP[xxx.exe]:Invalid Address specified to RtlValidateHeap 错误的解决方法
<br />抽象出问题是这样的:<br /> <br />class DLL_API1 A<br />{<br />func()<br />{<br />vector vec;<br />B b;<br />b.func(vec);<br /> <br />return TRUE;<br />}<br />}<br /> <br />其中B是另一个导出类,定义如下<br />class DLL_API2 B<br />{<br />private:<br />vector m_vec;<br />publi原创 2011-01-07 11:21:00 · 6055 阅读 · 2 评论 -
函数指针
在看stanford牛人们写的代码里经常用到这个。貌似很好用的,学习下~【函数指针】 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表转载 2010-11-12 21:26:00 · 351 阅读 · 0 评论 -
STL中用erase()方法遍历删除元素
erase(it)删除元素后指向删除元素的下一个元素的地址,所以正确的使用方法:std::vector Vec; std::vector::iterator itVec; for( itVec = Vec.begin(); itVec != Vec.end(); ) { if( WillDelete( *itVec) ) { itVec = Vec.erase( itVec); }转载 2010-10-26 11:02:00 · 458 阅读 · 0 评论 -
C++中 public,protected, private 访问标号小结
<br />第一:private, public, protected 访问标号的访问范围。private:只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。<br />protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问。<br />public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由4.该类的对象访问。 注:友元函数包括3种:设为友元的普通的非成员函数;设为友元的其他类的成员函数;设为转载 2010-10-20 10:27:00 · 355 阅读 · 0 评论 -
CString 转化为 char*
<br /><br /> CString orig("Hello, World!");<br /><br /> // Convert to a char*<br /> const size_t newsize = 100;<br /> char nstring[newsize];<br /> strcpy(nstring, orig);<br /><br />另外的方法如下:<br />方法一: <br />char *p; <br />CString str="hello"; <b原创 2010-11-17 22:57:00 · 635 阅读 · 1 评论