Как реализовать операторную функцию равенства для прокси-класса - PullRequest
0 голосов
/ 13 ноября 2011

У меня есть класс Date, который я определил, который моделирует дату, в которой в качестве элементов данных указан день, месяц и год. Теперь для сравнения дат я создал оператор равенства

bool Date::operator==(const Date&rhs)
{
    return (rhs.day()==_day && _month==rhs.month() &&_year==rhs.year());
}

Теперь, как мне вызвать оператор равенства класса Date из класса Proxy ... ??


Это отредактированная часть вопроса

Это класс даты

//Main Date Class
enum Month 
{
    January = 1, 
    February,
    March, 
    April,
    May,
    June,
    July, 
    August, 
    September,
    October,
    November, 
    December
};
class Date
{
public: 

    //Default Constructor
    Date();
    // return the day of the month
    int day() const
    {return _day;}
    // return the month of the year
    Month month() const
    {return static_cast<Month>(_month);}
    // return the year
    int year() const
    {return _year;}

    bool Date::operator==(const Date&rhs)
    {
    return (rhs.day()==_day && _month==rhs.month() &&_year==rhs.year());
    }

    ~Date();

private:
    int _day;
    int _month;
    int _year;

}

//--END OF DATE main class

Это прокси-класс, который я заменю на класс Date

//--Proxy Class for Date Class
class DateProxy
{
public: 

    //Default Constructor
    DateProxy():_datePtr(new Date)
    {}
    // return the day of the month
    int day() const
    {return _datePtr->day();}
    // return the month of the year
    Month month() const
    {return static_cast<Month>(_datePtr->month());}
    // return the year
    int year() const
    {return _datePtr->year();}

    bool DateProxy::operator==(DateProxy&rhs)
    {
        //what do I return here??
    }

    ~DateProxy();

private:
    scoped_ptr<Date> _datePtr;

}

//--End of Proxy Class(for Date Class)

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

Ответы [ 3 ]

3 голосов
/ 13 ноября 2011

Ну, просто используйте оператор:

Date d1, d2;
if(d1 == d2)
    // ...

Обратите внимание, как operator== принимает ссылку.Это означает, что если у вас есть указатель (или объект, действующий как указатель, такой как scoped_ptr или shared_ptr), то вы должны сначала разыменовать его:Прочитайте это: Перегрузка оператора .

2 голосов
/ 13 ноября 2011
return *_datePtr == *_rhs.datePtr;
0 голосов
/ 13 ноября 2011

Он должен работать как любой другой оператор равенства, если он реализован правильно.

Попробуйте:

Date a = //date construction;
Data b = //date construction;

if(a == b)
    printf("a and b are equivalent");
else
    printf("a and b are not equivalent");
...