Time operator + (Time &);为什么没有形参声明
时间: 2024-03-12 11:48:21 浏览: 51
这个重载运算符 `+` 没有在形参中声明参数的类型和名字,是因为参数的类型和名字已经在重载运算符的声明中定义了。具体来说,这个重载运算符的声明应该是这样的:
```cpp
Time operator+(Time& t);
```
这里的参数 `t` 是一个 Time 类型的非常量引用,表示传入的参数是一个 Time 对象,可以在函数中修改它的值。
在重载运算符的定义中,我们不需要再次声明参数的类型和名字,因为编译器已经知道参数的类型和名字是什么。我们只需要在函数体中使用这个参数,就可以实现相应的功能了。例如,实现两个 Time 对象的相加操作,可以这样写:
```cpp
Time Time::operator+(Time& t) {
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}
```
其中,`t` 就是传入的参数,我们可以直接在函数体中使用它的成员变量。因此,在函数定义中不需要再次声明参数的类型和名字。
相关问题
Time operator + (Time &);为什么没有常量
这个重载运算符 `+` 没有加 const 关键字是因为它需要修改调用对象的成员变量。具体来说,当我们使用 `t1 + t2` 这样的语句时,编译器会将它转换成 `t1.operator+(t2)` 的形式,其中 `t1` 是调用对象,它的成员变量 `hours` 和 `minutes` 都需要修改。
如果我们将 `+` 函数声明为常量成员函数,就不能修改调用对象的成员变量了,这样就无法实现加法操作。因此,在这个函数中加上 const 关键字是不合适的。
不过需要注意的是,如果我们想要对常量对象进行加法操作,那么就需要另外再写一个 const 成员函数或者普通函数,例如:
```cpp
Time operator+(const Time& t) const; // 常量成员函数,用于对普通对象进行加法操作
Time operator+(const Time& t); // 非常量成员函数,用于对常量对象进行加法操作
```
这样,我们就可以分别对普通对象和常量对象进行加法操作了。
#include <iostream> #include <iomanip> using namespace std; class Time{ int hour, minute, second; public: Time(int h=0, int m=0, int s=0);//已实现 Time& operator++(); Time& operator--(); Time operator++(int); Time operator--(int); friend istream& operator>>(istream& in, Time& t);//已实现 friend ostream& operator<<(ostream& out, const Time& t);//已实现 };int main() { Time t; cin >> t; t++; cout << t << endl; --t; cout << t << endl; ++t; cout << t << endl; t--; cout << t << endl; return 0; } /* 请在这里填写答案,类设计及部分接口已有系统给出并实现,你只需要实现++和--运算符的重载 */
可以参考以下代码实现++和--运算符的重载:
```c++
#include <iostream>
#include <iomanip>
using namespace std;
class Time{
int hour, minute, second;
public:
Time(int h=0, int m=0, int s=0);
Time& operator++(); // ++t
Time& operator--(); // --t
Time operator++(int); // t++
Time operator--(int); // t--
friend istream& operator>>(istream& in, Time& t);
friend ostream& operator<<(ostream& out, const Time& t);
};
Time::Time(int h, int m, int s) {
hour = h;
minute = m;
second = s;
}
Time& Time::operator++() {
second++;
if (second >= 60) {
second = 0;
minute++;
if (minute >= 60) {
minute = 0;
hour++;
if (hour >= 24) {
hour = 0;
}
}
}
return *this;
}
Time& Time::operator--() {
second--;
if (second < 0) {
second = 59;
minute--;
if (minute < 0) {
minute = 59;
hour--;
if (hour < 0) {
hour = 23;
}
}
}
return *this;
}
Time Time::operator++(int) {
Time temp(*this);
operator++();
return temp;
}
Time Time::operator--(int) {
Time temp(*this);
operator--();
return temp;
}
istream& operator>>(istream& in, Time& t) {
in >> t.hour >> t.minute >> t.second;
return in;
}
ostream& operator<<(ostream& out, const Time& t) {
out << setfill('0') << setw(2) << t.hour << ":" << setw(2) << t.minute << ":" << setw(2) << t.second;
return out;
}
int main() {
Time t;
cin >> t;
t++;
cout << t << endl;
--t;
cout << t << endl;
++t;
cout << t << endl;
t--;
cout << t << endl;
return 0;
}
```
阅读全文