如何用参数重载'='运算符?

时间:2018-06-27 15:51:04

标签: c++ class templates operators override

使用'='为类成员设置一些值并提供其他参数的正确语法是什么?例如。向量中的位置:

MyClass<float> mt;
mt(2,4) = 3.5;

我尝试过:

template <class _type> 
_type myClass<_type>::operator()(int r,int c) {
    return data[r*nCols+c]; 
};

template <class _type>  
myClass<_type>::operator= (int r, int c, _type val) { 
    data(r,c) = val; 
};

但是编译器告诉我可以使用1个参数覆盖'='运算符。

1 个答案:

答案 0 :(得分:10)

当重载=运算符时,您只想在参数中使用右边的值。由于您重载了()运算符,因此不需要使用r运算符来处理c=值。您可以只使用mt(2,4) = 3.5;,重载的()运算符将处理mt(2,4)部分。然后,您可以将返回的数据设置为所需的值,而不会重载任何=运算符。

您需要返回对数据的引用,以便可以对其进行编辑,但是:

template <class _type>
_type& myClass<_type>::operator()(int r,int c) {
    return data[r*nCols+c]; 
};