注册 登录
编程论坛 C++教室

函数类型标识符后加“&”代表什么?

发布于 2010-06-03 13:34, 3453 次点击
请看一下程序段,我用红色标出了问题所在
#include <iostream>
using namespace std;
class Point
{
    //。。。。。
}
class ArrayOfPoints
{
    public:
    ArrayOfPoints(int n)
    {numberOfPoints=n;points=new Point[n];}
    ~ ArrayOfPoints()
    {cout<<"Deleteting..."<<endl;
     numberOfPoints=0;delete[]points;
    }
    Point& Element(int n)  //...........................................................这一行是问题所在!
    {return points[n];}
    private:
    Point *points;
    int numberOfPoints;
};

int main()
{
    int number;
    cout<<"Please enter the number of points:";
    cin>>number;
    ArrayOfPoint points(number);
    points.Element(0).Move(5,10);
    points.Element(1).Move(15,20);
}
C++里面函数类型标识符一般都是int ,float,double,或者是自己定义的类,但是在类型标识符后还有加 “&”那代表什么啊?谁知道?
Point& Element(int n)
{return points[n];}
其中Point是一个类名,但是Point后面加了个“&”,那代表什么啊?
7 回复
#2
lijm19892010-06-03 13:42
表示的是返回类型是 Point 类对象的引用。
你想想如果是加一个 '*'的话,不就是表示一个返回一个指针?
 一样的道理。。。
#3
apull2010-06-03 13:55
& 表示引用类型。。
* 表示指针类型。
#4
南国利剑2010-06-03 16:58
这是说函数的返回值是对象的引用。
返回值是引用,可以充当左值。
这是返回引用的重要特点。
如果还不理解的话,建议去看看钱能的书。里头说的很详细。
#5
gaoce2272010-06-03 17:39
    属于对象成员的引用。在程序中,访问对象成员有三种方法。其中之一就是LZ提到的,这叫做“通过对象的引用变量来访问对象中的成员”。
    如果为一个对象定义了一个引用变量,它们是共占同一段存储单元的,实际上它们是同一个对象,只是用不同的名字表示而已。因此完全可以通过引用变量来访问对象中成员,其概念和方法与通过对象名来引用对象中成员是相同的。
   例如,如果已声明了Time类,并有一下定义语句:
  Time  t1;            //定义对象t1
  Time  &t2=t1;        //定义Time类引用变量t2,并使之初始化为t1
  cout<<t2.hour;       //输出t1中的成员hour
由于t2和t1共占同一段存储单元(即t2是t1的别名),因此t2.hour就是t1.hour。
具体见谭浩强C++第249页。
#6
2010-06-06 22:58
Point& Element(int n)   返回一个引用,可以作为左值。不然只能是右值。4楼很正确了。
#7
Isilendil2010-06-06 23:24
返回引用时返回一个左值,这样在调用运算符重载函数时,可以实现运算符的连续操作
同时,返回引用类型还有一个重要特性
返回非引用类型时要在函数调用处创建临时对象,然后将函数返回值至复制给临时对象
而返回引用类型时,没有复制返回值,返回的是对象本身
如果返回的是自定义类型对象的引用,那么可以极大地减小程序运行的开销。
#8
xin3109232010-06-06 23:33
同意楼上所有的说法
1