プロキシクラスの等価演算子関数を実装する方法

私はクラスのDateを定義しています。それはデータメンバとして日、月、年があります。今、私が作成した日付を比較するために、等価演算子

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

では、Dateクラスの等価演算子をProxyクラスからどのように呼び出すのですか?


これは質問の編集部分です

これはDateクラスです

//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);}
   //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(_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 _datePtr;

}

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

今私が持っている問題は、プロキシクラスで等価演算子関数を実装することです、私はこれが質問を明確にすることを願っています。

0
どのプロキシクラスですか?私はあなたの質問に何も表示されません...とにかく、あなたのプロキシクラスは、必ず Date クラスへのポインタまたは参照を保持していますか?これらの参照日付を比較する際の問題はどこにありますか?
追加された 著者 celtschk,

3 答え

さて、演算子を使用してください:

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

演算子== がどのように参照を取得するかに注目してください。つまり、ポインタ(または scoped_ptrshared_ptr などのポインタのようなオブジェクト)を持っている場合は、まず逆参照する必要があります。

*_datePtr == *rhs._datePtr;

ところで、これを読んでください:オペレータのオーバーロード

3
追加された
return *_datePtr == *_rhs.datePtr;
2
追加された

それが正しく実装されている場合、他の等価演算子のように動作するはずです。

試してください:

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");
0
追加された