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

operation overloading with return value (or something like that)

本文关键字:返回值 操作 重载      更新时间:2023-10-16

我必须重载一个操作符,就像这样。

max(matrix)=11;

有一个函数max,它返回矩阵中最大的数。这一行必须将最大值设置为11。问题是:如何声明这个操作符重载?

这里没有操作符重载,除了max(matrix)应该返回一些重载了operator=(int)的用户定义类型,这是没有必要的。

从技术上讲,要使这行代码像你描述的那样工作,你可以做的是返回对矩阵的max元素的(非const)引用:

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

这里不需要操作符重载。然后,这行代码将保存最大值的元素设置为11。但是,在此之后,最大值可能不会设置为11。考虑这个矩阵:

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

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

然而,有一个max函数做我所描述的,不是一个好主意,因为它不做人们通常期望从这样一个函数。可能是一个简单的重命名使它更清楚:标准库使用max_element类似的函数,而max只返回集合的最大值,不允许修改它。

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