C++问题Point& Element(int n) { return points[n]; }

C++问题Point& Element(int n) { return points[n]; }

  

#include<iostream>
using namespace std;
class Point
{
public:
 Point()
 {
  X=Y=0;
  cout<<"DefaultConstructor called."<<endl;
 }

 Point(int xx,intyy)
 {
  X=xx;
  Y=yy;
  cout<<"Constructorcalled."<<endl;
 }

 ~Point()
 {
  cout<<"Destructorcalled."<<endl;
 }

 int GetX(){returnX;}
 int GetY(){return Y;}

 void Move(int x,inty)
 {
  X=x;
  Y=y;
 }

private:
 int X,Y;
};

class ArrayOfPoints
{
public:
 ArrayOfPoints(int n)
 {
  numberOfPoints=n;
  points=new 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 enterthe number of points:";
 cin>>number;
 ArrayOfPoints points(number);
 points.Element(0).Move(5,10);
 points.Element(1).Move(15,20);
}

其中的Point& Element(intn) 是什么意思呢?解释如下

这里的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操作,会影响points的单元0中的值。同时操作结束后不会调用析构函数。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值