Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 1 / 2
Регистрация: 30.10.2012
Сообщений: 113
1

не работают нормально операции перезагрузки присваивания и извлечения Сбилдер6

06.02.2014, 13:26. Показов 521. Ответов 1
Метки нет (Все метки)

Класс:
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <iostream>
using namespace std;
#include <stdio.h>
#include <locale>
 
class Atd   //клас Атд
{
    class Queue   //класс очереди
    {
     public:
        int dataX;
    Queue * next;  //указатель на следующий элемент
         Queue (int x = NULL)
        {
            dataX = x; next = NULL;
        }
    };
private:
    Queue *start, *end; //указатели на начало и конец списка
    static const int Max_N=100;    //максимальное количество чисел
    unsigned int countQ; //текущее количество чисел
    void Input(Queue *&start, Queue *&end, Queue *&temp) //функция размещение чисел в очереди
    {
      if (start) {
        end->next = temp;
        end = temp;
                } else {
                 start = end = temp; };
    }
public:
    //по Умолчанию
   friend ostream &operator<<(ostream &Stream,const Atd &q)
    {
      Queue *tmp= q.start;
      while(tmp)    {
        Stream<<tmp->dataX<<" "<<endl;
        tmp = tmp->next;
        }
        return Stream;
    }
 
Atd():countQ(Max_N)    //конструктор с запросом чисел и размещение их в очереди
    {
         wprintf(L"Введите количество элементов:"); scanf("%d",&countQ);
      start=end=NULL;
      Queue* temp;
      for (int i=0;i<countQ;i++)
           {
            temp = new Queue;
            wprintf(L"Введите %d-е число: ",i+1); scanf("%d",&temp->dataX);
            temp->next=NULL;
        Input(start,end,temp);  //размещение чисел в очереди
           }
    }
~Atd()  //деконструктор
    {Queue *tmp = this->start;
        while(start)
        { tmp = start;
        start = start->next;
        delete tmp;
        }
    }
 
//Перегрузка операции присваивания
Atd& operator =(const Atd& ob)
{
    wprintf(L"Вызвана перезагрузка оператора '='.\n");
    this->~Atd();
    Queue *tmp = new Queue;
    //tmp->dataX=0;
    start=end=tmp;
    for (int i = 1; i < ob.countQ; i++)
    {
        Queue *tmp = new Queue;
        //tmp->dataX = 0;
        end ->next = tmp;
        end = tmp;
    }
    end ->next = 0;
    countQ = ob.countQ;
    return (*this);
}
 
 
 
Atd& operator +(int num) //Перегрузка операции + -добавление элемента в очередь
       {
        wprintf(L" Элемент был добавлен: %d\n",num);
    Queue* tmp =new Queue;
    tmp->dataX = num;
    tmp->next= NULL;
    Input(start,end,tmp);
    countQ++;
        return *this;
       }
 
unsigned int Lenght()
{
    return countQ;
}
bool empty() const{return start==NULL;}
Atd&  operator -(int num) //Перегрузка операции -извлечение элемента из очереди
    {
           wprintf(L" Элемент был извлечён : %d\n",start->dataX);
       Queue*tmp = new Queue;
       tmp = start;
           start = start->next;
           delete[] tmp;
        countQ--;
    }
void Print() //Функция вывода на экран
       {
         {
           Queue *tmp = start;
           while (tmp)
           {
            wprintf(L"%i\t", tmp->dataX);
            tmp = tmp->next;
          }
           cout<<endl;
        }
 }
};
помогите плизз
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.02.2014, 13:26
Ответы с готовыми решениями:

Связь на ноуте упала и не поднялась больше. Компьютер работает нормально, другие устройства от вайфай тоже работают нормально
Добрый день. Очень похожая проблема, только к сожалению у меня не пингуется не один айри.

Не загружается ОС. После извлечения видеокарты все нормально работает.
Доброго времени суток. У меня возникла проблема и хотел бы спросить совета. Недавно во время работы...

Материнка AsRock N68C-GS FX - не работают слоты DDR3 2 шт, DDR2 работают нормально
Здравствуйте, Материнка AsRock N68C-GS FX - не работают слоты DDR3 2 шт, хотя предусмотрены. DDR2...

Перегрузка операции извлечения из потока
подскажите, по заданию необходимо перегрузить операцию извлечения из потока &gt;&gt; для класса...

1
4033 / 2323 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
06.02.2014, 13:41 2
Цитата Сообщение от denfox_pro Посмотреть сообщение
C++
1
2
3
4
5
6
7
Atd& operator =(const Atd& ob)
{
   wprintf(L"Вызвана перезагрузка оператора '='.\n");
   this->~Atd();
   // ...
   return (*this);
}
Вызов деструктора класса в операторе этого же класса и возврат ссылки на уничтоженный объект? Серьезно?
И почему дружественная функция определена внутри тела класса?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2014, 13:41

Перегрузить операции добавления/извлечения из стека
Класс - стек stack. Дополнительно перегрузить следующие операции: + -Добавить элементы в стек -...

Перегрузить операции добавления/извлечения из стека
Определить и реализовать класс. Определить и реализовать операции над данными этого класса....

Операции присваивания
Как можно проиллюстрировать возможности операций присваивания на примере программы?

Перегруженные операции извлечения из потока и вставки в поток
Здравствуйте. Написал программы: создаю студентов и указываю их оценки по предметам, потом сортирую...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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