Форум программистов, компьютерный форум CyberForum.ru

Не получается перезгрузка = - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 15:45     Не получается перезгрузка = #1
C++
1
2
3
4
5
6
7
template <class T> Array<T>& Array<T>::operator = ( const Array<T> &t )
    {
        Array<T> ar( t.size );
        for ( int i = 0; i < t.size; i ++ )
            ar[i] = t.p[i];
        return ar;
    }
Ошибки не выдает, но когда присваиваю пустому массиву, массив, заполненный разными объектоми и вывожу полученный массив, то вместо объектов которые были в заполененном массиве, выводятся объекты созданные конструктором по умолчанию( В чем проблема?

Добавлено через 5 минут
Суть кода, можно понять отсюда: Шаблоны классов: контейнер. Несколько вопросов , там только вместо Array - название vect, но там вообще неправильно оператор = перегружен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2012, 15:45     Не получается перезгрузка =
Посмотрите здесь:

C++ треугольник не получается
не получается! C++
C++ Не получается реализовать
C++ Немного не получается
Не получается C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:19  [ТС]     Не получается перезгрузка = #21
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
template <class T>  class MyArray
    {
        T *p;
        int size;
    public:
        MyArray( );
        MyArray( int s );
        ~MyArray( );
        MyArray& operator = ( const MyArray &t );
        MyArray operator + ( const MyArray &t );
        T& operator [] ( int k );
    };
    
    template <class T> MyArray<T>::MyArray()
    {
        size = 100;
        p = new T[size];
    }
 
    template <class T> MyArray<T>::MyArray( int s )
    {
        size = s;
        p = new T[size];
    }
 
    template <class T> MyArray<T>::~MyArray()
    {
        delete []p;
    }
    
    template <class T> MyArray<T>& MyArray<T>::operator = ( const MyArray<T> &t )
    {   
        if ( this != &t)
        {
            delete []p;
            p = new T [ t.size ];
            for ( int i = 0; i < t.size; i ++ )
                p [i] = t.p[i];
        }
        return *this;
    } 
    
    template <class T> MyArray<T> MyArray<T>::operator + ( const MyArray &t )
    {
        MyArray<T> ar( size + t.size ) ;
        for ( int i = 0; i < size; i ++ )
            ar.p[i] = p[ i ];
 
        for ( int i = size; i < size + t.size; i ++ )
            ar.p[i] = t.p[ i-size ];
        
        return ar;
 
    }
    template <class T> T& MyArray<T>::operator [] ( int k )
    {
    if ( k < 0 || k >= size )
    {
        cout << "Ошибка, неккоректный индекс" << endl;
        exit( 0 );
    }
    else
        return p[ k ];
    
    }
Добавлено через 3 минуты
Цитата Сообщение от silent_1991 Посмотреть сообщение
Поле size временного объекта, но не результирующего, в который происходит копирование.
так, немного не понял, так поле t.size будет равно 8, когда мы перегружаем "=" ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 18:20     Не получается перезгрузка = #22
Вот на такой функции main ваш код отработал. Тем не менее то, что вы не изменяете размер - ошибка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    MyArray<int> arr1(5), arr2(3), arr3(3);
    
    arr2[0] = arr3[0] = 10;
    arr2[1] = arr3[1] = 20;
    arr2[2] = arr3[2] = 30;
    
    arr1 = arr2 + arr3;
    
    return 0;
}
Добавлено через 58 секунд
gore-lykovoe, поле t.size будет равно 8. Только вот какой от этого прок, если после отработки оператора = поле объект, к которому происходит присваивание, останется таким же, как и до присваивания?
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:25  [ТС]     Не получается перезгрузка = #23
Цитата Сообщение от silent_1991 Посмотреть сообщение
поле объект, к которому происходит присваивание, останется таким же, как и до присваивания?
так там же есть строчка
C++
1
p = new T [ t.size ];
Поле ведь изменится!?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 18:26     Не получается перезгрузка = #24
gore-lykovoe, вот каким образом изменение указателя на область памяти влияет на целочисленную переменную, хранящую размер, скажите на милость?
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:27  [ТС]     Не получается перезгрузка = #25
Цитата Сообщение от silent_1991 Посмотреть сообщение
Вот на такой функции main ваш код отработал.
вставил его к себе, скомпилировал, нормально, только у меня там system("pause") есть в самом конце, после нажатия на "продолжить", программа завершилась с критической ошибкой. (прошлой)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 18:29     Не получается перезгрузка = #26
gore-lykovoe, http://liveworkspace.org/code/4731ac...852621ecf0780a
Специально вставил перед возвратом из оператора присваивания распечатку размера массива после выполнения оператора (по логике должен быть 6).
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:32  [ТС]     Не получается перезгрузка = #27
Цитата Сообщение от silent_1991 Посмотреть сообщение
вот каким образом изменение указателя на область памяти влияет на целочисленную переменную, хранящую размер, скажите на милость?
оно не влияет, но я не понял почему вы задаете такой вопрос.
Цитата Сообщение от silent_1991 Посмотреть сообщение
поле объект, к которому происходит присваивание, останется таким же, как и до присваивания
я так думал, что эта строчка как-раз и изменит поле объект, к которому происходит присваивание.

