【发布时间】:2012-03-19 22:49:23
【问题描述】:
我正在为所有运算(例如加法、减法、乘法、逆运算等)构建一个 Matrix 类。我重载了简单的运算符,例如 + - () *。但我正在尝试通过()设置行和列值。
样本应该是这样的
Matrix(1,1) = 10;
假设第 1 行第 1 列将设置为 10。
我的附加重载示例如下
friend Matrix operator +(Matrix&, Matrix&);
我怎样才能做到这一点?
谢谢!
【问题讨论】:
-
有点不相关:您的加法运算符应该是:
Matrix operator +(Matrix const&, Matrix const&);。否则,像x + y + z这样的东西就行不通了。您可以在operator overloading FAQ 中阅读更多相关信息。 -
@R.MartinhoFernandes 你能详细说明区别吗?
-
当然。
Matrix&只能绑定到左值(如果您不知道那是什么,就说“命名变量”,这并不完全正确,但很接近)。x + y + z与operator+(operator+(x,y),z)相同。内部调用返回一个不是左值的临时对象,因此不能传递给Matrix&。 OTOHMatrix const&可以绑定到左值和临时值。 -
为什么要包含加法运算符的朋友声明?我看不出它与你的问题有什么关系。如果有任何运算符声明是相关的,那么它将是
operator()。 -
这是我的
()运营商:double& operator ()(int, int);
标签: c++ class operator-overloading