我正在为所有操作构建Matrix类,例如加法,减法,乘法,逆等。我重载了+ - () *
这样的简单运算符。但我正试图通过()
设置行和列值。
样本就是这样
Matrix(1,1) = 10;
假设第1行,第1列将设置为10.
我的加法重载样本就是这个
friend Matrix operator +(Matrix&, Matrix&);
我怎样才能做到这一点?
谢谢!
答案 0 :(得分:3)
它与您已经完成的工作类似:
Value &operator()(int x, int y)
{
return matrix[x][y]; // or whatever it's supposed to be
}
,其中Value
是您的内部类型。
但是,我建议使用setter函数,因为它不那么模糊。 e.g:
void set(int x, int y, Value v)
{
matrix[x][y] = v;
}
答案 1 :(得分:3)
您的矩阵应提供元素访问器,例如通过operator()
:
template <typename T>
class Matrix
{
public:
T & operator()(size_t i, size_t j) { return buf[i * NCols + j]; } // Example
T const & operator()(size_t i, size_t j) const { /* same */ }
// ...
};
然后你可以说:
Matrix<bool> m(20, 20);
m(12, 15) = false;
m(8, 19) = m(1, 2) = true;
return m(0, 0);
答案 2 :(得分:1)
使用
class Matrix {
T& operator()(size_t x, size_t y) {
return _mat[x][y]; //Or however your datastructure works
}
const T& operator() (size_t x, size_t y) const {
return _mat[x][y];
}
};
其中T是矩阵所持有的数据类型。返回(x,y)处的数据。