Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перезагрузка =, при работе с динамическим массивом 
:(
    Опции темы
MFSham
Дата 14.2.2006, 04:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: 1
Всего: 3



Возникла такая проблема: пытаюсь в классе перезагрузить оператор присваивания при работе с двумя матрицами(одинакового размера), но чего-то не получается. Вот что у меня имеется(консоль) :
Код

//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream>
#include <conio>

using namespace std;
//---------------------------------------------------------------------------

class Matrix
{
public:
    Matrix(int count);
    ~Matrix();
    void Show();
    int GetLenght();
    Matrix operator = (Matrix mas);
private:
    double **point;
    int lenght;
};

Matrix::Matrix(int count)
{
    lenght=count;
    point = new double*[count];
      for (int i=0; i<count; i++)
        point[i] = new double[count];

    for (int i=0; i<count; i++)
      for (int j=0; j<count; j++)
        point[i][j]=random(10);
}

Matrix::~Matrix()
{
    delete[] point;
}

void Matrix::Show()
{
    for (int i=0; i<lenght; i++)
       {
          for (int j=0; j<lenght; j++)                                         //  после перезагрузки 
             cout << point[i][j] << " ";                                       //   возникает ошибка
          cout <<"          "<< point[i] << '\n';
       }
    cout << point << '\n';
}

int Matrix::GetLenght()
{
    return lenght;
}

Matrix Matrix::operator = (Matrix mas)
{
    for (int i=0; i<lenght; i++)
    {
        for (int j=0; j<lenght; j++)
          point[i][j]=mas.point[i][j];
    }

    return *this;
}

int main()
{
      randomize();
      Matrix mas(10), mas2(10);

      mas.Show();
      cout <<  "------------------\n";
      mas2.Show();
      mas=mas2;
      cout <<  "------------------\n";
      mas.Show();
      cout <<  "------------------\n";
      mas2.Show();
      getch();
        return 0;
}
//---------------------------------------------------------------------------


При попытке выявить ошибку заметил, что после перезагрузки у двух(что мне вообще непонятно, т.к. присваивание то в одну сторону) массивов на 0,1 и последнем местах в переменной point[i] находятся "левые" адреса, а на остальных все как и должно быть.
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
BreakPointMAN
Дата 14.2.2006, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



"Перезагрузка" это в "Матрице", а в C++ - "перегрузка"! Это раз!

Прототип функции-оператора присваивания у тебя должен выглядеть так:
Код

Matrix& operator = (const Matrix& mas);

Это два.

Да и само тело этой оператор-функции у тебя некорректно, но, сорри, не успею ответить, ибо пора уходить...




--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
chaos
Дата 14.2.2006, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



обрати внимание на выделение памяти и ее освобождение - там у тебя косяки
PM WWW   Вверх
MAKCim
Дата 14.2.2006, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



не помешало бы еще зделать копирующий конструктор
Код

Matrix::Matrix(const Matrix&);

в деструкторе нужно сначала удалить строки затем массив из указателей
Код

for (int i=0; i<length; i++) delete []point[i];
delete []point;

для выывода вместо Show() можно перегрузить operator<<
Код

ostream& operator<<(ostream& stream, const Matrix& object)
{
    //запись в stream
}



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
MFSham
Дата 17.2.2006, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: 1
Всего: 3



Цитата(BreakPointMAN @ 14.2.2006, 07:33 Найти цитируемый пост)
"Перезагрузка" это в "Матрице", а в C++ - "перегрузка"! Это раз!

Извиняюсь, неправильно написал.
Цитата(BreakPointMAN @ 14.2.2006, 07:33 Найти цитируемый пост)

Прототип функции-оператора присваивания у тебя должен выглядеть так:
Matrix& operator = (const Matrix& mas);

Спасибо, вроде начало работать.

Цитата(BreakPointMAN @ 14.2.2006, 07:33 Найти цитируемый пост)
Да и само тело этой оператор-функции у тебя некорректно

А можно немного поконкретнее что именно?

Извиняюсь за настырность(очень хочется разобраться), но как в данном примере будет выглядеть оператор перегрузки "+". Вот что у меня получилось:
Код

{
              ...........................        
    Matrix &operator = (const Matrix &mas);
    Matrix operator + (const Matrix &mas);
              ...........................
Matrix &Matrix::operator = (const Matrix &mas)
{
    for (int i=0; i<length; i++)
    {
        for (int j=0; j<length; j++)
          point[i]=mas.point[i];
    }
    return *this;
}

Matrix Matrix::operator + (const Matrix &mas)
    Matrix mas3(10);
    for (int i=0; i<length; i++)
    {
        for (int j=0; j<length; j++)
           mas3.point[i][j]=point[i][j]+mas.point[i][j];
    }
    return mas3;
}

--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
BreakPointMAN
Дата 17.2.2006, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



Код

Matrix &Matrix::operator = (const Matrix &mas)
{
    for (int i=0; i<length; i++)
    {
        for (int j=0; j<length; j++)
          point[i]=mas.point[i]; //  что это за жуть?!
    }
    return *this;
}



--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
MFSham
Дата 17.2.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: 1
Всего: 3



Упс:
Код

Matrix &Matrix::operator = (const Matrix &mas)
{
    for (int i=0; i<length; i++)
    {
        for (int j=0; j<length; j++)
          point[i][j]=mas.point[i][j]; 
    }
    return *this;
}

--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3945 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.