1.const修饰符
这个东西以前就用过,定义常量,只能在定义时赋值,之后面不能修改了。
int型变量的常量声明可以直接写成 const x;
const可以和指针一起使用,一般有以下三种组合:
(1)指向常量的指针: const char* pc = "abc";
不能修改pc指向的字符串 的成员pc[i] 的值,但是可以修改指针pc所指向的地址
pc[1]='x' X pc="def"√
(2)常指针:把指针指向的地址声明为常量 char* const pc="abc";
可以修改pc指向的字符串 的成员pc[i] 的值,但是不能修改指针pc所指向的地址
pc[1]='x'√ pc="def"X
(3)指向常量的常指针: const char* const pc = "abc";
固定的不能修改,以上两种修改方式都是错的
2.内联函数 inline
一般规模小,调用频繁的函数定义为内联函数可以节省时间------函数体较长的函数就不必了
inline 返回类型 函数名 (形参 ){函数体}
(1)第一次使用前必须完整定义
(2)一般不能含有复杂的控制语句 for或者switch等
(3)内联函数是一种空间换时间的措施
3.带有默认参数值的函数
默认参数值的函数 为函数定义或者声明时给形参赋特殊值的函数(声明和定义 最多有一处赋默认设置)
若实参被省略,则会使用默认值
如 void init(int x,int y=5,int z=10); init(3,9);=========init(3,9,10);
(1)函数原型中,所有取默认值的参数都必须出现在不取默认值的参数的右边 即编译器从左往右的书序将实参与形参结合
先变量,后为带有默认值的变量
(2)函数调用时,若某个参数省略,则他后面的参数都应该省略,不能使用默认值
即 init( ,10)是错误的
4.函数重载
统一作用域内 ,函数的参数类型不同,或者参数个数不同,或者二者兼有之,两个或两个以上的函数可以使用相同的函数名
编译器会根据实参与形参的类型及个数的最佳匹配自动确定调用哪一个函数
(1)调用重载函数时,函数的返回类型不在参数匹配的检查之列
(2)函数的重载和带默认值的函数一起使用时,有可能引起二义性
例 void init(int r=0,int x=1);
void init(int r);
调用 init(20); 系统将无法识别调用的是哪一个函数
5.作用域标识符 ::
可以使用::对被屏蔽的同名全局变量进行访问
当然还有其他的用途
6.强制类型转换
int i=10;
方法一:double x=(double) i;
方法二:double x=double (i);====c++推荐
7.内存分配 new和delete
指针变量名=new 类型;
delete 指针变量名
(1)new和delete必须搭配使用
(2)同样需要注意内存分配失败的情况,空间申请失败将返回空指针 NULL
(3)new可以为数组分配空间
如 int *p=new int [10];
释放空间时 同样使用delete 来搭配 ,只需要 delete []p;
(4)new 可以在为简单变量分配内存空间的同时,进行初始化
如 int *p=new int (99);//现在的*p 就是99
7.引用 &
变量的引用就是变量的别名
int i=10;
int & j = i ; //现在 j 的值就是 i = 10,二者代表着同一个变量,二者具有相同的地址,当对 i 或者 j 进行修改时,二者同步更新
(1)引用不是一个独立的数据类型!当声明了一个引用时,必须同时用另一个变量名来对他进行初始化,即声明他代表的是哪一个变量,不能声明完成后在赋值。
(2)为引用提供初始值,可以是一个变量或者另一个引用。
int i = 5;
int & j = i;
int & k =j; //此时 j 和 k 都是变量 i 的别名
(3)引用使用时可直接使用,不需要向指针一样加 *运算符
(4)引用在初始化之后,不能再被重新声明为另一个变量的引用
int j , k ;
int &j = i;
j = &k;//错误的
引用和函数参数的关系
引用作为函数参数,是可以双向传递的,和指针类似,但是更简单
可以使用引用返回函数值:
int & index(int i);{ return a[i];}
这样就可以将函数的调用放在 赋值运算符的左边
index(2)=25;//现在 a[2]就是 25;
引用的进一步说明
(1)不允许建立 void类型的引用
例如 void &r = 10 ;//错误
(2)不能建立引用的数组
int a[4] = {1,2,3,4};
int &ra[4] = a ;//错误 数组名a只代表数组首元素的地址
(3)不能建立引用的引用,不能建立指向引用的指针
int n=3;
int &&r = n;//错,不能建立引用的引用
int &* p =n;// 错,引用不是独立的数据类型 ,不能建立指向引用的指针
(4)可以将引用的地址赋给一个指针 ,此时指针指向的是原来的变量
int a = 50;
int &b = a;
int *p = &b; //相当于p指向a 即 int *p = a;
(5)可以使用const 对引用加以限定 不允许改变该引用的值
int a =5;
const int &b = a;
b=3;// 错误,引用是const
但是不阻止改变 a 的值
a = 10;//此时的 a 和 b都是 10;