2011-11-13 16 views
0

私はクラスを定義しました。そのモデルは日付をモデル化しています。データメンバとして日、月、年があります。今度は、等価演算子を作成した日付を比較するプロキシクラスの等価演算子関数の実装方法

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

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


これはこれはこれは私が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) 
の代わりになるプロキシクラスである

//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クラスで質問

の編集した部分であります

今私が持っている問題は、プロキシクラスで等価演算子関数を実装している、私はホップこれは質問を明確にします。 operator==参照を取る方法

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

お知らせ:

+3

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

答えて

2
return *_datePtr == *_rhs.datePtr; 
3

まあ、ちょうど演算子を使用します。ところで

*_datePtr == *rhs._datePtr; 

は、あなたがこれを読んでください:それはあなたがポインタを持っている(またはオブジェクトがポインタのようなscoped_ptrshared_ptrような演技)した場合は、最初にそれを間接参照する必要があり、意味Operator overloading

0

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

してみてください。プロキシクラス

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"); 
関連する問題