按功能返回对象而不使用& (C ++)

时间:2017-11-28 13:43:58

标签: c++ function class

为什么使用&?返回一个具有功能的对象? 例如,让我们看看以下类和函数:

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;有必要的 ?为什么我不能省略它?

1 个答案:

答案 0 :(得分:1)

在你的功能中

Circle& Collection::getCircleAt(const Point &p)

返回类型Circle&表示将返回对类型为Circle的on对象的引用。如果你声明了你的功能

Circle Collection::getCircleAt(const Point &p)

使用相同的主体,如果有可用的副本构造函数,则会返回该对象的副本。这意味着在第一种情况下,如果修改返回的对象,这将修改Collection中包含的对象,而在第二种情况下,仅修改副本。

请注意,引用不能是NULL,因此如果使用不在Point内的Circle调用特定函数,则会出现问题。正如你现在所做的那样,什么都不做,不是一种选择。