C++ 基础知识
dadalan
这个作者很懒,什么都没留下…
展开
-
规范的strcpy
char * strcpy( char *strDest, const char *strSrc ) { assert( (strDest != NULL) && (strSrc != NULL) ); char *address = strDest; while( (*strDest++ = * strSrc++) != ‘/0’ ); return addre原创 2009-02-12 20:44:00 · 666 阅读 · 0 评论 -
成员变量前请加上this
以前写代码总是觉得在成员变量前请加上this或者在成员函数前加上this太麻烦。但是当我们在类中声明了一个函数,可能是实例的成员函数,可能是类的方法。接着进行定义这个方法时,通常都是通过拷贝过去,很少有人会在定义的时候重新把这个方法敲一遍。问题常常处在我们想偷懒的地方,拷贝过去后,通常会忘记在这个方法前添加这个类的名字,这个函数里面如果有用到成员属性,那么在链接时出错提示,找不到某某变量,原创 2008-12-10 15:32:00 · 1759 阅读 · 0 评论 -
函数默认值的设置放在声明的时候,在定义的时候如果设置默认值,编译会出错
函数默认值的设置放在声明的时候,在定义的时候如果设置默认值,编译会出错原创 2008-12-11 16:20:00 · 1062 阅读 · 2 评论 -
软中断与硬中断区别
区别有好几点,不过可能我总结得不全面 1.软中断发生的时间是由程序控制的,而硬中断发生的时间是随机的 2.软中断是由程序调用发生的,而硬中断是由外设引发的 3.硬件中断处理程序要确保它能快速地完成它的任务,这样程序执行时才不会等侍较长时间 编写这两类的中断处理程序我感觉区别不太大原创 2008-12-17 11:28:00 · 4156 阅读 · 0 评论 -
内存池
最近开发一个项目,对内存要求很严格,在此期间认真的学习了一下大名顶顶的内存池技术,网上有一好文,拿来分享内存池(MemPool)技术备受推崇。我用google搜索了下,没有找到比较详细的原理性的文章,故此补充一个。另外,补充了boost::pool组件与经典MemPool的差异。同时也描述了MemPool在sgi-stl/stlport中的运用。经典的内存池(MemPool)技术,是一种用于分配大原创 2008-12-17 18:05:00 · 1394 阅读 · 1 评论 -
c++抽象类
#includeiostream>using namespace std;class A{protected: int i;public: A(int x):i(x){} virtual int operator!() = 0;};class B:public A{ A *p;public: B(int x, A*y = NULL):A(x){p = y;} i原创 2009-03-06 00:16:00 · 674 阅读 · 0 评论 -
文字编码问题
首次出现这个问题是在iphone平台上防火墙开发的时候,拦截的信息中有中文字符,我想截取其中一部分显示,我定义的数组是250个字符,于是我截取了249个字符,问题就出现了,发现超过250个字符的短信没法显示,我左思右想,终于想到了文字的编码问题,中文字符有几种编码格式,但是全是偶数个字节,于是我把249该为248问题解决了。原创 2008-12-22 15:35:00 · 574 阅读 · 0 评论 -
VC的条件编译,它有好多用处,主要有以下几点
VC的条件编译,它有好多用处,主要有以下几点: 1、防止重复编译。 2、可以分别对不同的版本进行不同的编译。 3、可以针对不同的系统进行不同的编译。原创 2009-03-11 13:28:00 · 1176 阅读 · 0 评论 -
C语言中宏定义的一个技巧用法
在程序调试时,我们经常需要输出一些调试信息,当调试完毕后,就不再需要使用了。那怎么快速的在调试状态和发布状态切换呢?通常我们使用预编译加宏定义来处理这个问题,例如:#ifdef DEBUG 调试代码#endif如果我们使用printf来显示一些调试信息,那么每个地方都加上#ifdef和#endif就很麻烦了。我们可以定义一个DbgPrintf的函数来专门处理这些事情原创 2009-03-07 20:47:00 · 935 阅读 · 0 评论 -
叠代器push_back要注意的地方
因为push_back操作导致的内存重新分配 造成容器内元素内存重新分配 原来的地址就无效了 vector a; vector b; a.reserve(10); //增加这行 假设 最多放10个元素 b.reserve(10); //增加这行 假设 最多放10个元素原创 2008-12-23 15:09:00 · 839 阅读 · 0 评论 -
c++中的string用法 一
basic_string::max_size返回string 能放的最大元素个数。(不同于capacity)size_type max_size( ) const;basic_string ::size_type cap, max;cap = s.capacity ( );max = s.max_size ( ); // max=4294967294.basic_str原创 2009-02-18 14:45:00 · 1357 阅读 · 0 评论 -
C++中 替换string类型字符串中汉字的问题
:#include #include using namespace std; void main() { string s="你好世界"; for(int i=0;i{ string a=" "; a[0]=s[i]; a[1]=s[i+1]; if(a=="好") { a="坏"; s[i] = a[0]; s[i+1]=a[1]; } cout} coutsystem("pause");原创 2009-02-18 14:30:00 · 4227 阅读 · 0 评论 -
C 如何从string中删除一个字符
原创 2009-02-18 14:48:00 · 2063 阅读 · 0 评论 -
C/C++面试题集(最全的C/C++试题集和答案)(续)
C/C++面试题集(最全的C/C++试题集和答案)(续) 大 | 中 | 小 [2006/06/20 17:23 | 分类: C/C++ | by NetFetch ] 最全的CC++面试题集(最全的CC++试题集和答案)(续)(欢迎加入更多CC++面试题。)原文:http://www.ad0.cn/netfetch/CC++面试题不断更新……金山笔试题(2007年转载 2009-02-12 21:21:00 · 15022 阅读 · 0 评论 -
用if还是try catch来判断内存分配失败
用if还是try catch来判断内存分配失败原创 2009-02-12 21:52:00 · 900 阅读 · 0 评论 -
C++ 运算符优先级列表
C++ 运算符优先级列表 http://www.cppreference.com/operator_precedence.htmlPrecedenceOperatorDescriptionExampleAssociativity1()[]->.::++--Grouping operatorArray accessMember access from a po原创 2009-02-13 09:25:00 · 536 阅读 · 0 评论 -
静态成员与非静态成员
在类的申明和实现中,如果用一般变量和成员函数,系统是不会为他们分配内存的,直到你使用这个类去定义一个对象时系统才会为你的类分配内存。如果类成员是静态的,那么在定义时系统就会对其分配内存,也就是说你可以你可以在该类定义对象前调用其中的静态成员。用法嘛比如Effective C++中有这样一个列子:类中有一个const成员变量,为了不浪费空间,可将其申明为static,如此一来就不会为该类的每个对象都原创 2009-02-15 12:43:00 · 602 阅读 · 0 评论 -
成员函数中的静态变量
成员函数中的静态变量 的理解 成员函数中的静态变量的意义和全局变量差不多,不过是在函数外部不能使用罢了 注意在定义的时候进行初始化就可以。 函数中的静态变量只有在第一次进入该函数的时候才进行初始化,以后再进入该函数的时候静态变量不再初始化,保持先前的状态。 #include using namespace std;原创 2009-02-15 12:52:00 · 1083 阅读 · 0 评论 -
C++ 局部类和嵌套类
局部类 在一个函数体内定义的类称为局部类。局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关。在定义局部类时需要注重:局部类中不能说明静态成员函数,并且所有成员函数都必须定义在类体内。在实践中,局部类是很少使用的。下面是一个局部类的例子。 int a; void fun() { static int s; class A { pu原创 2009-02-15 15:16:00 · 842 阅读 · 0 评论 -
消息映射机制的简单实现
项目中使用了消息通信机制,因为消息类型非常多,相应的,处理消息的地方代码也非常多。 自然而然想到MFC中的消息映射: 创建一个缺省MFC框架程序的解决方案Test,在Test.h中看到以下内容: class Ctest_mfcApp : public CWinApp{public: Ctest_mfcApp(); // 重写public: virtual BOOL InitIn原创 2009-02-15 10:10:00 · 775 阅读 · 0 评论 -
取反问题
int型占4字节,5在内存里为:00000005H,按位取反,看最后4位。5==0101==》1010,所以在内存里就为fffffffaH,这是补码,换成原码。。。。fffffffa-1=fffffff9,最高位不变,按位取反,看最后4位 9==1001==》0110。。。80000006H,所以结果为-6。原创 2009-02-17 11:48:00 · 839 阅读 · 0 评论 -
C++标准库string类型的操作总结
总结一下C++中string的操作,来自〈C++ Primer〉第四版。1. string对象的定义和初始化:string s1; //空串string s2(s1); //将s2初始化为s1的一个副本string s3("value"); //s3初始化并赋值string s4(n,"c"); //s4初始化,赋值为n个cstring原创 2009-02-18 14:47:00 · 2103 阅读 · 1 评论 -
深拷贝、浅拷贝构造函数问题
Trend科技的一道面试题:请看下面的程序,说说会出现什么问题?#include #include #include using namespace std; class CDemo { public: CDemo():str(NULL){}; ~CDemo() { if(str) delete[] str;原创 2009-03-12 11:20:00 · 1394 阅读 · 0 评论 -
stl作为局部变量的内存问题
C/C code Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/void func(){ mapm; for(int i=0;i<0xffffff;i ) m.原创 2009-03-12 11:46:00 · 2739 阅读 · 0 评论 -
c++对象和内存 对虚继承的讨论
1 类、对象和内存1.1 通过内存看对象我们先回顾一下类和对象的定义,类是定义同一类所有实例变量和方法的蓝图或原型;对象是类的实例化。从内存的角度可以对这两个定义这样理解,类刻画了实例的内存布局,确定实例中每个数据成员在一块连续内存中的位置、大小以及对内存的解读方式;对象就是系统根据类刻画的内存布局去分配的内存。除了实例变量和方法,类也可以定义类变量和类原创 2009-07-09 23:51:00 · 1513 阅读 · 3 评论 -
Unix常用命令
第一章 目录及文件操作命令1.1 ls[语法]: ls [-RadCxmlnogrtucpFbqisf1] [目录或文件......] [说明]: ls 命令列出指定目录下的文件,缺省目录为当前目录 ./,缺省输出顺序为纵向按字符顺序排列。 -R 递归地列出每个子目录的内容 -a 列出所有文件,包括第一个字符为“.”的隐藏文件 -d 若后面参数是目录,则只列出目录名而不列出目录内容,常原创 2009-07-09 23:56:00 · 909 阅读 · 0 评论 -
六种排序的C++实现
class SortNum { public: SortNum(); virtual ~SortNum(); void exchange(int& b,int& c);//交换数据 void listout(int a[],int n);//列出所有 void selectSort(int a[],int n);//选原创 2009-07-10 00:00:00 · 1085 阅读 · 1 评论 -
什么情况下要有拷贝构造函数
拷贝构造函数,经常被称作X(X&),是一种特殊的构造函数,他由编译器调用来完成一些基于同一类的其他对象的构件及初始化。它的唯一的一个参数(对象的引用)是不可变的(因为是const型的)。这个函数经常用在函数调用期间于用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。 在C++中,下面三种对象需要拷贝的情况。原创 2009-10-16 15:47:00 · 4979 阅读 · 4 评论 -
std::stringstream 的介绍
C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。 istringstream类用于执行C++风格的串流的输入操作。 ostringstream类用于执行C风格的串流的输出操作。 strstream类同时可以支持C风格的串流的输入输出操作。 istringstream类是从is原创 2009-10-16 15:56:00 · 5774 阅读 · 0 评论 -
返回引用要注意的地方
int &GetX()constconst表示不能改变这个成员数据,也就是被引用的变量应该是常量 所以正确的声明是const int &GetX()const原创 2010-02-28 23:16:00 · 627 阅读 · 0 评论 -
C++ 运算符优先级列表
PrecedenceOperatorDescriptionExampleAssociativity1()[]->.::++--Grouping operatorArray accessMember access from a pointerMember access from an objectScoping operatorPost-incrementPost原创 2010-03-18 19:46:00 · 569 阅读 · 0 评论 -
extern用法
<br />// 某个头文件,比如叫 ExternTest.h 中<br />externint iExtern; // 这样就是一个变量声明——而不是定义,因为没有分配存储空间<br /> //这以后就可以引用这个变量,而这个变量的存储于下面的 int iExtern; 的那个位置分配<br /> <br /><br />// 某个源文件,比如叫 ExternTest.c 中<br />int iExtern;<br /原创 2010-08-31 23:38:00 · 2426 阅读 · 0 评论 -
标准库和boost库中几个智能指针的比较
这些智能指针在设计的时候,一个关键的问题就是所有权的控制。如果把指针所指向的对象比作电视机的话,那么指针就是观众。第一个人需要看电视的时候需要打开它,没人看的时候就要保证把电视关掉。对于std::auto_ptr,boost::shared_ptr和scoped_ptr,情况如下:<br />1. std::auto_ptr:auto_ptr这个种族很有趣,每次只让一个人看电视,大家可以换着看,由最后那个不想看的人关掉。当把一个auto_ptr赋值给另一个时,就好比换一个人看电视似的。总之,电视只能一个人看原创 2010-10-22 20:50:00 · 3249 阅读 · 1 评论 -
关于using std::string
std::string 或者使用前先用 using std::string或using namespace std; 标准C++的string组件放在命名空间std里。所谓命名空间,跟java里的package很类似,java需要用import引入,c++用using。原创 2009-06-16 11:35:00 · 2134 阅读 · 0 评论 -
委托的实现代码
#include using namespace std;templateclass A{ private: typedef int (T::*delegateFun)(int); T * _This; delegateFun _deleGate; public: //This±»´úÀíµÄ¶ÔÏó, delegateFun±»´úÀíµÄ·½·¨原创 2009-04-27 10:19:00 · 801 阅读 · 0 评论 -
委托、信号和消息反馈的模板实现技术
委托、信号和消息反馈的模板实现技术作者:落木随风提交者:eastvc 发布日期:2003-9-20 10:25:27原文出处:http://www.cpphelp.net/issue/delegation.html憋了很长一段时间的想法,在这里说说,希望听听诸位高手的意见。我写过不少C++程序(当然比起高手还是差远了),写过库也写过客户程序。一般库都会提供一些好用的类供客户程序使用,不少原创 2009-04-05 21:06:00 · 917 阅读 · 0 评论 -
string.cpp的实现
// STRING.CPP// Member function definitions for class String#include #include #include #include #include #include "string.h"// Conversion constructor: Convert char * to StringSt原创 2009-03-12 15:09:00 · 2285 阅读 · 0 评论 -
c++函数传参问题
关于 c++函数传参,网上有很多说法。特别是对于调用一个对象的公用方法时,很多人认为this指针作为最后一个参数被压入到栈中。 我认为这中说法不妥当根据我的观察,我发现this指针是通过寄存器传进去的,而不是通过什么最后一参数被压入到栈中。 还有很多人认为返回值会作为第一个参数。 据我的观察这个也不妥 返回值通常都是最常用的寄存器返回的,比如在int原创 2008-12-28 21:39:00 · 1071 阅读 · 0 评论 -
C++箴言:接口继承和实现继承
Things to Remember ·Inheritance of interface(接口继承)与 inheritance of implementation(实现继承)不同。在 public inheritance(公开继承)下,derived classes(派生类)总是继承 base class interfaces(基类接口)。 ·Pure virtual f原创 2009-03-12 13:20:00 · 836 阅读 · 0 评论 -
用C语言进行面向对象编程
*******************************************************************************C中可移植的继承性和多态性2Fr: [ESP-9712-code]By: Miro SamekRd: Amine Chen[amine@263.net]******************************************原创 2009-03-12 13:42:00 · 8583 阅读 · 0 评论