重载运算符[] 我有一个任务,在C++中编写一个类矩阵,并且有一个条件来覆盖矩阵的运算符[],因此如果我有一个矩阵,这个矩阵具有这个“矩阵[0 ] [0 ] ],我必须把它的第一个元素放在它的第一行上。我用二维动态数组和模板(T**矩阵)表示了矩阵。你能帮帮我吗
PS:我用这个方法创建二维数组:重载运算符[] 我有一个任务,在C++中编写一个类矩阵,并且有一个条件来覆盖矩阵的运算符[],因此如果我有一个矩阵,这个矩阵具有这个“矩阵[0 ] [0 ] ],我必须把它的第一个元素放在它的第一行上。我用二维动态数组和模板(T**矩阵)表示了矩阵。你能帮帮我吗,c++,matrix,overloading,operator-keyword,brackets,C++,Matrix,Overloading,Operator Keyword,Brackets,PS:我用这个方法创建二维数组: template <class T> T ** Matrix<T>::createMatrix(unsigned int rows, unsigned int cols) { T** matrix = new T*[rows]; for (unsigned int i = 0; i < rows; i++) { matrix[i] = new T[cols]; } return m
template <class T>
T ** Matrix<T>::createMatrix(unsigned int rows, unsigned int cols)
{
T** matrix = new T*[rows];
for (unsigned int i = 0; i < rows; i++) {
matrix[i] = new T[cols];
}
return matrix;
}
模板
T**Matrix::createMatrix(无符号整数行、无符号整数列)
{
T**矩阵=新的T*[行];
for(无符号整数i=0;i
您可以使用两个类来完成此操作。矩阵类重写[]并返回一个行对象。row对象重写[]并返回标量。您可以使用两个类来完成此操作。矩阵类重写[]并返回一个行对象。行对象重写[]并返回标量。您不能在C++中本地地这样做,但您可以这样简单地将矩阵实例化:
Matrix<Matrix<int>> m;
矩阵m;
这样,第一个[]将返回另一个矩阵,该矩阵将返回您想要的项。当然,对于你的类来说,一个更好的名字是向量,一个叫做矩阵的包装类,它创建了一个内部的<代码>向量> > .< /p> 你不能在C++中自然地这样做,但是你可以简单地用这种方式来构造你的矩阵:
Matrix<Matrix<int>> m;
矩阵m;
这样,第一个[]将返回另一个矩阵,该矩阵将返回您想要的项。当然,类的更好名称是Vector,一个名为Matrix的包装类创建了一个内部
向量,您要做的是返回一个T*in操作符[],因为它可以将操作符[]本机应用于它,并得到您想要的结果。但是,我想指出的是,让指针保持原始状态是一种非常糟糕的做法。您要做的是返回一个T*in运算符[],因为它可以将运算符[]本机应用于它,并得到您想要的结果。然而,我想指出的是,让指针保持原始状态是非常糟糕的做法。我假设matrix是matrix的T**类型的成员变量
template< class T >
T* operator []( Matrix<T>& m, unsigned int row )
{
// maybe remember rows and assert(row<rows);
return m.matrix[ row ];
}
模板
T*运算符[](矩阵和m,无符号整数行)
{
//可能还记得rows和assert(row我假设matrix是matrix的T**类型的成员变量
template< class T >
T* operator []( Matrix<T>& m, unsigned int row )
{
// maybe remember rows and assert(row<rows);
return m.matrix[ row ];
}
模板
T*运算符[](矩阵和m,无符号整数行)
{
//也许记住rows和assert(row根据您的需求状态,您用于创建矩阵的方法与类没有任何关系。您正在创建一个简单的t**
,在类方法中这样做没有什么区别
创建一个T
矩阵,它可以像在matrix[i][j]
中一样使用,这意味着表达式matrix[i]
必须返回一个类型,操作符[]
也被定义为返回T
。因此,通常的方法是将其分解为以下步骤:
矩阵运算符[](int)
返回一个矩阵行&
矩阵行和运算符[](int)
返回一个T&
从矩阵中读取值时,还将使用这些运算符的const
版本(写入矩阵时将使用非const版本)
因此,您至少应该使用以下接口创建一个类:
template <typename T>
class Matrix {
public:
Matrix(int rows, int cols);
const MatrixRow<T>& operator[] (int row) const;
MatrixRow<T>& operator[] (int row);
}
模板
类矩阵{
公众:
矩阵(int行,int列);
常量矩阵行和运算符[](int行)常量;
矩阵行和运算符[](整数行);
}
PS:这读起来像是一个家庭作业问题,是吗?根据您的需求状态,您用于创建矩阵的方法与类没有任何关系。您正在创建一个简单的t**
,在类方法中这样做没有什么区别
创建一个T
矩阵,它可以像在matrix[i][j]
中一样使用,这意味着表达式matrix[i]
必须返回一个类型,操作符[]
也被定义为返回T
。因此,通常的方法是将其分解为以下步骤:
矩阵运算符[](int)
返回一个矩阵行&
矩阵行和运算符[](int)
返回一个T&
从矩阵中读取值时,还将使用这些运算符的const
版本(写入矩阵时将使用非const版本)
因此,您至少应该使用以下接口创建一个类:
template <typename T>
class Matrix {
public:
Matrix(int rows, int cols);
const MatrixRow<T>& operator[] (int row) const;
MatrixRow<T>& operator[] (int row);
}
模板
类矩阵{
公众:
矩阵(int行,int列);
常量矩阵行和运算符[](int行)常量;
矩阵行和运算符[](整数行);
}
PS:这读起来像是一个家庭作业问题,是吗?T**
没有描述二维数组。它描述了一个数组数组,这是不一样的。T**
没有描述二维数组。它描述了一个数组数组,这是不一样的。是的。我做了行列式法,乘法法od等等…现在我终于做了:)。是的。我做了行列式法,乘法法等等…现在我终于做了:)。谢谢!非常简单,聪明,优雅!再次感谢:)。谢谢!非常简单,聪明,优雅!再次感谢:)。