引用:引入对象的一个同义词,不会产生新的对象!
例如:
point p1(m,n);
point &p2=p1;//p2为p1的同义词,改变p2的同时也会改变p1,但是编译器并没有给p2单独分配内存,他和p1是共用一块内存的!
引用和const一样,必须马上初始化~
例如如下类:
class point
{
public:
point(int m);//构造函数
private:
int x;
const int y;
int &z;
}
point::point(int m)
{
x=m;
y=m;//error
z=m;//error
}
对于类的成员中有引用或者const类型时,必须在初始化列表中进行初始化,而不能在函数体内赋值。
上述构造函数应该这样初始化:
point::point(int m)
:x(m),y(m),z(m)
{}//OK
引用的应用:
1.传递可变参数
传统的c中,函数在调用时参数是通过值来传递的,这就是说函数的参数不具备返回值的能力。在c++中,可以通过引用来将变化的参数值传回。
例如:
void max(int x,int y,int z)
{
z=x+y;
}
如果我们的函数声明为void,但是又希望得到z的值,这时我们就可以用引用,这样定义:
void max(int x,int y ,int &z)
{
z=x+y;
}
这样在main()中可以这样写
int m;
max(3,10,m);
这样z就是m的引用,因为他们共用一块内存,因此z改变的时候m也会改变。
2.传递较大的对象时,可以使用引用来减少实参向形参传递时复制的麻烦。
3.引用返回值:
如果一个函数返回了引用,那么该函数的调用也可以被赋值。这里有一函数,它拥有两个引用参数并返回一个双精度数的引用:
double &max(double &d1,double &d2)
{ return d1>d2?d1:d2; }
max()函数返回一个对双精度数的引用,那么我们就可以用max() 来对其中较大的双精度数加1:
max(x,y)+=1.0;