1

我不知道为什么这段代码应该工作,但如果我想将两个对象添加在一起,请告诉我该怎么做。请。当您尝试回答时,请更加具体

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

#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

4 回答 4

5

您的加法运算符正在使用 unitinitialized memberInputsec和variables。它应该如下所示:InputmintInputhours

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在 header 中有一些东西<ctime>。有一个班级叫time,并且using namespace std正在自找麻烦。如果可能的话,你应该避免两者(避免第二个绝对是可能的)。

于 2013-06-24T12:02:37.813 回答
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);
}
于 2013-06-24T12:07:22.010 回答
0

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

此外,试试这个:

time operator+ (time Inputobj)
{
   time blah (sec+Inputobj.sec, mint+Inputobj.mint, hours+Inputobj.hours);
   return blah;
}
于 2013-06-24T12:04:06.917 回答
0

您的错误是您的 publics 成员与参数构造函数同名,它们是未初始化的。试试这个 :

#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();
}
于 2013-06-24T12:07:54.617 回答