|
|
|
| всем привет!!!
в чем ошибка при сложении матриц?
#include <stdio.h>
#include<iostream.h>
class Tmatr{
private:int cols,rows,**matr;
public:
Tmatr(int rows,int cols);
~Tmatr(){for(int i=0;i<rows;i++)delete[] matr[i];delete[] matr;}
void out();
Tmatr operator+(Tmatr &rhs);
void operator=(Tmatr &hs1);
};
Tmatr::Tmatr(int rows,int cols){
this->cols=cols;
this->rows=rows;
matr=new int*[rows];
for(int i=0;i<rows;i++){
matr[i] = new int[cols];
for(int j = 0;j < cols;j++)matr[i][j]=i+j;
}
}
void Tmatr::out(){
for(int i=0;i<this->rows;i++){
for(int j = 0;j < this->cols;j++) cout<<matr[i][j]<<" ";
cout<<endl;
}
}
void Tmatr::operator=(Tmatr &rhs1){
for(int i=0;i<rows;i++)
for(int j=0;j<cols;j++){
matr[i][j]=rhs1.matr[i][j];
}
}
Tmatr Tmatr::operator+(Tmatr &rhs){
Tmatr c(this->rows,this->cols);
for(int i=0;i<rows;i++)
for(int j=0;j<cols;j++)
c.matr[i][j]= matr[i][j]+rhs.matr[i][j];
return c;
}
void main()
{
Tmatr a(5,5);
Tmatr b(5,5);
Tmatr d(5,5);
d=a+b;
d.out();
}
|
Проблема в реализации operator+!!! что я сделал не так?
Заранее спасибо | |
|
|
|
|
|
|
|
для: Roma
(29.02.2008 в 05:32)
| | . | |
|
|
|
|
автор: Zefick (17.03.2008 в 07:20) |
|
|
для: Roma
(29.02.2008 в 07:44)
| | Ошибка уже в конструкторе. Нельзя формальные переменные принимаемые им обзывать так-же, как и соответствующие переменные класса. Иначе выражение cols = cols не имеет смысла.
В остальном всё вроде-бы нормально.
Советую ставить символ подчёркивания перед именем параметра.
Оператор присваивания желательно должен возвращять ссылку на объект-резльтат. Это нужно для того, чтобы срабатывали цепочки присваиваний например: obj1 = obj2 = obj3+obg4; | |
|
|
|