运算符重载添加两个对象错误

时间:2013-06-24 11:57:42

标签: c++ object operator-overloading

我不知道为什么这段代码应该有效,但是如果我想添加两个对象,请告诉我该怎么做 一起。请。当你试图回答时请更专注于noob

抱歉我的英语不好,我是印度人,这是我的代码。

#include<iostream>

using namespace std;

class time
{
private:
    int sec;
    int mint;
    int hours;
public:
    int Inputsec;
    int Inputmint;
    int Inputhours;
time(int Inputsec, int Inputmint, int Inputhours):sec(Inputsec), mint(Inputmint), hours(Inputhours){};
time operator+(time Inputobj)
{
    time blah (sec+Inputsec,mint+Inputmint,hours+Inputhours);
    return blah;
}

void DisplayCurrentTime()
{
    cout << "The Current Time Is"<<endl<< hours<<" hours"<<endl<<mint<<"minutes"<<endl<<sec<<"seconds"<<endl;
}
};

int main()
{
time now(11,13,3);
time after(13,31,11);
time then(now+after);
then.DisplayCurrentTime();
}

代码工作正常,但它给了我可怕的输出。 我的错误在哪里?

4 个答案:

答案 0 :(得分:5)

您的加法运算符使用的是单位初始化成员InputsecInputmintInputhours变量。它应该是这样的:

time operator+(time Inputobj)
{
    return time(sec+InputObj.sec, mint+InputObj.mint, hours+InputObj.hours);
}

time operator+(time Inputobj)
{
    InputObj.sec += sec;
    InputObj.mint += mint;
    InputObj.hours += hours;
    return InputObj;
}

或者,更好的是,实现time& operator+=(const time& rhs);并在非成员加法运算符中使用它:

time operator+(time lhs, const time& rhs)
{
  return lhs += rhs;
}

你有两组代表同一件事的成员变量。你不需要这种重复。

最后一句话:标题std::time中有一个名为<ctime>的内容。有一个名为time的课程和using namespace std正在寻找麻烦。如果可能的话,你应该避免两者(避免第二种是绝对可能的)。

答案 1 :(得分:1)

您应该重写operator+ 至少,如下所示:

time operator+(time Inputobj)
{
    time blah time(sec+InputObj.sec, mint+InputObj.mint, hours+InputObj.hours);
    return blah;
}

我认为您应该使用%运算符来获取正确的时间结果:

time operator+(time Inputobj){
    int s = (sec+InputObj.sec) % 60;
    int m = (sec+InputObj.sec) / 60 + (mint+InputObj.mint) % 60;
    int h = (mint+InputObj.mint) / 60 + (hours+InputObj.hours) % 24;
    return time(s,m,h);
}

答案 2 :(得分:0)

您的运算符重载函数正在使用未初始化的变量。在构造函数中初始化变量inputsec, inputmint, Inputhours

此外,试试这个:

time operator+ (time Inputobj)
{
   time blah (sec+Inputobj.sec, mint+Inputobj.mint, hours+Inputobj.hours);
   return blah;
}

答案 3 :(得分:0)

您的错误是您的公共成员,其名称与参数构造函数相同,它们是一致的。 试试这个:

#include <iostream>
using namespace std;

class time
{
private:
    int sec;
    int mint;
    int hours;
public:
time(int Inputsec, int Inputmint, int Inputhours):sec(Inputsec), mint(Inputmint), hours(Inputhours)
{
};

time operator+(time Inputobj)
{
    time blah (sec+Inputobj.sec, mint+Inputobj.mint, hours+Inputobj.hours);
    return blah;
}

void DisplayCurrentTime()
{
    cout << "The Current Time Is"<<endl<< hours<<" hours"<<endl<<mint<<"minutes"<<endl<<sec<<"seconds"<<endl;
}
};

int main()
{
time now(11,13,3);
time after(13,31,11);
time then(now+after);
then.DisplayCurrentTime();
}