我刚开始使用运算符重载并试图理解这个概念。所以我想重载运算符+。在我的头文件中,我有
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创建了一个Object,我想将它添加到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;
}
答案 0 :(得分:3)
您需要定义另一个operator +的重载,它将int作为参数:
upDate upDate::operator+(int days) const{
upDate temp(*this);
temp.day += days;
return temp;
}
编辑:正如Dolphiniac所说,您应该定义一个复制构造函数来正确初始化temp
。
答案 1 :(得分:3)
制作一个复制构造函数,以实际制作this
的副本。您的函数返回的对象缺少通常位于this
实例中的字段。
答案 2 :(得分:1)
改为重载compound plus
运算符。
upDate& upDate::operator+=(const int& rhs)
{
this->day += rhs;
return *this;
}
您可以执行类似
的操作D2 += 5;