![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 58
wangyadong
这个作者很懒,什么都没留下…
展开
-
获得文件大小和目录
1.在当前活动目录下创建新文件: char lujing1[255]; ::GetCurrentDirectory(255,lujing); strcat(lujing,"//tempdatadecode1"); bmp=fopen(lujing1,"wb");2获得文件的大小:HANDLE fhadle = CreateFile(sourcefile,原创 2008-11-15 09:02:00 · 477 阅读 · 0 评论 -
派生类
1 派生类的合成默认构造函数与非派生的构造函数有有一点不同,除了初始化派生类的数据成员之外,它还初始化派生类对象的基类部分,基类部分由基类的默认构造函数初始化。2 派生类构造函数的初始化列表只能初始化派生类的成员,不能直接初始化继承成员,相反,派生类构造函数通过将基类包含在构造函数初始化列表中开间接初始化继承成员。并且一个类只能初始化直接基类。如果派生类显式定义了自己的复制构造函数或赋值操作符原创 2009-03-28 11:01:00 · 972 阅读 · 0 评论 -
为什么C++编译器不能支持对模板的分离式编译
首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件(假定我们的平台是win32),后者拥有PE(Portable Executable,即windows可执行文件)文件格式,并且本身包含的就已经是二进制码,但是不一定能够执行,因为并不转载 2009-04-01 09:21:00 · 483 阅读 · 0 评论 -
placement new 定位new
"placement new" placement new 是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下: void *operator new( size_t, void *p ) throw() { return p; }首先我们区分下原创 2009-04-08 13:23:00 · 1077 阅读 · 0 评论 -
设计模式学习 (Singleton Pattern)
1 单件模式(Singleton Pattern) Singleton模式要求一个类有且仅有一个实例,并且提供一个全局的访问点。从另一个角度来说,Singleton模式其实也是一种职责型模式。因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责! 在c++中实现单件模式可以使用以下方法:原创 2009-04-23 11:06:00 · 602 阅读 · 0 评论 -
strtok函数的用法
#include using namespace std; int main() { char string1[] ="set one cat"; char a[]=" "; char *token; token=strtok(string1,a); while(token!=NULL) { cout token=strt原创 2009-04-28 16:23:00 · 546 阅读 · 0 评论 -
归纳
1 调用sleep函数,可以使线程自愿放弃他剩余的时间片2 可以将0传递给sleep,这样告诉系统,调用线程将放弃剩余的时间片,并迫使系统调用另一个线程。 3 getmessage是阻塞模式的,peekmessage是非阻塞模式的,立即返回。 4 使用getHostName方式获取的ip地址为空:解决方法://获取本机IP CString GetLocalIP() { CS原创 2009-08-01 13:36:00 · 777 阅读 · 0 评论 -
stl中相等和等价的区别
STL充满了比较对象是否有同样的值。比如,当你用find来定位区间中第一个有特定值的对象的位置,find必须可以比较两个对象,看看一个的值是否与另一个相等。同样,当你尝试向set中插入一个新元素时,set::insert必须可以判断那个元素的值是否已经在set中了。find算法和set的insert成员函数是很多必须判断两个值是否相同的函数的代表。但它们以不同的方式完成,find对“相同原创 2009-08-04 13:49:00 · 2303 阅读 · 0 评论 -
stl vector unique函数
我们都知道unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除,不知道这个特性用起来就会出问题。比如下面这个例子,企图输出无重复的元素,中国自学编程网,www.zxbc.cn : #include #include #include #include using namespace std; int main()...{ vecto转载 2009-06-03 15:18:00 · 19195 阅读 · 2 评论 -
复制构造函数和赋值操作符
同样是利用现有对象的值,生成/更新另一个对象的值。区别在于:复制构造函数是去完成对未初始化的存储区的初始化,而赋值操作符则是处理一个已经存在的对象。对一个对象赋值,当它一次出现时,它将调用复制构造函数,以后每次出现,都调用赋值操作符。 定义对象a,并用另一个对象b对a进行初始化时, 若没有复制构造函数时,那么编译器会自动生成一个 T b(1);//假设对象b已经初始化 T a(b);//初试化阶段原创 2009-03-25 17:07:00 · 588 阅读 · 0 评论 -
不完全类型
可以声明一个类而不定义他class class1;这个声明也叫前向声明,在声明之后,定义之前,该类是个不完全类型,即已知是一个类型,但不知道包含哪些成员,不完全类型只能以有限方式使用,不能定义该类型的对象,只能用于定义指向该类型的指针及其引用,或者用于声明该类型作为形参类型或者返回的函数。只有当类定义完成后才能定义类,因此类不能具有自身类型的成员函数,然而,只要类名一出现,就可以认为该类已原创 2009-03-24 16:52:00 · 720 阅读 · 0 评论 -
delete 和delete[]
#include ; using namespace std; class T { public: T() { cout ~T() { cout }; int main() { const int NUM = 3; T* p1 = new T[NUM]; cout // delete[] p1; delete p1; T* p2 = new T[NUM]; c原创 2009-03-24 15:25:00 · 461 阅读 · 0 评论 -
c++ string 标准模板类
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 1.声明一个C++字符串原创 2008-12-19 11:42:00 · 1537 阅读 · 1 评论 -
积累
1 /ddd 对应1-3位8进制位数所代表的字符/xhh表示1-2位16进制位数所代表的字符举例说 /101 是8进制数,代表10进制的65,那么他代表的就是对应数字65的字符(A)2宏定义 即Define时 一定不要带“;”3#include using namespace std; #include int main() { string原创 2009-03-12 16:28:00 · 485 阅读 · 0 评论 -
c++文件指针总结
getline后的指针定位 while (i>=1 && getline(oifile,line))//一行一行获取 { oifile.clear();//注意 一定要清除 有时会有意想不到的错误 i--; if(i==1) fileflag=oifile.tellp();//获得该行行首位置的指针。 } 获取指针后的定位oifile.原创 2009-03-14 15:51:00 · 3677 阅读 · 0 评论 -
typedef
typedef用来声明一个别名,typedef后面的语法,是一个声明。本来笔者以为这里不会产生什么误解的,但结果却出乎意料,产生误解的人不在少数。罪魁祸首又是那些害人的教材。在这些教材中介绍typedef的时候通常会写出如下形式: typedef int PARA; 这种形式跟#define int PARA几乎一样,如前面几章所述,这些教材的宗旨是由浅入深,但实际做出来的行为却是以偏盖全。的确,原创 2009-03-19 16:05:00 · 481 阅读 · 0 评论 -
stl总结
1 将一个容器初始化为另一个容器的副本时,容器类型和元素类型都必须一致。如vectorive2(ive)但有一种方法可以实现不同容器的复制,即使用迭代器list slist(sve.begin*(),sve.end()),同理,迭代器就是指针,因此允许使用内置数组的一对指针初始化容器也是可以的char *word[]={"aa","bb","dd"}list wdf(word,原创 2009-03-19 16:22:00 · 412 阅读 · 0 评论 -
strcpy
Strcpy和Strncpy的区别- - 第一种情况: char* p="how are you ?"; char name[20]="ABCDEFGHIJKLMNOPQRS"; strcpy(name,p); //name改变为"how are you ? "====>正确! strncpy(name,p,sizeof(name)); //name改变为"how原创 2009-03-24 14:47:00 · 633 阅读 · 0 评论 -
关于cin
cin会过滤掉治表符,回车和空格的输入,cin输入默认分隔符是空格或者回车,也可以设置分隔符要避免在输出的时候滤掉空格,可以使用cin>>noskipws>>a[i] 用cin.get()判断回车的方法。 1,get()是basic_istream类的一个成员。在msdn里共有6种用法(重载??),分别如下。 int_type get(原创 2009-03-25 09:45:00 · 1415 阅读 · 0 评论 -
论坛总结
1 void main() { int a[3]; int* &p=a; } 为何编译通不过?有何语法错误?为何给指针建立引用就可以?数组名不也是个指针吗?为何给它建立个指针引用就不可以?这是为何请详细解释? 回答:这个问题是属于类型不匹配,a是首地址是常量了,而p是指针变量,变量当然不能对常量引用啦 ,如果把p指针const就可以了 改成 int * cons原创 2009-03-25 10:10:00 · 713 阅读 · 0 评论 -
数据存储大小端模式
所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑转载 2009-06-04 10:32:00 · 1291 阅读 · 0 评论