我正在研究通用矩阵类。 我要重载+函数,以便何时执行:
试图这样做(函数重载): 这是一种正确的方法吗?
template<class T>
class Matrix
{
std::vector< std::vector<T> > mat;
size_t rows , cols;
public:
Matrix(){}
Matrix(const std::string){ }
Matrix(const size_t r, const size_t c, const std::vector<T> v){ }
Matrix(const Matrix& other);
Matrix<T> operator=(const Matrix<T> &other) { }
Matrix<T> operator+(const Matrix<T> &other) const{}
friend Matrix<T> operator*(const T &mat, const Matrix<T> &scalar) { }
friend Matrix<T> operator*(const Matrix<T> &mat, const T &scalar) { }
friend Matrix<T> operator*(const Matrix<T> &mat, const Matrix<T> &other) { }
此外,我很高兴知道我的声明是否存在问题。 谢谢你的帮助。
答案 0 :(得分:0)
如果您想重载operator*
以允许
您需要将这三个运算符重载定义为矩阵类周围的命名空间中的函数:
class Matrix { ... };
Matrix operator*(Scalar const& s, Matrix const& m) { ... }
Matrix operator*(Matrix const& m, Scalar const& s) { ... }
Matrix operator*(Matrix const& m1, Matrix const& m2) { ... }
在你的情况下,你在类中声明了运算符为friend
函数,它们也是如此,因为它实际上声明了自由函数,而使它们成为friends
。如果实际需要friend
,则取决于实施。如果没有,为了清楚起见,我会将它们移到课堂外,但请记住,您需要template<typename T>
。关于其余代码,没有什么明显被破坏,但它只是真实代码的摘录。
答案 1 :(得分:-2)
看看这个问题,我有另一个想法。
matrix = scalar * matrix
matrix = matrix * scalar
matrix = matrix * matrix
另一种方法是使用函数对象并将它们传递给矩阵类,这样函数对象就可以处理算法细节......这样你就可以在以后需要的时候再添加它们。
运算符链接在上面的代码中也很方便,因此,通过引用返回重载运算符。