Перегрузка встроенного оператора C ++, ссылка на текущий объект - PullRequest
1 голос
/ 29 января 2020

Так что я только недавно начал использовать «Перегрузку встроенного оператора» или как там это называется ...... В любом случае !! Как я могу ссылаться на объект, из которого я вызываю функцию. Вот код интереса:

class PlayingCard
{
private:
    enum Suit {diamond, hearts, spades, clubs};
    Suit suit;
    enum Color {red, black};
    Color color;
    int value = -1;
public:
    //Inline stuff

    //make card the same as c1
    inline operator=(const PlayingCard &c1) {
        suit = c1.suit;
        color = c1.color;
        value = c1.value;
        return true;
    }

    inline operator%(PlayingCard &c1) {
        PlayingCard copy1;
        copy1 = c1;
        c1 = this;
        this = copy1;
        return true;
    }

Как видите, у меня есть класс PlayingCard. Первый встроенный оператор работает так же, как и должен. Если у меня есть 2 PlayingCard: c1 и c2 с определенными частными значениями c2, то c1 = c2 делает частные значения c1 равными c2.

Вторая встроенная функция предназначена для обмена значениями между c1 и c2 путем выполнения c1% c2. Как показано в коде, я надеялся использовать «this» для ссылки на c1, но это не работает. Есть ли способ обратиться к c1 в этой функции?

Я знаю, что есть обходные пути, которые я буду использовать в это время, но я бы предпочел использовать свой оригинальный метод, и я чувствую, что он будет полезен и для будущего использования.

Ответы [ 2 ]

0 голосов
/ 29 января 2020

В C ++ нет такого оператора, как <-> (который вы позже изменили на % в обновленном вопросе). Кажется, вы хотите определить функцию-член swap. Но в любом случае вы не можете менять постоянные объекты. Поэтому параметр функции должен быть непостоянной ссылкой.

Функции-члены, определенные в определениях классов по умолчанию, имеют встроенный спецификатор функции. Поэтому нет необходимости явно указывать его.

Оператор присваивания должен возвращать ссылку на назначенный объект.

Здесь вы находитесь.

PlayingCard & operator =( const PlayingCard &c1 ) 
{
    if ( this != &c1 )
    {
        suit  = c1.suit;
        color = c1.color;
        value = c1.value;
    }

    return *this;
}

void swap( PlayingCard &c1 ) 
{
    if ( this != &c1 )
    {
        std::swap( suit, c1.suit );
        std::swap( color, c1.color );
        std::swap( value, c1.value );
    }
}
0 голосов
/ 29 января 2020

Перегрузка операторов в C ++ позволяет вам выполнять только те операции, которые предоставляет язык. Вы не можете придумать свое. Так что вы не можете сделать один для <->

(может быть какой-то запутанный способ собрать что-то из отдельных операторов <, - и >. Но даже если это возможно это, вероятно, не стоило бы усилий и, скорее всего, допускало бы непреднамеренное и странное использование.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...