
C++
caomiao2006
这个作者很懒,什么都没留下…
展开
-
C++虚基类的作用
虚基类的作用 当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份。例如:class CBase { };class CDerive1:virtual public CBase{ };class CDerive2:virtual public CBase{ };class CDerive12:public CDerive1,CDerive2{ }原创 2009-08-19 17:06:00 · 30165 阅读 · 7 评论 -
VS2008编译MFC程序提示找不到afxcontrolbars.h
安装Visual.Studio.2008.Team.Suite.简体中文正式版之后提示找不到afxcontrolbars.h文件,接着需要安装VS2008SP1CHSX1512981(VS2008的SP1补丁),安装到最后一项(VS90sp1-KB945140-X86-CHS)时要等待很长时间,看起来是被卡住了,需要有耐心。原创 2010-04-14 10:35:00 · 7190 阅读 · 3 评论 -
C/C++动态数组初始化
vs2008里面定义全局变量: extern bool *g_previewStatusArray = new bool[EQUIPMENT_AMOUNT](); //被默认初始化为false 但是如果不加上后面的括号,则默认初始化为true。原创 2010-04-14 16:28:00 · 3444 阅读 · 1 评论 -
C头文件相互包含的问题
在C++中,关于CPP的头文件互相包含的问题很让人头疼,其实我们谁也不愿意弄的结构混乱,难以理解,但有时又是有必须的。 假定当前有两个头文件分别为 A.h 和 B.h,内容分别如下: A.h内容为: #ifndef _A_H_ #define _A_H_ #endif #include "B.h"转载 2010-04-19 16:22:00 · 2933 阅读 · 0 评论 -
vector的push_back()函数的赋值方式
vector的push_back()函数的赋值方式是拷贝整个type类型的数据,而不只是拷贝引用(地址),所以不用担心添加局部变量之后会被自动收回。原创 2010-04-20 11:35:00 · 3716 阅读 · 0 评论 -
CString格式化字符串
char *字符串转换为CString,不能通过CString.Format(_T("%s"), “123456”);的方式来转换,这样会得到一个错误的CString,而应该直接赋值CString str = “123456”。原创 2010-04-25 15:49:00 · 1306 阅读 · 0 评论 -
关于头文件中定义的全局变量的包含
在头文件中定义了一个变量,若另一个文件包含此文件则会再产生一个相同变量的定义,在linux环境中编译时会发生如menu.o:(.sbss+0x0): multiple definition of `is_refresh_living_time_thread_createdmain.o:(.sbss+0x0): first defined here 的错误,要在包含该文件的文件原创 2010-05-06 16:32:00 · 4050 阅读 · 0 评论 -
strncpy和memcpy的异同
若拷贝的字符数小于等于源字符串的长度,则两者效果相同,即strncpy不会在拷贝的结果后面加上/0结束符;若拷贝的字符数大于源字符串的长度,则strncpy遇到源字符串的/0结束符时拷贝结束,此时strncpy拷贝的结果后面有/0结束符,即源字符串的结束符,memcpy则严格按照第三个参数指定的字节数进行内存拷贝。 strncat则会在添加的字符串之后加上/0结束符。原创 2010-05-17 13:59:00 · 1792 阅读 · 0 评论 -
枚举类型在Linux和Windows下编程的区别
<br /> Linux下(C语言编程)使用enum声明枚举类型和Windows下相同:<br /> enum ErrorCode<br /> {<br /> succeed,<br /> failed,<br /> };<br /> <br /> 但是定义时不同,Windows下定义枚举变量:<br /> enum ErrorCode error_code;<br /> ErrorCode e原创 2010-07-20 17:35:00 · 3023 阅读 · 0 评论 -
十进制加上前缀0变为八进制
<br /> 编程时,若在十进制数字前面加上前缀0,如052,则编译器把该数字视为八进制而不是十进制,就像0x50一样,所以像069这样的数字是不合法的,因为八进制不能含有8及其以上的数字。原创 2010-07-20 17:40:00 · 4802 阅读 · 0 评论 -
ntohs和htons的区别
虽然注册优快云已经有好几年了,学习写程序也有两年的时间了。对于绝大数人来说,我还是得菜鸟。平时遇到什么问题也会来到这个平台搜索别人的解答。也从这个平台上获益很多。 今天在公司因为一个问题和同事就关于htons与ntohs有没有区别探讨了一下,因为我平时也没留意过,凭着我自己的理解,认为是没有区别的。比如,同在X86的机器下,这两个函数都不是把小端的内存表示方法转成大端的吗。在回来的路上,我想回来查查,同时也想到何不就这个问题写下来,方便自己以后查看,也帮助那些想要解决同样问题的同志呢转载 2010-07-28 19:45:00 · 14796 阅读 · 0 评论 -
(转)C/C++中的日期和时间 time_t与struct tm转换
<br />摘要:<br />本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。<br />关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元)<br />1.概念<br />在 C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时原创 2010-08-01 20:54:00 · 923 阅读 · 0 评论 -
linux 客户端 Socket 非阻塞connect编程(正文)
<br />/*开发过程与源码解析<br />开发测试环境:虚拟机CentOS,windows网络调试助手<br /> 非阻塞模式有3种用途<br /> 1.三次握手同时做其他的处理。connect要花一个往返时间完成,从几毫秒的局域网到几百毫秒或几秒的广域网。这段时间可能有一些其他的处理要执行,比如数据准备,预处理等。<br /> 2.用这种技术建立多个连接。这在web浏览器中很普遍.<br /> 3.由于程序用select等待连接完成,可以设置一个转载 2010-08-02 13:01:00 · 1066 阅读 · 0 评论 -
&&和||的结合性问题
<br />先算&&再算||<br />就和先算乘法再算加法一样<br />可以用括号改变运算顺序原创 2010-08-06 17:55:00 · 1930 阅读 · 0 评论 -
switch case里声明变量的问题
<br />switch(i)<br />{<br /><br />case 0:<br /><br />break;<br /><br />case 1:<br /> int a;<br /> a = 1;<br />break;<br /><br />}<br />以上会编译错误,因为限定这个变量定义和有效区只在该块中有效, 否则你的变量定义理论上说是对整个switch语句而言的, 但是你却定义在某个分支中, 那么其他分支 又看不到, 所以会出错。强制限定变量只在某一个语句块中有效即可解决该问题,即原创 2010-08-27 13:17:00 · 3690 阅读 · 0 评论 -
安装GCC4.6.0的过程
<br /> 1、到ftp://ftp.dti.ad.jp/pub/lang/gcc/下载该版本的gcc源代码包,其实主要用到的是ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-4.6.0/里面的gcc-4.6.0.tar.bz2包,以及可能需要ftp://ftp.dti.ad.jp/pub/lang/gcc/infrastructure/里面的gmp-4.3.2.tar.bz2、mpc-0.8.1.tar.gz、mpfr-2.4.2.tar.bz转载 2011-04-20 16:38:00 · 7021 阅读 · 0 评论 -
全局变量和静态全局变量的区别
<br />全局变量和静态全局变量的区别<br /> <br />全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文转载 2011-04-25 17:32:00 · 1010 阅读 · 0 评论 -
socket的相关操作
用setsockopt()来控制recv()与send()的超时在send(),recv()过程中有时由于网络状况等原因,收发不能预期进行,而设置收发超时控制:在Linux下需要注意的是时间的控制结构是struct timeval而并不是某一整型数,以下是来自于网上一篇文章中的摘录,它是这样写的:int nNetTimeout=1000;//1秒,//设置连接和发送超时se原创 2010-08-02 11:59:00 · 1204 阅读 · 0 评论 -
sscanf的妙用
可以用如下代码将字符串形式的ip地址转换为四个整数:char * inputIpint ip[4];sscanf_s(inputIp, "%d.%d.%d.%d", &ip[0], &ip[1],&ip[2],&ip[3]); 注意sscanf_s,当读入的类型是整数或其它长度可以确定的类型时,不能在类型后面跟上长度,但是对于字符串类型(char原创 2010-03-25 17:41:00 · 1169 阅读 · 0 评论 -
c/c++通过socket发送结构体
c/c++通过socket发送结构可以直接先将结构转化到内存中,再通过send直接发送。 在网络通讯过程中往往涉及一些有关联的参数传递,例如数组,结构体之类的。对于结构体其实方法挺简单,由于结构体对象在内存中分配的空间都是连续的,所以可以将整个结构体直接转化成字符串发送,到了接收方再将这个字符串还原成结构体就大功告成了。 首先,我们建立一个结构体。 stru转载 2010-03-19 11:45:00 · 13324 阅读 · 2 评论 -
c/c++语言中static使用方法
一、c程序存储空间布局 C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。 4)栈——增长方向:自顶向下增长;自动变转载 2009-12-04 15:45:00 · 980 阅读 · 0 评论 -
c++中抽象类、虚函数和纯虚函数的学习以及和Java的对比
c++中没有接口的概念,与之对应的是纯虚类,即只含有纯虚函数的类,c++抽象类的概念是含有纯虚函数成员的类。这是因为c++提供多继承,而像java、c#这些只提供单继承(避免多继承的复杂性和低效性)的语言为了模拟多继承功能就提供了接口概念,接口可以继承多个。 abstract class是抽象类,至少包含一个纯虚函数的类就叫做抽象类。 但是如果一个类,所有的成员转载 2009-08-19 16:54:00 · 3702 阅读 · 2 评论 -
Const总结以及与c#中的比较
出处 http://dev.youkuaiyun.com/develop/article/50/50538.shtm1. const常量,如const int max = 100; 优点:const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误(边际效应)2. const 修饰类的数据成员。如:clas转载 2009-08-19 12:11:00 · 1731 阅读 · 0 评论 -
c++中的隐藏与java、c#的区别
上一篇中讲过c++隐藏的情况,可以参考《Effective C++》第50条后部分的内容: 例如,第一次碰到下面这段代码,大部分人会为它发疯:class Base {public: virtual void f(int x);};class Derived: public Base {public: virtual void f(doubl原创 2009-08-19 15:28:00 · 745 阅读 · 0 评论 -
C++类成员函数的重载、覆盖与隐藏
1. 重载、覆盖与隐藏 1).重载:成员函数具有以下的特征时发生"重载" A.相同的范围(同一个类中) B.函数的名字相同 C.参数类型不同(不能进行隐式类型转换) D.Virtual关键字可有可无 2).覆盖(也叫"继承"):指派生类函数覆盖基类函数,特征是: A.不同的范围(分别位于基类与派生类中) B.函数名字相同 C.参数相同 D.基类函数必须有vi转载 2009-08-19 15:53:00 · 694 阅读 · 0 评论 -
C/C++数组名与指针区别详解
指针是c/c++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在c语言的教学过程中也错误得给学生讲解:/"数组名就是指针/"。很幸运,我的大学老师就是其中之一。时至今日,我日复一日地进行着c/c++项目的开发,而身边还一直充满这样的程序员,他们保留着/"数组名就是指针/"的误解。 想必这种转载 2009-10-12 13:52:00 · 959 阅读 · 2 评论 -
ATL中string和MFC中CString的编码方式
string的编码方式是char(ANSI),对应于UNICODE(wchar_t)方式有wstring模板类型,CString编码方式为TCHAR,即在定义了UNICODE和_UNICODE(前者是Windows风格后者是C语言风格,效果形同,通常同时定义)时,是wchar_t型,没有定义时是char型。原创 2009-10-10 16:34:00 · 3083 阅读 · 0 评论 -
自定义dll文件的使用方法
关于导出类 要输出整个的类,对类使用_declspec(_dllexpot);要输出类的成员函数,则对该函数使用_declspec(_dllexport)。如: class AFX_EXT_CLASS CTextDoc : public CDocument { … } extern "C"原创 2009-11-06 16:45:00 · 4234 阅读 · 0 评论 -
迭代器
迭代器的行为像指针,但是实际上不是指针,而是重载了->、*等运算符的类模板,故不能将迭代器强制转换为对应类型的指针。 C++的迭代器不仅可以读内容,还可以修改内容;C#的迭代器(foreach)(Enumarable)只能读,不能写。原创 2009-10-29 11:48:00 · 591 阅读 · 0 评论 -
多线程调试运行错误,出现类似断点的标记
把标记移动到标记上可以看见提示“线程结束之后执行的下一条语句”,原以为是线程冲突了,后来用排除法(注释,在取消注释,看注释掉的语句对程序的影响)发现跟一个函数有关,进入函数体有感觉没有问题,后来通过和其他函数比较,只有vector数组的访问方式不一样,函数中声明了一个变量来缓存取到的数组元素:如P2ClipCut clipCut = m_clipCuts[i];int temp原创 2009-10-30 17:19:00 · 1017 阅读 · 0 评论 -
VC++中生成DLL和LIB文件
1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不转载 2009-11-06 17:22:00 · 11940 阅读 · 0 评论 -
VS中def文件对于生成dll和lib文件的作用
VS2005使用DEF文件来生成DLL与LibVS2005使用DEF文件来生成DLL与Lib时,与VC6的设置是不一样 的,VC6工程中,只要有DEF文件并将其添加到工程中,VC6就可以自动地生成DLL与其相应的Lib文件了。但是VS2005不一样,需要指定DEF文件,方法如下:例如:把 sqlite3.def 添加到工程中. 选择 工程 > 属性中的链接器,然后找到"输入"这一项原创 2009-11-06 18:08:00 · 7428 阅读 · 0 评论 -
string的size()和length()
C++标准库中的string中两者的源代码如下: size_type __CLR_OR_THIS_CALL length() const { // return length of sequence return (_Mysize); } size_type __CLR_OR_THIS_CALL原创 2009-11-16 10:42:00 · 98024 阅读 · 7 评论 -
C++中extern “C”含义深层探索
(转)C++中extern “C”含义深层探索 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函转载 2009-11-19 16:45:00 · 619 阅读 · 0 评论 -
delete的一点问题
1、delete可以用于值为null的指针,但是不能直接用于没有初始化刚刚声明的指针,delete用于指针表示释放指针所指向的动态分配的空间,并不删除指针本身。原创 2009-12-03 13:46:00 · 795 阅读 · 0 评论 -
C++成员函数的内存分配问题
静态成员函数和静态成员变量不属于某个具体的对象,属于类; 也就是说在类加载(即程序初始化,类还没有产生任何一个具体对象)的时候就已经为静态成员函数在内存分配了代码区空间; 一个类所有的对象调用的成员函数都是同一个代码段的; 当程序构造一个类的对象(第一次构造对象)时,就会给成员函数(非静态成员函数)分配代码区空间,之后构造的对象只给非静态的成员变量分原创 2009-12-03 16:54:00 · 5552 阅读 · 5 评论 -
JAVA – 虚函数、抽象函数、抽象类、接口
1. Java虚函数虚函数的存在是为了多态。C++中普通成员函数加上virtual关键字就成为虚函数Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行为。如果Java中不希望某个函数具有虚函数特性,可以加上final关键字变成非虚函数PS: 其实C++和Java在虚函数的观点大同小异,异曲同工罢了。 2. Java抽象函数转载 2014-03-10 13:24:27 · 796 阅读 · 0 评论