2013-05-08 121 views
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。任何幫助,將不勝感激。

+0

2月12日加5月30日是什麼? – 2013-05-08 22:57:51

+0

4月1日@ @ KerrekSB – 2013-05-08 23:28:01

+0

@Kerrek:假設我們的約會系統在接下來的138億年左右保持一致,大約在今年1月10日13797295634. – 2013-05-08 23:35:47

回答

4

需要兩個功能:

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

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

你在哪一個操作符上重載第二個? – 0x499602D2 2013-05-08 23:12:03

+0

解決'd2 + 5'的問題 - 或者編譯器會發現'd2 + 5'和'5 + d2'是一樣的 - 我不記得上次我嘗試過了,但我想我可以誤解了它。我承認我在客戶運營方面做得並不多。 – 2013-05-08 23:15:21

+0

啊,對不起,現在我明白你的意思了 - 有一個+失蹤......;) – 2013-05-08 23:17:47

0

您需要:

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

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

或者你可以有一個構造函數以單個int,讓轉換的工作你......但這有點奇怪,因爲你增加了一個持續時間,而你的班級代表了一個日期。但是,您的實際運營商+無論如何都存在此問題 - 添加兩個日期意味着什麼?

編輯:看看在C++ 11時辰,它使時間點和持續時間之間的良好區分時間

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; 
}