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

ada*_*kly 0 c++ operator-overloading operators

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

max(matrix)=11;
Run Code Online (Sandbox Code Playgroud)

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

Arn*_*rtz 5

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

你在技术上可以做的就是让你的代码行像你所描述的那样工作,返回对矩阵的max元素的(nonconst)引用:

int& max(Matrix& mx) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

这里不需要操作员超载.然后该行将该元素保存为最大值为11.但是,在此之后,最大值可能不会设置为11.请考虑以下矩阵:

/  5  32  10 \
| 11   3  64 |
\ 10   2   0 /
Run Code Online (Sandbox Code Playgroud)

很明显,最大值是64,但在你的行之后,最大值将是第一行中的32.

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

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