C ++ Operator Overload - вызов функции для получения значения внутри перегрузки - PullRequest
0 голосов
/ 03 сентября 2011

Есть ли способ вызвать перегрузку оператора в C ++ и вызвать функцию параметра во время сравнения?

Например:

class MyClass{
  private:
    int x;
    int y;
  public:
    MyClass(int x, int y);
    int getX();
    int getY();
    bool operator < (const MyClass &other) const {
        return (x < other.getX()); //this does not work!
        // this would work, though, if x was public:
        // return x < other.x;
    }
};

По сути, где я вызываю other.getX(), как я могу заставить его возвращать свое собственное значение x через функцию для сравнения с локальной, вместо того, чтобы делать x общедоступным?Есть ли способ сделать это?

Спасибо за вашу помощь!

Ответы [ 4 ]

9 голосов
/ 03 сентября 2011

Вам нужно сделать функции const, так как вы используете ссылку на const MyClass:

int getX() const;

О правильном использовании const (правильность const) вы можете прочитать по адресу:

Кроме того, я бы рекомендовал вам сделать оператор <свободной функцией. </p>

6 голосов
/ 03 сентября 2011

Это не работает, потому что getX() не является функцией const. Измените его на:

int getX() const;

и это будет работать. Вы также можете удалить const в аргументе оператора, но это обычно не считается хорошим.

1 голос
/ 03 сентября 2011

Доступ для каждого класса, а не для каждого экземпляра.Вы можете получить доступ к other.x без проблем.

Кроме этого, вы можете вернуть константную ссылку, но это не повлияет на производительность и выглядит просто странно.

bool operator < (const MyClass &other) const
{
    return x < other.x;
}
0 голосов
/ 03 сентября 2011

Вы можете объявить оператора другом класса.

Редактировать: Мне кажется, у меня на глазах помидоры, ваш оператор является членом класса и уже имеет личный доступ. Вы можете подружиться с ним, однако это было определено вне области видимости класса.

...