[英]C++: Matrix class
有人(谢谢)为我发布了一个矩阵类构造,以便我可以动态调整它。
我试图增强它,以便我可以获得并设置单个值。
class Matrix
{
public:
Matrix(std::size_t rows, std::size_t cols) : _matrix(rows, std::vector<float>(cols))
{
for (unsigned long r=0;r<rows+1;r++)
{
vector <float>nRow;
nRow.resize(cols+1);
for (unsigned long i=0;i<cols+1)
{
nRow[i]=0;//initialize to zero
}
_matrix.push_back(nRow);
}
}
// this is my own attempt to access the items:
float Value(unsigned long row,unsigned long col) : _matrix[row][col];
private:
std::vector<std::vector<float>> _matrix;
};
我想我可以访问这样的单个项目:
Matrix m(100,100);
m[5,5]=15;
但我猜线条
float Value(unsigned long row,unsigned long col) : _matrix[row][col];
和
m[5,5]=15;
错了。 它们不会编译各种错误。
你没有重载[]
运算符(我不建议)。 您应该通过函数Value()
访问。 所以:
m.Value(5,5);
也,
float Value(unsigned long row,unsigned long col) : _matrix[row][col];
不是我所知道的功能或功能简写。 它应该是:
float Value(unsigned long row,unsigned long col)
{
return _matrix[row][col]
}
在这段代码:
float Value(unsigned long row,unsigned long col) : _matrix[row][col];
这不是有效的c ++声明。 初始化列表仅对构造函数有效,最终,情况并非如此。
另外,你不能使用这种对象构造调用: m[5,5]
。 支架操作员必须只有一个参数。
为了解决您的问题,我建议您使用operator overload operator()
。 它可以有任意数量的参数,因此,用以下函数代替:
float& operator()(unsigned long row, unsigned long col)
{
return _matrix[row][col];
}
现在,你可以这样打电话:
m(5, 5) = 15;
b = m(5,5);
缺点是你通过这个操作符暴露了你的类的内部,这打破了封装原则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.