1

所以我想超载operator+。这是我到目前为止所拥有的,但它仍然无法正常工作。我将如何编写语法?头文件:

private:
        int month;
        int year;
        int day;

public:
    upDate();
    upDate(int M, int D, int Y);
    void setDate(int M, int D, int Y);
    int getMonth();
    int getDay();
    int getYear();
    int getDateCount();
    string getMonthName(); 
    friend upDate operator+(const upDate &lhs, const upDate &rhs);

我的 .cpp 文件

    upDate::upDate()
{
    month = 12;
    day = 12;
    year = 1999;
}
upDate::upDate(int M, int D, int Y)
{
    month = M;
    day = D;
    year = Y;
}//end constructor
void upDate::setDate(int M, int D, int Y)
{
    month = M;
    day = D;
    year = Y;
}//end setDate
int upDate::getMonth()
{
    return month;
}//end get Month
int upDate::getDay()
{
    return day;
}//end getDate
int upDate::getYear()
{
    return year;
}//end getYear

upDate operator+(const upDate &lhs, const upDate &rhs)

{
upDate temp;
temp.day = lhs.day + rhs.day; 
return (temp); 
}

在我的主要我有

upDate D1(10,10,2010);//CONSTRUCTOR
upDate D2(D1);//copy constructor
upDate D3 = D2 + 5;//add 5 days to D2
upDate D4 = 5 + D2;// add 5 days to D2

错误是我无法将对象添加到 int。我已经尝试过它的工作方式,但它只适用于 D3 = D2 + 5 而不是 D4。任何帮助,将不胜感激。

4

3 回答 3

4

你需要两个功能:

upDate operator+(int days, const upDate &rhs)
{
   ... add days to date ... 
}

upDate operator+(const upDate &lhs, int days)
{
   ...
}
于 2013-05-08T22:58:46.220 回答
0

你需要:

upDate operator+(const upDate &lhs, int days)
{
    ...
}

upDate operator+(int days, const upDate &rhs)
{
    ....
}

或者,您可以让构造函数采用单个 int 并让转换为您工作....但这有点奇怪,因为您要添加持续时间而您的类表示日期。但是你实际的 operator+ 无论如何都有这个问题 - 添加 2 个日期是什么意思?

编辑:看看 c++11 中的 chrono,它很好地区分时间点和持续时间

于 2013-05-08T23:02:51.500 回答
0

为了最大限度地减少编码冗余,以下是通常实现各种相关操作的方式:

struct Date
{
    Date & operator+=(int n)
    {
        // heavy lifting logic to "add n days"
        return *this;
    }

    Date operator+(int n) const
    {
        Date d(*this);
        d += n;
        return d;
    }

    // ...
};

Date operator(int n, Date const & rhs)
{ 
    return rhs + n;
}       
于 2013-05-09T08:17:30.823 回答