为什么使用&?返回一个具有功能的对象? 例如,让我们看看以下类和函数:
class Point
{
public:
Point(int x, int y);
int getX() const;
int getY() const;
void setX(int x);
void setY(int y);
void print() const;
private:
int x, y;
};
class Circle
{
public:
Circle(int x, int y, int r, int color);
int getColor() const;
void setColor(int color);
bool contains(const Point &p) const;
void print() const;
private:
const Point center;
int radius, color;
};
class Collection
{
public:
Collection(int radius, int width, int height, int color);
~Collection();
Circle& getCircleAt(const Point &p);
void print() const;
private:
int count;
Circle **circles;
};
Circle& Collection::getCircleAt(const Point &p)
{
for (int i = 0; i < count; i++)
if (circles[i]->contains(p))
return *(circles)[i];
}
上面的函数返回一个圆圈。 在函数getCirclet中,为什么是符号&amp;有必要的 ?为什么我不能省略它?
答案 0 :(得分:1)
在你的功能中
Circle& Collection::getCircleAt(const Point &p)
返回类型Circle&
表示将返回对类型为Circle
的on对象的引用。如果你声明了你的功能
Circle Collection::getCircleAt(const Point &p)
使用相同的主体,如果有可用的副本构造函数,则会返回该对象的副本。这意味着在第一种情况下,如果修改返回的对象,这将修改Collection
中包含的对象,而在第二种情况下,仅修改副本。
请注意,引用不能是NULL
,因此如果使用不在Point
内的Circle
调用特定函数,则会出现问题。正如你现在所做的那样,什么都不做,不是一种选择。