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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
#1

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

15.04.2012, 15:45. Просмотров 1812. Ответов 53
Метки нет (Все метки)

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     Не получается перезгрузка =
Посмотрите здесь:

Загрузить видео вконтакте. Странно получается. Почему так получается? - Софт
Решил згрузить в контакт Мультфильм Дикая планета http://www.youtube.com/watch?v=8-nwT9YQ0t0&amp;NR=1&amp;feature=endscreen в максимально хорошем...

Дифференциальное уравнение второго порядка не получается в получается в маткаде - MathCAD
Дифференциальное уравнение второго порядка не получается в маткаде. Помогите решить


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.04.2012, 18:05     Не получается перезгрузка = #16
gore-lykovoe, что говорит дебаггер?
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:10  [ТС]     Не получается перезгрузка = #17
Цитата Сообщение от silent_1991 Посмотреть сообщение
что говорит дебаггер?
ща только в другом проекте запустил, теперь вместо test.exe, будет lab7.exe

'lab7.exe': Loaded 'C:\Users\Desktop\Инфо\lab7\Debug\lab7.exe', Symbols loaded.
'lab7.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\mfc100ud.dll', Symbols loaded.
'lab7.exe': Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Symbols loaded.
'lab7.exe': Loaded 'C:\Windows\SysWOW64\user32.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\gdi32.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\lpk.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\usp10.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\msvcrt.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\advapi32.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\sechost.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\rpcrt4.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\sspicli.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\cryptbase.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\shlwapi.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.17514_none_ec83dffa859149af\comctl32.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\msimg32.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\oleaut32.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\ole32.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\msvcp100d.dll', Symbols loaded.
'lab7.exe': Loaded 'C:\Windows\SysWOW64\apphelp.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\AppPatch\AcLayers.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\shell32.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\userenv.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\profapi.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\winspool.drv', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\mpr.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\imm32.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\msctf.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\uxtheme.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\dwmapi.dll', Cannot find or open the PDB file
'lab7.exe': Loaded 'C:\Windows\SysWOW64\mfc100rus.dll', Binary was not built with debug information.
'lab7.exe': Loaded 'ImageAtBase0x4acb0000', Loading disabled by Include/Exclude setting.
'lab7.exe': Unloaded 'ImageAtBase0x4acb0000'
HEAP[lab7.exe]: Invalid address specified to RtlValidateHeap( 00030000, 0003B8B8 )
Windows has triggered a breakpoint in lab7.exe.

This may be due to a corruption of the heap, which indicates a bug in lab7.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while lab7.exe has focus.

The output window may have more diagnostic information.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.04.2012, 18:14     Не получается перезгрузка = #18
gore-lykovoe, код выложите.
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:14  [ТС]     Не получается перезгрузка = #19
Цитата Сообщение от silent_1991 Посмотреть сообщение
так а где вы в поле size результата (для которого вызван оператор =) присваиваете размер присваиваемого массива?
так когда я для операции "+" создаю временный объект, поле size автоматически станет равным 8, так - как это есть в конструкторе с параметром. Соотвественно, когда будет запускать оператор "=" и как аргумент пойдет этот временный объет, то поле size уже будет равно 8.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.04.2012, 18:15     Не получается перезгрузка = #20
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
поле size автоматически станет равным 8
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
поле size уже будет равно 8
Поле size временного объекта, но не результирующего, в который происходит копирование.
gore-lykovoe
32 / 32 / 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
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:25  [ТС]     Не получается перезгрузка = #23
Цитата Сообщение от silent_1991 Посмотреть сообщение
поле объект, к которому происходит присваивание, останется таким же, как и до присваивания?
так там же есть строчка
C++
1
p = new T [ t.size ];
Поле ведь изменится!?
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.04.2012, 18:26     Не получается перезгрузка = #24
gore-lykovoe, вот каким образом изменение указателя на область памяти влияет на целочисленную переменную, хранящую размер, скажите на милость?
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:27  [ТС]     Не получается перезгрузка = #25
Цитата Сообщение от silent_1991 Посмотреть сообщение
Вот на такой функции main ваш код отработал.
вставил его к себе, скомпилировал, нормально, только у меня там system("pause") есть в самом конце, после нажатия на "продолжить", программа завершилась с критической ошибкой. (прошлой)
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.04.2012, 18:29     Не получается перезгрузка = #26
gore-lykovoe, http://liveworkspace.org/code/4731ac...852621ecf0780a
Специально вставил перед возвратом из оператора присваивания распечатку размера массива после выполнения оператора (по логике должен быть 6).
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:32  [ТС]     Не получается перезгрузка = #27
Цитата Сообщение от silent_1991 Посмотреть сообщение
вот каким образом изменение указателя на область памяти влияет на целочисленную переменную, хранящую размер, скажите на милость?
оно не влияет, но я не понял почему вы задаете такой вопрос.
Цитата Сообщение от silent_1991 Посмотреть сообщение
поле объект, к которому происходит присваивание, останется таким же, как и до присваивания
я так думал, что эта строчка как-раз и изменит поле объект, к которому происходит присваивание.

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

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

Изменит. Но какое поле, по вашему, она изменит?
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 18:35  [ТС]     Не получается перезгрузка = #29
Цитата Сообщение от silent_1991 Посмотреть сообщение
по логике должен быть 6
странно, тоесть в этом проблема?
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.04.2012, 18:36     Не получается перезгрузка = #30
gore-lykovoe, нет, вы же видели по ссылке, что код отрабатывает и завершается нормально. Но проблема, тем не менее есть, и я удивлён, что у вас такие трудности с её пониманием.
Yandex
Объявления
15.04.2012, 18:36     Не получается перезгрузка =
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru