目录
1.const修饰符
1.特点。
例如:const int A=100;这个常量A是有类型的,占储存单元,有地址,可以用指针指向它,只是不能修改它。比C语言中的define更加完善。
2.几种易混淆的常量(指针)。
(1)指向常量的指针。 const char*name = "z";
(2)常指针。 char*const name = "z";
(3)指向常量的常指针。 const char*const name="z";
注意:*号左边是指针指向的数据类型,*号后面是指针类型和名字。
:如果const定义一个整型变量,可以省略int
:函数的形参也可以用const说明,这样可以保证形参在函数内不被改动。经常用于用指针读取数组时,
2.函数原型说明:
(1)调用函数前如果没有定义,必须先给出函数声明;
(2)函数声明中可以只写出参数类型,不写参数名,但定义时必须写出参数名。
3.内联函数
(1)定义:在函数最前端前加inline,就声明为内联函数。在声明和定义时都要加inline。
(2)用途和作用:在有一个简短又需要频繁调用的函数时,定义为内联函数,可以提高程序的运行速率。在类内直接定义的成员函数,就是隐性的内联函数。
注意: 内联函数内不能有复杂的语句,如for switch等。
4.带默认参数的函数
(1):指定默认值的参数必须在没有指定默认值的参数右端,实参形参从左开始结合。带有默认值的函数实参和形参的个数可以不同。
(2)在调用函数时,如果省略某个参数,则后面的参数必须省略而采用默认值。不允许出现:special( , 1 )、
5.作用域运算符“::”
(1)如果有两个同名变量,一个是全局的,一个是局部的,那么局部变量在其作用域拥有较高的优先权,将屏蔽全局变量。如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加 “::”,此时::X代表全局变量。
...
int x=1
int main
{
int x=2;
cout<<x<<endl; //此时输出2
::x=3;
cout<<::x<<endl;//此时输出3
return 0;
}
6.强制类型转换
例如:int i=10;
double x = (double)i;//double x = double(i);
7.运算符new和delete
(1)基本形式: 指针变量名=new 类型; delete 指针变量名。
(2)作用: new可以根据数据类型自动计算所要分配的储存空间。
(3)注意: new可以为数组动态分配储存空间。此时必须提供所有维的大小.释放动态分配的数组储存区时。
格式如下
:delete[(此处什么都不用写)]指针变量名;
: new可以为简单变量分配储存空间的同时,进行初始化。:int *p=new int(9);
8.引用
(1)在声明引用时,必须立刻进行初始化。不能先声明后赋值。初始化时可以是变量,也可以是另一个引用。
int i; int &j; j=i; //错误
int i; int &j=i; //正确
(2)引用在初始化后,不能重新声明为另一个变量的引用。
(3)不允许建立Void类型的引用;不能建立引用的引用;不能建立指向指向引用的指针,但是可以把引用的地址赋值给一个指针;不能建立引用的数组;引用声明过后,使用时和普通变量一样,不用加&;
int a=2;
int &b=a;//正确
void &i=10; //错误
int c[4]="abcd";
int &d[4]=a[4];//错误
int &e=a;
int &&f=a;//错误
int &*p=a;//错误,不能建立指针的引用;
int *q=b;//正确 可以把引用赋值给指针。
(4)引用的另外一个作用就是作为函数的参数,会改变实参。
(5)用引用做返回值;
...
int main()
a[]={1,2,3,4};
{
int &set(int);
set(2)=20;
cout<<set(2);
return 0;
}
int &set(int x)
{
return a[x];
}
注意:除了将函数定义为返回一个引用外,通常一个函数是不能直接在赋值运算左边的。