Оператор bool перегрузки C ++ - PullRequest
0 голосов
/ 06 мая 2020

Я новичок в операторах перегрузки. Я пытаюсь перегрузить оператор bool. В настоящее время я использую оператор bool в качестве функции доступа к классу Date. Есть ли предложения, как бы go преобразовать функцию bool EqualTo для перегрузки оператора? Спасибо!

class Date {
private:
    int mn;        //month component of a date
    int dy;        //day component of a date
    int yr;        //year comonent of a date

public:
    //constructors
    Date() : mn(0), dy(0), yr(0)
    {}
    Date(int m, int d, int y) : mn(m), dy(d), yr(y)
    {}

    //access functions

    int getDay() const
    {
        return dy;
    }
    int getMonth() const
    {
        return mn;
    }
    int getYear() const
    {
        return yr;
    }

    bool EqualTo(Date d) const;

};

bool Date::EqualTo(Date d) const
{
    return (mn == d.mn) && (dy == d.dy) && (yr == d.yr);
}

1 Ответ

5 голосов
/ 06 мая 2020

Реализация вашей функции EqualTo предполагает, что вы должны перегрузить operator==, чтобы проверить, равны ли 2 Date объекта. Все, что вам нужно сделать, это переименовать EqualTo в operator==. И вы должны принимать аргументы const&.

bool Date::operator==(Date const &d) const
{
    return (mn == d.mn) && (dy == d.dy) && (yr == d.yr);
}

Внутри класса Date объявление будет выглядеть так:

bool operator==(Date const &d) const;

Другой способ сделать это - сделать оператор - друг класса:

friend bool operator==(Date const &a, Date const &b) const
{
    return (a.mn == b.mn) && (a.dy == b.dy) && (a.yr == b.yr);
}

Обратите внимание, что в этом случае это не функция-член. В этом случае вы можете определить его внутри класса (где вам нужно ключевое слово friend).

Если вы определяете функцию friend вне класса, вам все равно нужно объявить ее как friend внутри класс. Однако определение больше не может содержать ключевое слово friend.

Я бы также рекомендовал называть ваши переменные более четко, например, month, day и year.

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