首页 > 代码库 > C++基础 易忘

C++基础 易忘

1.const 修饰符:C语言中习惯用#define来定义常量,例如#define PI 3.14

  C++提供了一种更加安全(这里的安全是指在替换的时候#define可能出错),更灵活的方式定义常量,用const修饰符,如:const float PI=3.14;这个常量  PI 是类型化的,它有地址,可以用指针指向它,但是不修改它(因此C++推荐使用const)。

  (1).指向常量的指针:如,const char* p="abc";注意,这里指针p的值可以改变,但是不能改变p指向的常量的值。p[2]=‘x‘;//错误

    p=‘cdf‘;//正确

  (2).常指针:如,char* const p=‘abc‘;注意,这里不能改变指针指向的地址,但是地址中的数据是可以改变的。p[2]=‘x‘;//正确

    p=‘cdf‘;//错误

  (3).指向常量的常指针:如,const char* const p=‘abc‘;这里指针指向的地址和地址中的数据都不能改。p[2]=‘x‘;//错误

    p=‘cdf‘;//错误

  说明:1.常量一旦建立,在程序的任何地方都不能改变。2.与#define不同,const可以有自己的数据类型,编译时具有良好的检测性。3.函数参数可以用    const修饰,用于保证实参在该函数内部不能被改动。即对实参,只读不写;如希望通过i_Max求出整型数组a[200]的最大值,可以定义函数原型:

  int i_Max(const int* ptr);调用的格式可以使:i_Max(a);

2.void型指针:void通常表示无值,但将void作为指针的类型时,它却表示不确定的类型。这种void型指针式一种通用型指针,也就是说任何类型的指针值都可  以赋值给void类型的指针变量。

  void *p;  //声明void 型指针

  int i=256;

  p=&i;

  注意,对于已经获值了void型指针,再对它进行操作的话,一定要显示的类型转换。否则出错!

  ...

  cout<<* (int* ) p<<endl;

  ...

3.内联函数inline:以空间换时间,所以,通常只有规模很小的且频繁使用的函数才定义为内联函数。与宏#define相似,但完全相同,推荐使用内联函数,更安   全;

  (1).类的成员函数如果定义在类里面,默认为内联函数,定义在类外的成员函数,只有加inline修饰才是内联函数;

  (2).内联函数可以在程序中定义多次,只要内联函数在一个.cpp文件中只出现一次,并且在所有的.cpp文 件中,这个内联函数的定义是一样的,就能通过编  译。那么显然,把内联函数的定义放进一个头文件中是非常明智的做法。(这句话转自                         http://www.cnblogs.com/lidabo/archive/2012/04/17/2454568.html

4.函数重载

  (1)调用函数重载时,函数返回值类型不在参数检查之列,故而只有返回值类型不同,不允许重载,出错!

  (2)函数重载与带默认值得函数一起使用的时候,有可能引起二义性,出错!如:

  void fun(int r=0,int x=0);

  void fun(int r);

  当调用fun(20)出错,无法识别是调用哪个函数,可以看出,函数重载需要注意不要产生二义性

5.new和delete

  C语言提供了malloc和free进行动态内存管理,C++提供了运算符new和delete做同样的工作,后者更出色,推荐后者

  基本形式: 指针变量名=new 类型;delete 指针变量名;如,

  int *p;

  p=new int;

  delete p;

  对于数组,语法形式为:指针变量名=new 类型名[下标表达式];delete []指针变量名;

  int *p=new int[10];

  int *pr=new int[2][3];

  delete []p;

  delete []pr;

  说明:1.运算符new可以自动计算所要分配的内存大小,不必用sizeof(),减少出错。2.new能自动返回正确的指针类型,不必进行强制类型转换。3.但是   new和delete要成对使用,否则new申请的空间变为死空间!4.一般使用new时要进行检查是否分配内存成功,不成功则new返回空指针NULL(养成一个好习

  惯)

6.引用:

  概念:引用是C++对于C的一个重要的补充,C++中变量的“引用”就是变量的别名,对引用进行的操作就是对变量进行的操作,二者等价!因此有时候引用

  比起指针更加清晰简单。

  格式:类型  &引用名=已定义的变量名;//这里的&不代表取址,表示引用。

  int a=5;

  int &b=a;

  那么b就是a的引用,a和b代表同一个变量,共享同一个内存单元!

C++基础 易忘