带有返回值的操作重载(或类似的东西)

时间:2014-03-21 12:28:57

标签: c++ operators operator-overloading

我必须重载一个运算符,就像这样。

max(matrix)=11;

所以,有一个函数max,它返回该矩阵中的最大数字。并且此行必须将最大值设置为11.问题是:如何声明此运算符重载?

1 个答案:

答案 0 :(得分:5)

这里没有涉及运算符重载,除了max(matrix)应该返回一些已经超载operator=(int)的用户定义类型,这是不必要的。

你在技术上可以做的是如你所描述的那样使代码行工作一些(矩阵的最大元素的非对象)引用:

int& max(Matrix& mx) { /* ... */ }

此处不需要操作员重载。然后该行将该最大值的元素设置为11.但是,在它之后,最大值可能不会设置为11.考虑这个矩阵:

/  5  32  10 \
| 11   3  64 |
\ 10   2   0 /

显然最大值是64,但在你的行之后,最大值将是第一行中的32。

但是,使用max函数执行我所描述的功能并不是一个好主意,因为它不能完成人们通常期望的功能。可能是一个简单的重命名使它更清晰:标准库使用max_element来表示类似的函数,而max只返回一个集合的最大值,不允许改变它。

PS:确保给定矩阵的最大值为11的函数,你提供的语法是可能的,但更不直观,所以我不会通过提供一个不好的例子诱惑你; - )