1

我刚刚开始使用运算符重载并试图理解这个概念。所以我想重载运算符+。在我的头文件中,我有

   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();
    upDate operator+(const upDate& rhs)const;

    private:
        int month;
        int year;
        int day;

所以基本上我主要从 upDate 创建了一个对象,我想将它添加到一个 int 中。

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

我将如何编写超载,以便将 D2 增加 5 天?我有这个,但我很确定语法不正确并且仍然出现错误。任何帮助,将不胜感激

   upDate upDate::operator+(const upDate& rhs)const

  {

    upDate temp;
    temp.day = this->day+ rhs.day;
    return temp;
 }
4

3 回答 3

4

您将需要定义另一个以 int 作为参数的 operator+ 重载:

  upDate upDate::operator+(int days) const{    
    upDate temp(*this);
    temp.day += days;
    return temp;
 }

编辑:正如 Dolphiniac 所指出的,您应该定义一个复制构造函数来temp正确初始化。

于 2013-05-08T20:24:35.887 回答
3

创建一个复制构造函数来实际复制this. 您的函数正在返回一个缺少通常在this实例中的字段的对象。

于 2013-05-08T20:25:05.603 回答
1

compound plus而是重载运算符。

upDate& upDate::operator+=(const int& rhs)
{
    this->day += rhs;
    return *this;
}

你可以做类似的事情

D2 += 5;
于 2013-05-08T20:26:05.197 回答