如何为代理类实现相等运算符函数

时间:2011-11-13 00:54:05

标签: c++ proxy-classes

我有一个我定义的类Date,它为日期建模,它有一天,一个月和一年作为数据成员。现在比较我创建相等运算符的日期

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

现在如何从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>(_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 个答案:

答案 0 :(得分:3)

好吧,只需使用运营商:

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

注意operator==如何引用。这意味着,如果你有一个指针(或一个像scoped_ptrshared_ptr这样的指针的对象),那么你必须首先取消引用它:

*_datePtr == *rhs._datePtr;

顺便说一句,您应该阅读:Operator overloading

答案 1 :(得分:2)

return *_datePtr == *_rhs.datePtr;

答案 2 :(得分: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");