我不知道为什么这段代码应该有效,但是如果我想添加两个对象,请告诉我该怎么做 一起。请。当你试图回答时请更专注于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();
}
代码工作正常,但它给了我可怕的输出。 我的错误在哪里?
答案 0 :(得分:5)
您的加法运算符使用的是单位初始化成员Inputsec
,Inputmint
和Inputhours
变量。它应该是这样的:
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();
}