Форум программистов, компьютерный форум 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 19:35     Не получается перезгрузка = #41
Чёрт побери... В студии и правда мусор О_о.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 19:43  [ТС]     Не получается перезгрузка = #42
Цитата Сообщение от Jupiter Посмотреть сообщение
а теперь подробно шаг за шагом опиши что делаешь, как создаешь проект, какие ошибки
Создаю проект win32 console application, выбираю пустой проект, библиотек никаких не подключаю. Потом нажимаю добавить cpp файл. Захожу по ссылке на сайт, копирую весь код и вставляю его в cpp файл. Компилирую. Запускаю. Вылетает с ошибкой. В консоли 6 значений всегда. Скриншот ошибки:
Миниатюры
Не получается перезгрузка =  
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 19:50  [ТС]     Не получается перезгрузка = #43
Цитата Сообщение от silent_1991 Посмотреть сообщение
В студии и правда мусор
Сейчас вместо arr1 = arr2 + arr3; сделал arr1 = arr2; Программа завершается по exit(0), который я писал в перегрузке [], уже интересно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 19:52     Не получается перезгрузка = #44
gore-lykovoe, ну это потому что цикл до 6, а размер будет 3.
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 20:10  [ТС]     Не получается перезгрузка = #45
Цитата Сообщение от silent_1991 Посмотреть сообщение
ну это потому что цикл до 6, а размер будет 3.
ясно, кстати я еще не перепресвоил размер для временного объекта в "+", но это не помогло

Добавлено через 15 минут
silent_1991, вы не знаете что делать в этом случае? Просто сам не могу найти ошибку, жду ответа
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 20:11     Не получается перезгрузка = #46
gore-lykovoe, я не знаю, почему в студии получается такой результат. Сам я пользуюсь gcc, на том сайте, на который я давал ссылки, он же.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.04.2012, 20:26     Не получается перезгрузка = #47
наваял робочую версию
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
66
67
68
69
70
#include <iostream>
 
template<class T>
class DynamicArray {
    int size;
    T*  arr;
public:
    DynamicArray(int s) : size(s), arr(new T[s]()) {}
    DynamicArray(const DynamicArray& obj)
    {
        size = obj.size;
        arr = new T[size]();
        for (int i = 0; i < size; ++i)
            arr[i] = obj.arr[i];
    }
    ~DynamicArray() { delete [] arr; }
    DynamicArray& operator = (const DynamicArray& obj)
    {
        if (this != &obj)
        {
            delete [] arr;
            size = obj.size;
            arr = new T[size]();
            for (int i = 0; i < size; ++i)
                arr[i] = obj.arr[i];
        }
        return *this;
    }
 
    DynamicArray operator + (const DynamicArray& obj) const
    {
        DynamicArray darr(size + obj.size);
 
        for (int i = 0; i < size; ++i)
            darr.arr[i] = arr[i];
 
        for (int i = 0; i < obj.size; ++i)
            darr.arr[size + i] = obj.arr[i];
 
        return darr;
    }
 
    T& operator [] (int k)
    {
        return arr[k];
    }
 
    const T& operator [] (int k) const
    {
        return arr[k];
    }
};
 
int main()
{
    DynamicArray<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;
    
    for (int i = 0; i < 6; ++i)
        std::cout << arr1[i] << "  ";
    
    std::cout << std::endl;
    
    return 0;
}
Добавлено через 1 минуту
MyArray по идиотски звучит
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 20:31  [ТС]     Не получается перезгрузка = #48
Цитата Сообщение от Jupiter Посмотреть сообщение
наваял робочую версию
Спасибо вам огромное, жаль не понял, почему там не работало. Буду тщательно сверять и разбираться.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.04.2012, 20:32     Не получается перезгрузка = #49
Я тоже так и не понял. Если разберётесь - отпишите.
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 20:51  [ТС]     Не получается перезгрузка = #50
silent_1991, скажите пожалуйста, а зачем вы при выделении памяти, например
C++
1
arr = new T[size]();
ставите () в конце?
+
C++
1
DArray operator + (const DArray& obj) const
что означает тут const в конце?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.04.2012, 21:06     Не получается перезгрузка = #51
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
а зачем вы при выделении памяти, например
C++
1
arr = new T[size]();
ставите () в конце?
для того чтоб у POD-типов вызвался конструктор - например int обнулился

Добавлено через 29 секунд
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
что означает тут const в конце?
то что этот метод не изменяет данные объекта
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 21:42  [ТС]     Не получается перезгрузка = #52
Цитата Сообщение от Jupiter Посмотреть сообщение
T& operator [] (int k)
{
return arr[k];
}
const T& operator [] (int k) const
{
return arr[k];
}
а в чем различие тогда этих перегрузок? Первая же тоже вроде не изменяет объкт, значит можно поставить const в конце?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.04.2012, 21:47     Не получается перезгрузка = #53
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
а в чем различие тогда этих перегрузок? Первая же тоже вроде не изменяет объкт, значит можно поставить const в конце?
1-я перегрузка используется для модификации элементов вектора(читай для записи)
2-я перегрузка используется для чтения - элемент не модифицируется
C++
1
2
arr[2] = 3; //вызов 1-й перегрузки
std::cout << arr[2]; //вызов 2-й перегрузки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 21:51     Не получается перезгрузка =
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
15.04.2012, 21:51  [ТС]     Не получается перезгрузка = #54
ясно, спасибо за объясненеия)
Yandex
Объявления
15.04.2012, 21:51     Не получается перезгрузка =
Ответ Создать тему
Опции темы

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