变量的引用:
1、概念:为变量取一个别名。
2、格式:
类型标识符 & 引用名;
其中&为引用声明符,不是取地址。
int a;
int &b = a;
定义一个整型引用变量b,并将其初始化为整型变量a的引用,b是a的引用,即b是a的别名,对b的任何操作就是对a的操作。
3、使用引用应注意的几个方面:
(1)创建一个引用时必须将其初始化成对某一具体变量或常量的引用;
(2)程序不能改变引用对象,即不能改变成对另一个变量或者常量的引用;
(3)必须确保引用是和一个合法的存储单元相连;
(4)对常量的别名引用必须是const类型的引用;
(5)函数返回类型说明为引用类型,其返回应该为变量,而不能是表达式或者常量,且变量在函数执行完毕返回后仍可以使用,但返回函数体内的局部变量是不允许的。
4、作为函数参数
这是C++对C语言函数参数传递的扩展,引用传递和指针传递一样,只是传实参的时候只需传变量名,不需要传变量地址。
例如:
#include <iostream>
using namespace std;
void Swap( int &a, int &b)
{
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
int main()
{
int a = 3;
int b = 100;
cout<<"交换前:"<<endl;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
Swap(a, b);
cout<<"交换后:"<<endl;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
return 0;
}
输出结果:
交换前:
a = 3
b = 100
交换后:
a = 100
b = 3
引用作为参数传递的另一个优点是当参数是一个复杂的数据类型,如结构体、类等,可以避免值传递时的参数复制过程,从而提高程序执行效率。
函数重载
1、定义:
函数重载实质上是指允许同一作用域内用同一函数名来定义不同的函数,这些函数的参数必须具备以下两种差别之一:
(1)函数参数个数不同
(2)函数参数类型不完全相同
2、使用函数重载时,应该注意以下几个方面:
(1)仅返回类型不同的函数不能重载;
(2)若函数参数除其中一个是另一个类型的const或者引用外均相同,不能重载。
带缺省参数的函数
1、在形参表中对一个或几个参数指定缺省值来实现函数调用时书写的简洁性,增加函数使用的灵活性。
2、在调用含缺省参数的函数时,C++自动用函数原型中的缺省值来补足所缺少的实参。
3、使用缺省参数函数时应注意:
(1)一旦某参数定义了缺省值,其后续参数(即其右边的所有参数)均须定义缺省值。
(2)调用含缺省参数的函数时,若某参数用缺省值,则其后面的所有参数都应用缺省值。
(3)如果函数原型(即函数声明)中定义了缺省参数,就不能在函数原型有效范围里的函数定义中再设置缺省参数。
(4)不要同时使用重载函数和缺省参数的函数,因为再调用函数时,如果实参与形参个数不同,则系统无法判断是使用重载函数还是缺省参数的函数。
内联函数
1、定义方法:
在在函数首部最左边冠以inline关键字,则该函数就被定义为内联函数。
2、使用场合:
如果有函数需要频繁调用,则该函数可以定义成内联函数。
内联函数是以空间换取执行时间的效率。每次函数调用处都会用内联函数的函数体中的代码来代替,将增加程序的代码量,消耗更多的内存。
3、注意:
(1)内联函数的定义必须出现在对该函数的调用之前,最简单的方法就是放在头文件中。
(2)递归函数不能作为内联函数。
(3)在循环中最好不要用内联函数。
(4)在内联函数中不能含有复杂的控制结构,如switch、while等。
new和delete算符
1、new分配存储单元
(1)格式:
new 数据类型
或 new 数据类型[元素个数];//对数组
(2)例子:
int * p;
p = new int; //分配一个整型单元,返回地址指针赋给p
char * ptArray = new char[80]; //分配一块80个字符空间
2、delete
(1)作用:释放new分配的空间
(2)格式:
delete 指向分配空间的指针变量; //如果分配的是单个对象空间
或 delete [] 指向分配空间的指针变量; //如分配的是数组对象空间
(3)例子:
delete p;
delete [] ptArray;
3、注意:
(1)new分配存储单元,必须指明存储数据的数据类型
(2)使用 new分配的存储块,不能自动初始化为0,但是可以在使用new分配存储单元时显式初始化存储单元,初始化时可以用表达式或者表达式序列。但是这个功能不能用于数组,使用new时不能自动对数组进行初始化。
例如:
int * pt = new int (0);
int * ptArray = new int [10] (0);//错误