если не сложно, можете сказать тогда - как исправить? Сделать отдельную функцию size(), как у вас в примере? Я просто не понимаю, что она изменит.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 18:34     Не получается перезгрузка = #28
gore-lykovoe, метод size по-любому нужен для полноты, но вы приглядитесь лучше к 32 строке моего кода. Внимательно приглядитесь.

Цитата Сообщение от gore-lykovoe Посмотреть сообщение
я так думал, что эта строчка как-раз и изменит поле объект, к которому происходит присваивание.

Изменит. Но какое поле, по вашему, она изменит?
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:35  [ТС]     Не получается перезгрузка = #29
Цитата Сообщение от silent_1991 Посмотреть сообщение
по логике должен быть 6
странно, тоесть в этом проблема?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 18:36     Не получается перезгрузка = #30
gore-lykovoe, нет, вы же видели по ссылке, что код отрабатывает и завершается нормально. Но проблема, тем не менее есть, и я удивлён, что у вас такие трудности с её пониманием.
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:43  [ТС]     Не получается перезгрузка = #31
Цитата Сообщение от silent_1991 Посмотреть сообщение
но вы приглядитесь лучше к 32 строке моего кода
m_size = source.size();
в этой строчке мы получим размер временного объекта size, может вы 33 имели ввиду?


Цитата Сообщение от silent_1991 Посмотреть сообщение
Изменит. Но какое поле, по вашему, она изменит?
вы имели ввиду - чье поле она изменит? Поле объекта, который вызывает присваивание, тоесть в который и будет все копироваться.

Возможно я туплю очень? Или провалы в знаниях?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 18:46     Не получается перезгрузка = #32
gore-lykovoe, не пытайтесь догадаться, что и имел ввиду. По моему предыдущему сообщению это вполне ясно. Я указал на верную строку в своём коде. И чётко написал: "какое поле будет изменено". Какое, а не чьё.

Добавлено через 2 минуты
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
мы получим размер временного объекта size
Мы его не просто получили. Мы сделали главное - присвоили его.
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:47  [ТС]     Не получается перезгрузка = #33
Цитата Сообщение от silent_1991 Посмотреть сообщение
какое поле будет изменено
будет изменен указатель на динамическую память, тоесть теперь поместятся в эту память все объекты
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 18:48     Не получается перезгрузка = #34
gore-lykovoe, так. А что будет с полем size?
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:51  [ТС]     Не получается перезгрузка = #35
Цитата Сообщение от silent_1991 Посмотреть сообщение
Мы сделали главное - присвоили его.
понял, исправлю

Добавлено через 1 минуту
Цитата Сообщение от silent_1991 Посмотреть сообщение
так. А что будет с полем size?
понял, это конечно очень не правильно, но это не должно было влиять на работу программы. Не понимаю, почему у меня ошибки сыпятся(
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 18:52     Не получается перезгрузка = #36
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
временного объекта
Кстати, там будет не обязательно ссылка на временный объект. Мы можем один массив присваивать другому, тогда там будет ссылка на обычный объект, созданный нами собственноручно.

Добавлено через 28 секунд
gore-lykovoe, это и не влияет. Можете ещё раз сходить по ссылке выше.
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:59  [ТС]     Не получается перезгрузка = #37
Цитата Сообщение от silent_1991 Посмотреть сообщение
Можете ещё раз сходить по ссылке выше.
я вывел значения полученного массива arr1, все они равны рандомным числам. Поэтому видать ошибку в конце и выдает. Только я не понимаю, почему числа рандомные(
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 19:01     Не получается перезгрузка = #38
gore-lykovoe, http://liveworkspace.org/code/2ec407...2a627fd156903e
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 19:25  [ТС]     Не получается перезгрузка = #39
Цитата Сообщение от silent_1991 Посмотреть сообщение
http://liveworkspace.org/code/2ec407...2a627fd156903e
чудеса какие то, надо пересоздать проект пожалуй

Добавлено через 21 минуту
Цитата Сообщение от silent_1991 Посмотреть сообщение
http://liveworkspace.org/code/2ec407...2a627fd156903e
вообщем создал новый проект, скопировал код с сайта этого, не работает, выдает левые значения и завершается с ошибкой. Видать дело в среде. Я под VS-2010. Вы можете попробывать у себя запустить, пожалуйста? Или что мне делать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 19:33     Не получается перезгрузка =
Еще ссылки по теме:

Не получается C++
C++ Не получается с функциями
Не получается список C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.04.2012, 19:33     Не получается перезгрузка = #40
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
Я под VS-2010. Вы можете попробывать у себя запустить, пожалуйста? Или что мне делать?
а теперь подробно шаг за шагом опиши что делаешь, как создаешь проект, какие ошибки
Yandex
Объявления
15.04.2012, 19:33     Не получается перезгрузка =
Ответ Создать тему
Опции темы

Текущее время: 10:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru