Time operator + (Time &);为什么没有形参声明
时间: 2024-03-12 18:48:21 浏览: 22
这个重载运算符 `+` 没有在形参中声明参数的类型和名字,是因为参数的类型和名字已经在重载运算符的声明中定义了。具体来说,这个重载运算符的声明应该是这样的:
```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); // 非常量成员函数,用于对常量对象进行加法操作
```
这样,我们就可以分别对普通对象和常量对象进行加法操作了。
Time operator + (Time &);为什么没有常量的声明
这个重载运算符 `+` 没有在声明中加上 const 关键字,是因为它需要修改调用对象的成员变量。具体来说,当我们使用 `t1 + t2` 这样的语句时,编译器会将它转换成 `t1.operator+(t2)` 的形式,其中 `t1` 是调用对象,它的成员变量 `hours` 和 `minutes` 都需要修改。
如果我们在声明中加上 const 关键字,就意味着这个函数不能修改调用对象的成员变量,因此会编译错误。所以,在这个函数的声明中是不需要加上 const 关键字的。
需要注意的是,如果我们希望在常量对象上也能够调用这个重载运算符 `+`,就需要再定义一个 const 版本的重载运算符,例如:
```cpp
Time operator+(const Time& t) const; // 常量成员函数,用于对普通对象进行加法操作
```
这个版本的重载运算符在声明和定义中都需要加上 const 关键字,以表示它不会修改对象的成员变量。这样,我们就可以使用常量对象调用这个重载运算符了。