文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C++个人总结

C++个人总结

时间:2011-01-13  来源:MadTurtle

下面是对C++的一点总结,这些是我需注意的地方,估计对于大家来说有些估计不成问题,不过还是记录下来与大家分享,希望有问题的地方能指出来或者一起讨论。 1. cin可以用来输入,但是如果我输入的一个字符串中有个空格符,那么它只能存入第一个空格前的部分,所以这个时候可以用gets()函数,它在<cstdio.h>头文件中。 2. strcpy,strcat,strcmp,strlen(返回的是字符的长度,不包括终止符),toupper,tolower,islower,isupper。但是要包含<cstring.h><cctype.h>头文件。 3. 数组的使用可以有声明或者无声明,例如int array[4][2]={{1,2},{1,2},{1,2},{1,2}},或者int array[][]={{1,2},{1,2},{1,2},{1,2}}。 4. 不要在使用指针时用类型转换,往往得不到正确的结果。 5. 关于main函数的传参数,如果要传包含空格的字符串那么得用双引号括起来。atof,atol,atoi将参数从字符串转换成float,long,int。 6. Call-by-value和Call-by-reference。Int f(int &i)将告诉编译器自动选择Call-by-reference方式。如果此时还传递个指针参数或者&型参数那么将报错。 注:如果引用的是函数内的局部变量,并将其进行引用返回,那么会出错,因为该变量已经在作用域内消失了。 7. Independent引用,建议一般不用,这样会使程序混乱。即是int j;int &i=j;。 8. 对于引用的几点要求:
  • 不能够引用一个引用变量
  • 不能够创建数组的引用
  • 不能够将指针指向一个引用,即是不能对引用做&操作
9. 函数的重载和重写。各个重载函数的区别在于参数类型和个数,返回值并不能产生重载效果。 10. 对于重载要注意模棱两可的情况。如果存在f(float f)和f(double d),那么f(1.0)将执行的是f(double d),但是如果是f(1)那么将提示错误。同样的错误还有f(char)和f(unsigned char),f(int i)和f(int I, int j=1)等情况。 11. volatile是说一个变量可能会被意想不到的改变,所以要求编译器每次都小心的读取这个变量,而不是保存在寄存器里面。auto是默认的变量前缀。如果在每一个文件中都声明所需要的全局变量那么会产生错误,因为发现变量在多处被声明,这种情况就需要用extern来表示,用来创建个模型而不是创建个变量即是不分配内存。static是一定条件下永久存在的,因为为其分配了固定的存储单元,但是其作用域还是分local和global,在作用域外是不能访问它们的。经常使用的变量声明成register有助于提高效率,例如for循环内的i和累加器count、sum等。对于枚举类型enum type-name{value-list}variable-list,起始是0,如果其中一个被定义那么后面的值进行累加,尽管枚举类型被自动转换成integer但是从integer不能自动转换成enum。 12. 若要用到其它语言的函数,可以用extern “C” void myCfunc();来表示或者用extern “language” {prototypes}来表示多个函数。 13. 括号操作符,例如var={count=19,incr=10, count+1}最后得到的var结果是20。 14. MyClass ob = 5;等同于MyClass ob(5);,但是这种方式只对一个参数的函数有效。 15. inline内联函数有利于提高系统效率,因为在每次调用函数的时候,一系列的指令需要被执行,包括把参数放进堆栈或者从函数返回结果等,在很多情况下,CPU都被用来做这些事而不是用来计算。如果函数被声明为inline那么函数内的代码将在被用的时候直接被拷过来而不是去调用,省去了相当多的过程,但是这仅限于代码不多的函数。有几种情况下inline是不适用的:
  • 如果函数体内包括循环语句,switch和goto语句
  • inline不能修饰递归函数
  • 不能包括static变量
16. 在类里面定义的函数将自动的被转换为inline函数,不需要自己加上inline标识符。 17. 类对象数组初始化MyClass obs[4]={-1, -2, -3, -4}或者MyClass obs[4]={MyClass(-1), MyClass(-2), MyClass(-3), MyClass(-4)}。 18. 相同类型的两个类可以将一个对象赋值到另一个对象,ob1=ob2。 19. 若将类作为参数传递给函数,那么在函数体内将为这个类对象产生一个赋值体,这样就会产生一个构造函数而多个析构函数的现象。这是因为传参的类对象并不会去调用构造方法来构造一个新的类对象,而是调用类的拷贝构造函数,如果没有定义该类的拷贝构造函数,那么编译器会替你生成一个默认的拷贝构造函数。 20. 若要返回个类对象,那么会为这个返回值建一个缓存值,当这个值返回后就销毁这个缓存。 21. 存在一个问题:当一个函数里面的对象在函数结束后需要调用析构函数来释放它所拥有的资源,这样就会产生原本不应该释放的资源被局部变量所释放,从而影响前面的对象。一种解决方法是将对象引用作为参数;另外一个是在拷贝构造函数里面为当前的局部变量创建空间,这样在析构函数中释放的就是当前申请的资源。 22. 拷贝构造函数就是用已经存在的类来初始化当前要定义的类对象,MyClass(MyClass &ob)。 还没总结完,后续内容将近期尽快加上......
相关阅读 更多 +
排行榜 更多 +
火柴人战争血腥打击

火柴人战争血腥打击

飞行射击 下载
三角符文第一章下载

三角符文第一章下载

角色扮演 下载
闪客快打3无敌版下载

闪客快打3无敌版下载

飞行射击 下载