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

Перегрузка операторов в классе - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Описать структуру STUDENT http://www.cyberforum.ru/cpp-beginners/thread1165275.html
Прошу помощи, уважаемые программисты! Я гуманитарий, задание для меня, конечно, очень интересное, но и очень непонятное. Как в коде С++ можно вывести список, да еще и упорядочить?! Может кто поможет мне. Задание: описать структуру с именем STUDENT, содержащую следующие поля: а)фамилия и имя(строка 15 символов), б) год рождения(целое неотриц. число), в)номер группы( число целое или строка...
C++ Инициализация static члена класса Добрый вечер! Есть класс, в нём в private реализован ещё один + это всё шаблоны. Во вложенном классе есть static указатель на переменную типа этого вложенного класса. Вопрос - как инициализировать эту переменную и возможно ли это? Если нет или если есть вариант по проще, как сделать nilPtr, что бы на неё в моём дереве указывали все листья, то буду очень благодарен решению. enum colors {black... http://www.cyberforum.ru/cpp-beginners/thread1165274.html
C++ Посчитать интеграл методом трапеций
нужно посчитать интеграл по формуле трапеции с точность e=0.001 и шагом n=10 \int_{0}^{\pi /2}\sqrt{1+sin^2(x)}dx \int_{a}^{b}f(x)dx=\frac{b-a}{2*(n-1)}*\left -формула трапеции
C++ Помогите переписать из Паскаля на С++
Помогите переписать из Паскаля на С++ var j,i:integer; N:integer; Max:real; a,b:real; Mas: array of real; begin write('Введите N ( N < 100):'); readln(N); write('Введите a:'); readln(a);
C++ Динамическое подключение DLL http://www.cyberforum.ru/cpp-beginners/thread1165251.html
Здравствуйте! Скорее всего, мой вопрос покажется вам глупым, но всё же... Я не могу динамически подключить библиотеку. Когда подключаю статически, всё работает, функция выдает ответ и все счастливы. Но когда начинаю подключать статически, в момент вызова функции программа ломается, выдавая: Необработанное исключение по адресу 0x776B1A91 в DetCalcDynamic.exe: 0xC0000005: нарушение прав доступа при...
C++ Вычислить произведение квадратов тех элементов массива, для которых выполняется неравенство Образовать массив с элементами akn = nfi +11 (k) + sin (x) fi +12 (n), где и - номер варианта, k, n = 1, 2, 3, ..., 10. Вывести его на экран в виде таблицы (матрицы) - Вычислить произведение квадратов тех элементов массива, для которых выполняется неравенство | аkn | <3. подробнее

Показать сообщение отдельно
legoner
0 / 0 / 0
Регистрация: 03.05.2014
Сообщений: 3
03.05.2014, 21:22     Перегрузка операторов в классе
Здравствуйте.

Написал класс:
C++ (Qt)
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
template <class T>
class LIST
{
    private:
        T* listP;
        uint lSize;     
    public:
        LIST();
        LIST(const T*,uint);
 
        void SetList(const T*,uint);//задать лист       
        bool Add(const T&);//добавить элемент
        bool Delete(uint);//удалить элемент
        void Clear();//очистить список
 
        bool IsNull();//пустой?
        T GetElement(uint);
 
        LIST<T> & operator=(const LIST<T> &);//присваивает списки
        LIST<T> operator+(const LIST<T> &);//совмещает списки
 
        template <class T> friend  ostream & operator<< (ostream & ,const LIST<T> &);//вывод листа в поток
 
        ~LIST();
};
Определил операторы:

C++ (Qt)
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
template <class T>
LIST<T> & LIST<T>::operator=(const LIST<T> & l)
{
    if (&l == this) return *this;
    lSize = l.lSize;
    if (listP != NULL) delete [] listP;
    listP = new T[lSize];
 
    for (int i = 0; i < lSize; i++)
        listP[i] = l.listP[i];
 
    return *this;
}
 
template <class T>
LIST<T> LIST<T>::operator+(const LIST<T> & l)
{
    uint size = lSize + l.lSize;
    if (size > LIST_MAX_SIZE) size = LIST_MAX_SIZE;
    if (size == 0)
    {
        LIST<T> result = LIST(NULL,size);
        return result;
    }
    
    
    T* arr = new T[size];
    uint sie = 0;
    for (sie; sie < lSize; sie++)
        arr[sie] = listP[sie];
    
    for (int i = 0; i + sie < size; i++)
        arr[sie+i] = l.listP[i]; 
 
    LIST<T> result = LIST(arr,size);//LIST<T> не нравится
    delete [] arr;
    return result;
}
Однако, я где-то упускаю из вида какую-то важную деталь, т.к. данный код работает не корректно.
Класс result создаётся, вроде, правильно ...
Однако, когда возвращаемый параметр передаётся оператору "="
C++ (Qt)
1
2
3
//int main() 
list = (list + list2);
return 0;
то первый элемент массива принимает совершенно странное значение, как будто вовсе не инициализирован.
Помимо этого, после выхода из функции, вылезает ошибка (см. картинку).

Помогите, пожалуйста, разобраться в чём дело...
Миниатюры
Перегрузка операторов в классе  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru