クラスを書いていますが、行列の追加に問題があります。演算子 + をオーバーロードする必要があることはわかっていますが、正確な方法はわかりません。何か案は ?
class CMatrix
{
private:
int Rows;
int Columns;
float* pData;
public:
CMatrix(void);
CMatrix(int rows, int columns);
void setElement(int row, int column, float element);
float getElement(int row, int column);
...};
istream& operator>>(istream& in, CMatrix& matrix)
{
in >> matrix.Rows;
in >> matrix.Columns;
for(int i = 0; i < matrix.Rows; i++)
for(int j = 0; j < matrix.Columns; j++)
in >> *(matrix.pData + i * matrix.Columns + j);
return in;
}
CMatrix::CMatrix(int rows, int columns)
{
Rows = rows;
Columns = columns;
pData = new float[Rows * Columns];
float* pEnd = &pData[Rows * Columns];
for(float* p = pData; p < pEnd; p++)
*p = 0.0;
}
void CMatrix::setElement(int row, int column, float element)
{
*(pData+ row * Columns + column) = element;
}
float CMatrix::getElement(int row, int column)
{
return *(pData + row * Columns + column);
}
演算子 '<<' ,'>>' をオーバーロードしましたが、演算子 + に問題があります。
残念ながら、私は評判が10未満です...だから私が書いた場合:
CMatrix operator+(const CMatrix &lhs, const CMatrix &rhs)
{
Cmatrix result (Rows,Columns);
for(int i=0; i <Rows ; i++)
for( int j=0; j<Columns; j++)
result.setElement(i,j) = lhs.getElement(i,j) + rhs.getElement(i,j);
return result;
}
int main()
{
const int n = 10, m = 5;
CMatrix m1(n, m);
CMatrix m2(n, m);
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
m1.setElement(i, j, (float)(i * m + j));
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
m2.setElement(i, j, (float)(i * m + j));
cout<<m1+m2; // it doesn't work
Thanks all for help, i did it at last...