这个函数是如何调用的?

来源:百度知道 编辑:UC知道 时间:2024/06/04 11:06:44
帮我解释下吧,谢谢你了,我知道我很麻烦,但是没办法,呵呵,还是一次又一次的打扰你,谢谢你耐心的教我!感谢万分!
#include<iostream>
using namespace std;
class Point
{public:
Point()
{X=Y=0; cout<<"Default Constructor called."<<endl;}
Point(int xx,int yy)
{X=xx;Y=yy; cout<<"Constructor called."<<endl;}
~Point()
{cout<<"Destructor callde."<<endl;}
int GetX(){return X;}
int GetY(){return Y;}
void Move(int x,int y)
{X=x;Y=y;}
private:
int X,Y;
};
class ArrayOfPoints
{public:
ArrayOfPoints(int n)
{numberOfPoints=n;points=new Point[n];}/*Point[n]它是什么意思?*/
~ArrayOfPoints()
{cout<<"Deleting..."<<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 n

1.
points=new Point[n];}/*Point[n]它是什么意思?*/
new是给指针分配内存的一个操作符,其格式为
指针名=new 指针类型[单元数];
例如:
int *p;
p=new int[5];
这串代码就是给整型指针p分配5个单元(不是5个字节或5个字)。
同样,points=new Point[n];就是给Point型指针points分配n个单元。
这里的Point是类名,[n]是单元数。

2.
先说第三个
points.Element(0).Move(5,10);//这两行是什么意思?怎么是这么调用的啊?
类似于(不是完全等同,之所以这么写只是为了便于理解)
Point p;
p=points.Element(0);
p.Move(5,10);
写成这样就容易理解了吧,points.Element(0)返回了一个对象,后面再调用这个Point对象的Move方法。省去了中间结果保存过程。

3.
Point& Element(int n)/*这个函数也看不懂!*/
这里的Point是返回类型,Point&是按地址传送返回值。
如果有:
Point Element(int n)//把函数定义中的&去掉
……
Point p=points.Element(0);
p.Move(5,10);
那么p就是一个新建的对象,系统将points中0单元中存放的值复制给p,p是points的0单元的一个副本。你对p所做的操作不会影响points的0单元中的值。当操作完成时p会被析构。

Point& Element(int n)//把&再加回去
……
Point p=points.Element(0);
p.Move(5,10);
系统将Element(0)的返回值按地址赋给p,p的地址就是points的0单元的地址,p是points的0单元的一个别名。你对p所做的操作就是直接对points的0单元操作,