过载()运算符

Overloaded ( ) operator

本文关键字:运算符 过载      更新时间:2023-10-16

规格是要超载括号()操作员访问和分配矩阵的元素,但是,我正在努力弄清楚我的过载函数需要返回什么。

简介主体:

//The .h files and everything has been included, my other functions work just not this one
cout << "Test (): " << endl;
m0(0,0) = 17.25;
m0(1,5) = -2.33;
m0(5,5) = 233;   // There is class exception handling I just haven't included it

函数实现:

Matrix* Matrix::operator () (const unsigned int m, const unsigned int n) //We were told they HAD to be unsigned int
{
    Matrix *ptr = &matrix[m][n];
     return ptr;
}

错误:

main.cpp: In function ‘int main()’:
main.cpp:59:15: error: lvalue required as left operand of assignment
     m0(0,0) = 17.25;
               ^~~~~
main.cpp:60:16: error: lvalue required as left operand of assignment
     m0(1,5) = -2.33;
                ^~~~
main.cpp:61:15: error: lvalue required as left operand of assignment
     m0(5,5) = 233; // should throw an exception

我了解错误在说什么,所以请不要只告诉我再次阅读并修复它。我实际上不确定如何修复我的函数正在返回并实现它,以便实际上可以将双重值分配给某物。

预先感谢

如果您在程序中选中此行:

m0(0,0) = 17.25;

您正在尝试为()运算符返回的值分配一个双值。

这意味着您应该返回允许分配双值的东西 - 最简单的方法是返回双重。

另外,由于您想为其分配某些内容,因此您应该返回参考 - 否则,您只需返回一个简单的临时值,而不允许进行分配。即使编译器允许它,您也不会看到矩阵中的更改,因为您会更改临时值。

我还看到,在您当前的实施中,您正在返回指针。指针类似于引用,但是如果考虑到它,则不能将值直接分配给指针指向的内存 - 您必须首先解释它:

double* d = ...; // points to some memory
*d = 5;

这就是为什么在这种情况下引用更好的原因。