Форум: Форум C++Разное
Новые темы: 00
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: operator+ и operator=
 
 автор: Roma   (29.02.2008 в 05:32)   письмо автору
 
 

всем привет!!!
в чем ошибка при сложении матриц?

#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 в 07:44)   письмо автору
 
   для: Roma   (29.02.2008 в 05:32)
 

.

  Ответить  
 
 автор: Zefick   (17.03.2008 в 07:20)
 
   для: Roma   (29.02.2008 в 07:44)
 

Ошибка уже в конструкторе. Нельзя формальные переменные принимаемые им обзывать так-же, как и соответствующие переменные класса. Иначе выражение cols = cols не имеет смысла.
В остальном всё вроде-бы нормально.
Советую ставить символ подчёркивания перед именем параметра.

Оператор присваивания желательно должен возвращять ссылку на объект-резльтат. Это нужно для того, чтобы срабатывали цепочки присваиваний например: obj1 = obj2 = obj3+obg4;

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования