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

#include<iostream>
using namespace std;
class Point
{
public:
Point()
{
X=Y=0;
cout<<"默认的构造函数被调用..."<<endl;
}
Point(int x,int y)
{
X=x;
Y=y;
cout<<"带xy的构造函数被调用..."<<endl;
}
GetX()
{
cout<<X<<endl;
}
GetY()
{
cout<<Y<<endl;
}
void Move(int x,int y)
{
X=x;
Y=y;
cout<<X<<Y<<endl;
}
private:
int X,Y;
};

class ArrayOfPoint
{
public:
ArrayOfPoint(int n)
{
numberOfPoints=n;
points=new Point[n];
}
~ArrayOfPoint()
{
numberOfPoints=0;
delete[] points;
cout<<"析构结束..."<<endl;
}
Point& Element(int n)
{
return points[n];
}

private:
int numberOfPoints;
Point *points;
};

int main()
{
int num;
cout<<"请输入要动态创建的个数:"<<endl;
cin>>num;
ArrayOfPoint Point(num);
Point.Element(0).Move(5,4);
Point.Element(1).Move(65,99);

return 0;
}

其中的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操作,会影响points的单元0中的值。同时操作结束后不会调用析构函数。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-12
Element是class ArrayOfPoint的成员函数,返回值类型为Point&型(对Point类的引用)
第2个回答  2011-09-12
&在这里是引用的意思,引用作为返回值时,不生成副本

C++求助Point& Element(int n) { return points[n]; }
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中的值。同时操作结束后不会调用析构函数。

类名& 函数名 这是什么意思
Point & Element(int n)这个是函数,其中Element是函数名,Point &表示这个函数的返回值是Point引用 这个问题清楚了,下面的也就明白了,points.Element(0)返回一个Point对象的引用,当然可以调用move函数了

points[i] = v.points[i]; 这一段是什么意思?
这一段的意思是对points"数组"里的每个元素对象进行赋值,不是两个数组直接赋值。实际上在C\/C++语言里数组是不允许直接通过等号=就进行直接赋值的,但是如果数组是在结构体或者对象class里面,可以通过整个结构体或对象进行整体赋值。比如:int nums[10];int nums2[10];nums2 = nums 这样直接数组赋值...

三张牌的游戏,C\/C++实现
return cardSuit == a.cardSuit;} bool CompareFaceValue(const Card& a) const{ return cardFaceValue == a.cardFaceValue;} bool FollowedBy(const Card& a) const{ return a.cardFaceValue - cardFaceValue == 1;} inline int Point() const { if(cardFaceValue==ace)return 1;else re...

meshlab如何显示带颜色的ply文件?
C++实现:<\/为了生成彩色点云的PLY文件,C++代码如下:```cppvoid generateColoredPLY(const std::string& filename, const std::string& savedir, cv::Mat src, cv::Mat depth) { \/\/ ...省略相机参数部分... \/\/ 打开并写入PLY文件 std::ofstream of(filename.c_str()); of...

跪求c++计算24点的程序,要退学啦,求求啦..5555,帮帮小妹
\/\/ int heigth( ) { return n; } \/\/ 查询栈的高度};const char opr[ ] = "+-*\/";int a[N]; \/\/ 输入的4个数STACK<float, N> opnstk; \/\/ 操作数栈int b[N], K = 0; \/\/ a[]的备份\/用于生产排列的工作区void gen(int n, int m) \/\/ 生成n个数中取m个数的全排列。m = n时即...

关于C++对象的深复制运行哪里出错了?
你好!assert(index>0 && index<size);应该改为 assert(index>=0 && index<size);范围是0到size-1。

C语言新手求助---
int b[3][4] b为指针,指向b[0]或b[0][0]b[0]为指针,指向b[0][0]b[1]为指针,指向b[1][0]b[2]为指针,指向b[2][0]int *pa[] 指针数组,也可写成 int *(pa[])int (*pa)[] 数组指针 int *pf() 返回指针的函数,也可写成int *(pf())int (*pf)() 指向...

数组赋值给指针后,取不到应取的值,求解?
第一,数组不可以动态定义的,CreateArray函数中的else分支应该会报错,甚至可能会编译不通过 第二,数组是在CreateArray函数内定义的,数组的数据存放在栈空间,当函数执行完毕后,定义的数组数据也会被释放了(如果栈空间被初始化了,自然就读取不到数据了)你可以把数组定义为全局变量,或者使用malloc和...

c++文件操作的文件保护方式选择项
filebuf::openprot; \/\/默认的兼容共享方式filebuf::sh_none;  \/\/独占,不共享filebuf::sh_read;  \/\/读共享filebuf::sh_write; \/\/写共享以上方式仅旧版VC中支持,新版VC在share.h中为Win32项目定义了如下方式 _SH_DENYRW 0x10 \/* deny read\/write mode*\/_SH_DENYWR 0x20 \/...

相似回答