我写一个简单的程序C++运算符重载显示奇怪的行为
#include <iostream>
using namespace std;
class Interval
{
public:
Interval(int m_input, int s_input)
{
minutes = m_input + s_input/60;
seconds = s_input % 60;
}
void Print() const
{
cout << minutes << " : " << seconds << endl;
}
int GetSeconds() const
{
return 60 * minutes + seconds;
}
Interval& operator+(const Interval& rhs)
{
minutes = this->minutes + rhs.minutes;
seconds = this->seconds + rhs.seconds;
return Interval(minutes, seconds);
}
Interval& operator-(const Interval& rhs)
{
int totalSeconds = this->GetSeconds() - rhs.GetSeconds();
return Interval(0, totalSeconds);
}
private:
int minutes;
int seconds;
};
int main()
{
Interval t1(7, 45);
t1.Print();
Interval t2(3, 75);
t2.Print();
Interval t3 = t1 + t2;
t3.Print();
Interval t4 = t3 - t1;
t4.Print();
return 0;
}
它的输出是 7:45 4:15 12:0 0:0 < --------- - 请注意这一个。
但要在我们的程序有些变化时,像
#include <iostream>
using namespace std;
class Interval
{
public:
Interval(int m_input, int s_input)
{
minutes = m_input + s_input/60;
seconds = s_input % 60;
}
void Print() const
{
cout << minutes << " : " << seconds << endl;
}
int GetSeconds() const
{
return 60 * minutes + seconds;
}
Interval& operator-(const Interval& rhs)
{
int totalSeconds = this->GetSeconds() - rhs.GetSeconds();
return Interval(0, totalSeconds);
}
private:
int minutes;
int seconds;
friend Interval& operator+(const Interval& lhs, const Interval& rhs);
};
Interval& operator+(const Interval& lhs, const Interval& rhs)
{
int minutes = lhs.minutes + rhs.minutes;
int seconds = lhs.seconds + rhs.seconds;
return Interval(minutes, seconds);
}
int main()
{
Interval t1(7, 45);
t1.Print();
Interval t2(3, 75);
t2.Print();
Interval t3 = t1 + t2;
t3.Print();
Interval t4 = t3 - t1;
t4.Print();
return 0;
}
它显示输出 7:45 4:15 12:0 4:15 --->看它这个就是我不”知道:(请搭乘飞机。
感谢您的帮助
维沙尔
你打算让我精神上'差异'这两个程序?你不能再进一步缩小问题吗? –