Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
6 / 6 / 5
Регистрация: 22.11.2012
Сообщений: 95

Неправельно работает конструктор(наверно)

15.07.2013, 13:32. Показов 890. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот класс и вот конструктор думаю знающие люди разберутся я создаю 1 элемент класса точнее указатель first на элемент который будет головным элементом динамического списка... если запустите программу увидите что создается 2 элемента и потом деструктор уничтожает 2й НО! не уничтожает первый и программа завершается..Почему?и работать не через указатель а создавать просто элементы класса то все создается и удаляется очень хорошо и правельно
П.с важно то что есл
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include<iostream>
#include<cstring>
using namespace std;
class human
{
      protected:
              int age;
              int heigh;
              char *name;
              static int copies;
              int obj_id;
      public:
             human();//konstructor
             human(human& h);//konstruktor kopirovania
             ~human();//destruktor 
             int checkid(int id);//ïðîâåðêà åñëè èäøêà îáüåêòà íóæíàÿ íàì 
             void displayinfo();  
};
class node:public human
{
      private:
      node* next;
      public:
      node()
      {
            human();
            next=NULL;
      }
};
int human::copies=0;
int main()
{
    const node *first=new node;
    system("color 1B");
    cout<<"\n";
    system("pause");
    cout<<"==========================ENding PRogramm=======================";
    return 1;
}
 
//--------------------------Konstructor
human::human()
             {
                    copies++;
                    obj_id=copies;
                    cout<<"\ncreating new data with id="<<obj_id;
                    cout<<"\nEnter name:";
                    char tmp_name[20];
                    cin>>tmp_name;
                    int lengh;
                    lengh=strlen(tmp_name);
                    name= new char[lengh];
                    strcpy(name,tmp_name);
                    cout<<"\nEnter age:";
                    cin>>age;
                    cout<<"\nEnter heigh:";
                    cin>>heigh;
                    cout<<"\nEntering data completed\n";
             }
//----------------------------copy constructor
human::human(human& h)
             {
                    copies++;
                    obj_id=copies;
                    cout<<"\ncreating new data with id="<<obj_id;
                    cout<<"\ncopying  information from id="<<h.obj_id;
                    int lengh;
                    lengh=strlen(h.name);
                    name= new char[lengh];
                    strcpy(name,h.name);
                    age=h.age;
                    heigh=h.heigh;
                    cout<<"\nCopiing data compleeted!";
                    label1:
                    cout<<"\nChange smth?\n1)NO\n2)YES";
                    int choise;
                    cout<<"\nYour choise:";
                    cin>>choise;
                    switch(choise)
                    {
                                 case 1: break;
                                 case 2:
                                      {
                                               label2:
                                               cout<<"\nWhat should we change?";
                                               cout<<"\n1)Name";
                                               cout<<"\n2)Age";
                                               cout<<"\n3)Heigh";
                                               cout<<"\nYour choise?";
                                               int choise2;
                                               cin>>choise2;
                                               switch(choise2)
                                               {
                                                             case 1:
                                                                  {delete[] name;
                                                                   cout<<"\nEnter new name:";
                                                                   char tmp_name[20];
                                                                   cin>>tmp_name;
                                                                   int lengh;
                                                                   lengh=strlen(tmp_name);
                                                                   name= new char[lengh];
                                                                   strcpy(name,tmp_name);
                                                                   break;
                                                                   }
                                                             case 2:
                                                                  {
                                                                    cout<<"\nEnter new age:";
                                                                    cin>>age;
                                                                    break;
                                                                  }
                                                             case3:
                                                                   {
                                                                     cout<<"\nEnter heigh:";
                                                                     cin>>heigh;
                                                                     break;
                                                                   }
                                                             default:
                                                                     {
                                                                           cout<<"no such option aviabe!!!";
                                                                           goto label1;
                                                                     }               
                                               }
                                               cout<<"\n Change smth else?\n1)NO\n2)YES";
                                               cout<<"\nYour choise?";
                                               int choise3;
                                               cin>>choise3;
                                               switch(choise3)
                                               {
                                                              case 1:break;
                                                              case 2:goto label2;break;
                                                              default:cout<<"No such option aviable!!rerurning to main prog!";
                                               }
                                               break;
                                      }
                                 default: 
                                      {
                                          cout<<"\nNo such option aviable!!";
                                          goto label1;
                                      }
                                 
                    }
                    cout<<"\nCopying data completed\n";
             }
//-------------------------------------Destruktor
 human::~human()
             {
                     copies--;
                     cout<<"\ndeleting object with id"<<obj_id;
                     cout<<"\n";
                     system("pause");
                     delete[] name;
             }    
//------------------------------------Metodi obiekta
int human::checkid(int id)
{
            if(obj_id==id)
            return 1;
            else 
            return 0;
}
void human::displayinfo()
{
            cout<<"\nDisplaying info fot id:"<<obj_id;
            cout<<"\nName:"<<name<<"\nAge:"<<age<<"\Heigh:"<<heigh;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.07.2013, 13:32
Ответы с готовыми решениями:

Оператор bool неправельно работает!
Начал изучать С++ и решил написать чето сое, чето несино сложное. Почти сразу сталкнулся с проблемой, вот код: #include...

Как записать правильно? Программа работает но код наверно не верен.
#include &lt;iostream&gt; using namespace std; int main() { long sek; cout &lt;&lt; &quot;Enter the number of senonds: &quot;; ...

Неправельно работает Alpha Skins
Проблема заключается в том что на компоненте MEinMenu пропадает скин при наведении на него мышкой Добавлено через 7 минут Да и на...

14
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
15.07.2013, 13:42
Цитата Сообщение от лилиэн Посмотреть сообщение
я создаю 1 элемент класса точнее указатель first
Цитата Сообщение от лилиэн Посмотреть сообщение
НО! не уничтожает первый и программа завершается..Почему?
Чтобы вызывался деструктор, нужно удалять объект через delete ( delete first; ), ты же выделил его через new !
1
6 / 6 / 5
Регистрация: 22.11.2012
Сообщений: 95
15.07.2013, 13:53  [ТС]
Цитата Сообщение от lazybiz Посмотреть сообщение
Чтобы вызывался деструктор, нужно удалять объект через delete ( delete first; ), ты же выделил его через new !
за это спасибо огромное... но почему создаются два элемента класса?? я же всего 1 создаю..
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
15.07.2013, 13:55
Ну так ты же из конструктора node вызываешь конструктор human.
1
6 / 6 / 5
Регистрация: 22.11.2012
Сообщений: 95
15.07.2013, 14:00  [ТС]
Цитата Сообщение от lazybiz Посмотреть сообщение
Ну так ты же из конструктора node вызываешь конструктор human.
ну да 1 раз... а 2й раз???? и еще так куда вставлять удаление...а то я совсем туплю
0
6 / 6 / 5
Регистрация: 22.11.2012
Сообщений: 95
15.07.2013, 14:11  [ТС]
Цитата Сообщение от lazybiz Посмотреть сообщение
Ну так ты же из конструктора node вызываешь конструктор human.
с созданием 2х обьектов разобралась...исправила...но про удаление не поняла... как удалять и где удалять???
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
15.07.2013, 14:23
В main, перед return 1;
1
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.07.2013, 15:18
Цитата Сообщение от лилиэн Посмотреть сообщение
но почему создаются два элемента класса?? я же всего 1 создаю..
Потому что, перед инициализацией объекта производного класса, вызывается констуктор базового класса:
C++
1
2
3
4
5
6
7
8
9
10
11
class node:public human
{
      private:
      node* next;
      public:
      node() // : human() // здесь конструктор (по умолчанию) базового класса вызывается явно или (в вашем случае) не явно.
      {
            //human();
            next=NULL;
      }
};
Поэтому писать, в теле конструктора производного класса, вызов конструктора базового класса - не нужно. Объект создаётся один - node, но в нём, как часть, присутствует и объект базового класса, для инициализации которого, и вызывается конструктор базового класса.

Добавлено через 17 минут
И ошибка в конструкторе:
C++
1
2
3
4
int lengh;
lengh = strlen(tmp_name);
name = new char[lengh + 1]; // памяти нужно выделять на 1 больше ( для  '\0'), чем выдаёт strlen().
strcpy(name, tmp_name);
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    const node *first = new node;
    system("color 1B");
    cout<<"\n";
    
    delete first;
    
    cout<<"==========================ENding PRogramm=======================";
    system("pause");
    return 1;
}
0
6 / 6 / 5
Регистрация: 22.11.2012
Сообщений: 95
15.07.2013, 18:28  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Потому что, перед инициализацией объекта производного класса, вызывается констуктор базового класса:
C++
1
2
3
4
5
6
7
8
9
10
11
class node:public human
{
      private:
      node* next;
      public:
      node() // : human() // здесь конструктор (по умолчанию) базового класса вызывается явно или (в вашем случае) не явно.
      {
            //human();
            next=NULL;
      }
};
Поэтому писать, в теле конструктора производного класса, вызов конструктора базового класса - не нужно. Объект создаётся один - node, но в нём, как часть, присутствует и объект базового класса, для инициализации которого, и вызывается конструктор базового класса.

Добавлено через 17 минут
И ошибка в конструкторе:
C++
1
2
3
4
int lengh;
lengh = strlen(tmp_name);
name = new char[lengh + 1]; // памяти нужно выделять на 1 больше ( для  '\0'), чем выдаёт strlen().
strcpy(name, tmp_name);
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    const node *first = new node;
    system("color 1B");
    cout<<"\n";
    
    delete first;
    
    cout<<"==========================ENding PRogramm=======================";
    system("pause");
    return 1;
}
все так понятно и ясно!!Огромное вам спасибо!!!можно еще 1 вопрос...я хочу сделать целый динамический список node-оф ))узлов то бишь..ну удалять же мне вручную каждый из них в мэйне? как сделать так чтобы при выходе из проги они явно удалялись..как в моем случае после завершения пишется что удаляется объект с н-ой айдишкой... можно сделать чтобы вместо этого при удалении узлов писалось какой узел удаляется.Это надо делать деструктор в node но что и как там удалять?удалять как в случае с first?допустим:
C++
1
2
3
4
5
~node()
{
cout<<"deleting element with id:"<<tmp->obj_id;//вывести ид
delete previous_node->next;//а чтобы удалить то  надо отдельно хранить адрес прошлого узла?
}
Добавлено через 13 минут
сделала так:
C++
1
2
3
4
5
6
7
 ~node()
      {
             cout<<"\ndeleting node with id:"<<this->obj_id;
             delete this;
             cout<<"\n";
             system("pause");
      }
но всеравно не удаляется!!!
новый вариант на всяк случай...можете запустить посмотреть что происходит
Кликните здесь для просмотра всего текста
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
//peregruzka vseh operatorov;
#include<iostream>
#include<cstring>
using namespace std;
class human
{
      protected:
              int age;
              int heigh;
              char *name;
              static int copies;
              int obj_id;
      public:
             human();//konstructor
             human(human& h);//konstruktor kopirovania
             ~human();//destruktor 
             int checkid(int id);//ïðîâåðêà åñëè èäøêà îáüåêòà íóæíàÿ íàì 
             void displayinfo(); 
             human& operator=(human& h);//ïåðåãðóçêà ïðèñâàèâàíèÿ 
};
class node:public human
{
      private:
      node* next;
      public:
      node()
      {
            next=NULL;
      }
      ~node()
      {
             cout<<"\ndeleting node with id:"<<this->obj_id;
             delete this;
             cout<<"\n";
             system("pause");
      }
};
int human::copies=0;
int main()
{
    const node *first=new node;
    human h1;
    human h2(h1);
    human h3;
    h3=h1;
    h1.displayinfo();
    h2.displayinfo();
    h3.displayinfo();
    system("color 1B");
    cout<<"\n";
    system("pause");
    system("cls");
    cout<<"==========================ENding PRogramm===========================";
    return 1;
}
 
//--------------------------Konstructor
human::human()
             {
                    cout<<"\n====================================================================";
                    copies++;
                    obj_id=copies;
                    cout<<"\ncreating new data with id="<<obj_id;
                    cout<<"\nEnter name:";
                    char tmp_name[20];
                    cin>>tmp_name;
                    int lengh;
                    lengh=strlen(tmp_name);
                    name= new char[lengh];
                    strcpy(name,tmp_name);
                    cout<<"\nEnter age:";
                    cin>>age;
                    cout<<"\nEnter heigh:";
                    cin>>heigh;
                    cout<<"\nEntering data completed\n";
                    cout<<"\n====================================================================\n";
                    system("pause");
                    system("cls");
             }
//----------------------------copy constructor
human::human(human& h)
             {
                    cout<<"\n====================================================================";
                    copies++;
                    obj_id=copies;
                    cout<<"\ncreating new data with id="<<obj_id;
                    cout<<"\ncopying  information from id="<<h.obj_id;
                    int lengh;
                    lengh=strlen(h.name);
                    name= new char[lengh];
                    strcpy(name,h.name);
                    age=h.age;
                    heigh=h.heigh;
                    cout<<"\nCopiing data compleeted!";
                    label1:
                    cout<<"\nChange smth?\n1)NO\n2)YES";
                    int choise;
                    cout<<"\nYour choise:";
                    cin>>choise;
                    switch(choise)
                    {
                                 case 1: break;
                                 case 2:
                                      {
                                               label2:
                                               cout<<"\nWhat should we change?";
                                               cout<<"\n1)Name";
                                               cout<<"\n2)Age";
                                               cout<<"\n3)Heigh";
                                               cout<<"\nYour choise?";
                                               int choise2;
                                               cin>>choise2;
                                               switch(choise2)
                                               {
                                                             case 1:
                                                                  {delete[] name;
                                                                   cout<<"\nEnter new name:";
                                                                   char tmp_name[20];
                                                                   cin>>tmp_name;
                                                                   int lengh;
                                                                   lengh=strlen(tmp_name);
                                                                   name= new char[lengh];
                                                                   strcpy(name,tmp_name);
                                                                   break;
                                                                   }
                                                             case 2:
                                                                  {
                                                                    cout<<"\nEnter new age:";
                                                                    cin>>age;
                                                                    break;
                                                                  }
                                                             case3:
                                                                   {
                                                                     cout<<"\nEnter heigh:";
                                                                     cin>>heigh;
                                                                     break;
                                                                   }
                                                             default:
                                                                     {
                                                                           cout<<"no such option aviabe!!!";
                                                                           goto label1;
                                                                     }               
                                               }
                                               cout<<"\n Change smth else?\n1)NO\n2)YES";
                                               cout<<"\nYour choise?";
                                               int choise3;
                                               cin>>choise3;
                                               switch(choise3)
                                               {
                                                              case 1:break;
                                                              case 2:goto label2;break;
                                                              default:cout<<"No such option aviable!!rerurning to main prog!";
                                               }
                                               break;
                                      }
                                 default: 
                                      {
                                          cout<<"\nNo such option aviable!!";
                                          goto label1;
                                      }
                                 
                    }
                    cout<<"\nCopying data completed\n";
                    cout<<"\n====================================================================\n";
                    system("pause");
                    system("cls");
             }
//-------------------------------------Destruktor
 human::~human()
             {
                     copies--;
                     cout<<"\ndeleting object with id"<<obj_id;
                     cout<<"\n";
                     system("pause");
                     delete[] name;
             }   
//-------------------------------------Peregruzka prisvaivania
human& human::operator=(human& h)
{
       cout<<"\n====================================================================";
                    cout<<"\nassigning new data to id="<<obj_id;
                    cout<<"\ncopying  information from id="<<h.obj_id;
                    int lengh;
                    lengh=strlen(h.name);
                    delete name;
                    name= new char[lengh];
                    strcpy(name,h.name);
                    age=h.age;
                    heigh=h.heigh;
                    cout<<"\nRefreshing data compleeted!";
                    label1:
                    cout<<"\nChange smth?\n1)NO\n2)YES";
                    int choise;
                    cout<<"\nYour choise:";
                    cin>>choise;
                    switch(choise)
                    {
                                 case 1: break;
                                 case 2:
                                      {
                                               label2:
                                               cout<<"\nWhat should we change?";
                                               cout<<"\n1)Name";
                                               cout<<"\n2)Age";
                                               cout<<"\n3)Heigh";
                                               cout<<"\nYour choise?";
                                               int choise2;
                                               cin>>choise2;
                                               switch(choise2)
                                               {
                                                             case 1:
                                                                  {delete[] name;
                                                                   cout<<"\nEnter new name:";
                                                                   char tmp_name[20];
                                                                   cin>>tmp_name;
                                                                   int lengh;
                                                                   lengh=strlen(tmp_name);
                                                                   name= new char[lengh];
                                                                   strcpy(name,tmp_name);
                                                                   break;
                                                                   }
                                                             case 2:
                                                                  {
                                                                    cout<<"\nEnter new age:";
                                                                    cin>>age;
                                                                    break;
                                                                  }
                                                             case3:
                                                                   {
                                                                     cout<<"\nEnter heigh:";
                                                                     cin>>heigh;
                                                                     break;
                                                                   }
                                                             default:
                                                                     {
                                                                           cout<<"no such option aviabe!!!";
                                                                           goto label1;
                                                                     }               
                                               }
                                               cout<<"\n Change smth else?\n1)NO\n2)YES";
                                               cout<<"\nYour choise?";
                                               int choise3;
                                               cin>>choise3;
                                               switch(choise3)
                                               {
                                                              case 1:break;
                                                              case 2:goto label2;break;
                                                              default:cout<<"No such option aviable!!rerurning to main prog!";
                                               }
                                               break;
                                      }
                                 default: 
                                      {
                                          cout<<"\nNo such option aviable!!";
                                          goto label1;
                                      }
                                 
                    }
                    cout<<"\nCopying data completed\n";
                    cout<<"\n====================================================================\n";
                    system("pause");
                    system("cls");
       
}
//------------------------------------Metodi obiekta
int human::checkid(int id)
{
            if(obj_id==id)
            return 1;
            else 
            return 0;
}
void human::displayinfo()
{
            cout<<"\n====================================================================";
            cout<<"\nDisplaying info fot id:"<<obj_id;
            cout<<"\nName:"<<name<<"\nAge:"<<age<<"\nHeigh:"<<heigh;
            cout<<"\n====================================================================";
}
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.07.2013, 03:49
Цитата Сообщение от лилиэн Посмотреть сообщение
новый вариант на всяк случай...можете запустить посмотреть что происходит
А ошибки исправить?
Цитата Сообщение от лилиэн Посмотреть сообщение
И ошибка в конструкторе:
Как память выделяли, так и выделяете... И не только в конструкторе.

Цитата Сообщение от лилиэн Посмотреть сообщение
.я хочу сделать целый динамический список node-оф
У вас в коде неправильное отношение между node и human.Открытое наследование тут не подходит (node не является human). В node должно быть поле human (данные узла). И должен быть ещё класс Список (сосотоящий из node) с полями: начало списка, конец списка; методами: создание списка, добавление узла в список, удаление узла из списка, удаление списка. Смотрите реализации списка структур.
1
49 / 23 / 3
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
16.07.2013, 04:04

Не по теме:

во программа, комп повис после неё


Цитата Сообщение от лилиэн Посмотреть сообщение
я хочу сделать целый динамический список node-оф
может std::vector здесь подойдет?
0
16.07.2013, 05:15

Не по теме:

Цитата Сообщение от soican Посмотреть сообщение
может std::vector здесь подойдет?
Для вектора не нужны node. Задание, наверное, именно список создать.

0
6 / 6 / 5
Регистрация: 22.11.2012
Сообщений: 95
16.07.2013, 09:37  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
А ошибки исправить? Как память выделяли, так и выделяете... И не только в конструкторе.


У вас в коде неправильное отношение между node и human.Открытое наследование тут не подходит (node не является human). В node должно быть поле human (данные узла). И должен быть ещё класс Список (сосотоящий из node) с полями: начало списка, конец списка; методами: создание списка, добавление узла в список, удаление узла из списка, удаление списка. Смотрите реализации списка структур.
Вот переделала отношение между узлом и хуманом ...исходная проблема а именно не удаляется обьект все еще в силе
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class node
{
      private:
      human h_data;
      node* next;
      public:
      node()
      {
            next=NULL;
      }
      ~node()
      {
             cout<<"\ndeleting node with id:"<<h_data.obj_id;
             delete this;
             cout<<"\n";
             system("pause");
      }
};
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
16.07.2013, 09:47
Цитата Сообщение от лилиэн Посмотреть сообщение
delete this;
Это зачем Вам?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.07.2013, 13:12
Цитата Сообщение от лилиэн Посмотреть сообщение
а именно не удаляется обьект все еще в силе
Исправить ошибки, с выделением памяти под name, тоже ещё в силе.
Вот так сделайте, и будет удаляться:
C++
1
2
3
4
5
6
 ~node()
      {
             cout << "\ndeleting node" << endl;
             cout<<"\n";
             system("pause");
      }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
    const node *first = new node;
    human h1;
    human h2(h1);
    human h3;
    h3 = h1;
    h1.displayinfo();
    h2.displayinfo();
    h3.displayinfo();
    system("color 1B");
    cout<<"\n";
    system("pause");
    system("cls");
    cout<<"==========================ENding PRogramm===========================";
    
    delete first;
    
    return 1;
}
Добавлено через 4 минуты
Цитата Сообщение от лилиэн Посмотреть сообщение
Вот переделала отношение между узлом и хуманом
А это?
Цитата Сообщение от alsav22 Посмотреть сообщение
В node должно быть поле human (данные узла). И должен быть ещё класс Список (сосотоящий из node) с полями: начало списка, конец списка; методами: создание списка, добавление узла в список, удаление узла из списка, удаление списка. Смотрите реализации списка структур.
Примерно так:
Кликните здесь для просмотра всего текста
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
#include<iostream>
#include<cstring>
using namespace std;
 
class human
{
      protected:
              int age;
              int heigh;
              char *name;
              static int copies;
              int obj_id;
      public:
             human();//konstructor
             human(human& h);//konstruktor kopirovania
             ~human();//destruktor 
             int checkid(int id);//проверка если идшка обьекта нужная нам 
             void displayinfo(); 
             human& operator=(human& h);//перегрузка присваивания 
};
 
int human::copies = 0;
 
class node
{
   public:
      human h;
      node* next;
        
      node() : next(NULL)
      {}
      
      ~node()
      {
             cout << "\ndeleting node" << endl;
             cout<<"\n";
             system("pause");
      }
     
};
 
class list
{
        node *first;
        node *last;
    
    public:
        list() : first(0), last(0)
        {}
        
        void addnode()
        {
            node* add = new node;    // новый элемент списка
            
            if (first == NULL)       // если список пустой, то в начало
                first = add;         // first начало списка
            else  last ->next = add; // если список не пустой, то в конец
            last = add;              // last конец списка
        }
 
        void show()
        {
            node* curr = first;
            while (curr)
            {
                curr ->h.displayinfo();
                curr = curr ->next;
            }
        }
        
        ~list()
        {
                node *temp;
                while (first != 0)
                {
                    temp = first ->next;
                    delete first;
                    first = temp;
                }
        }
};
 
 
int main()
{
    list L;
    
    cout << "\nEnter the number of items in the list: ";
    int n;
    cin >> n;
    
    for (int i = 0; i < n; ++i)
        L.addnode();
    
    L.show();
    
    system("color 1B");
    cout<<"\n";
    system("pause");
    system("cls");
    
    cout<<"==========================ENding PRogramm===========================";
    
    return 1;
}
 
//--------------------------Konstructor
human::human()
             {
                    cout<<"\n====================================================================";
                    copies++;
                    obj_id=copies;
                    cout<<"\ncreating new data with id="<<obj_id;
                    cout<<"\nEnter name:";
                    char tmp_name[20];
                    cin>>tmp_name;
                    int lengh;
                    lengh=strlen(tmp_name);
                    name= new char[lengh + 1];
                    strcpy(name,tmp_name);
                    cout<<"\nEnter age:";
                    cin>>age;
                    cout<<"\nEnter heigh:";
                    cin>>heigh;
                    cout<<"\nEntering data completed\n";
                    cout<<"\n====================================================================\n";
                    system("pause");
                    system("cls");
             }
//----------------------------copy constructor
human::human(human& h)
             {
                    cout<<"\n====================================================================";
                    copies++;
                    obj_id=copies;
                    cout<<"\ncreating new data with id="<<obj_id;
                    cout<<"\ncopying  information from id="<<h.obj_id;
                    int lengh;
                    lengh=strlen(h.name);
                    name= new char[lengh + 1];
                    strcpy(name,h.name);
                    age=h.age;
                    heigh=h.heigh;
                    cout<<"\nCopiing data compleeted!";
                    label1:
                    cout<<"\nChange smth?\n1)NO\n2)YES";
                    int choise;
                    cout<<"\nYour choise:";
                    cin>>choise;
                    switch(choise)
                    {
                                 case 1: break;
                                 case 2:
                                      {
                                               label2:
                                               cout<<"\nWhat should we change?";
                                               cout<<"\n1)Name";
                                               cout<<"\n2)Age";
                                               cout<<"\n3)Heigh";
                                               cout<<"\nYour choise?";
                                               int choise2;
                                               cin>>choise2;
                                               switch(choise2)
                                               {
                                                             case 1:
                                                                  {delete[] name;
                                                                   cout<<"\nEnter new name:";
                                                                   char tmp_name[20];
                                                                   cin>>tmp_name;
                                                                   int lengh;
                                                                   lengh=strlen(tmp_name);
                                                                   name= new char[lengh + 1];
                                                                   strcpy(name,tmp_name);
                                                                   break;
                                                                   }
                                                             case 2:
                                                                  {
                                                                    cout<<"\nEnter new age:";
                                                                    cin>>age;
                                                                    break;
                                                                  }
                                                             case3:
                                                                   {
                                                                     cout<<"\nEnter heigh:";
                                                                     cin>>heigh;
                                                                     break;
                                                                   }
                                                             default:
                                                                     {
                                                                           cout<<"no such option aviabe!!!";
                                                                           goto label1;
                                                                     }               
                                               }
                                               cout<<"\n Change smth else?\n1)NO\n2)YES";
                                               cout<<"\nYour choise?";
                                               int choise3;
                                               cin>>choise3;
                                               switch(choise3)
                                               {
                                                              case 1:break;
                                                              case 2:goto label2;break;
                                                              default:cout<<"No such option aviable!!rerurning to main prog!";
                                               }
                                               break;
                                      }
                                 default: 
                                      {
                                          cout<<"\nNo such option aviable!!";
                                          goto label1;
                                      }
                                 
                    }
                    cout<<"\nCopying data completed\n";
                    cout<<"\n====================================================================\n";
                    system("pause");
                    system("cls");
             }
//-------------------------------------Destruktor
 human::~human()
             {
                     copies--;
                     cout<<"\ndeleting object with id"<<obj_id;
                     cout<<"\n";
                     system("pause");
                     delete[] name;
             }   
//-------------------------------------Peregruzka prisvaivania
human& human::operator=(human& h)
{
       cout<<"\n====================================================================";
                    cout<<"\nassigning new data to id="<<obj_id;
                    cout<<"\ncopying  information from id="<<h.obj_id;
                    int lengh;
                    lengh=strlen(h.name);
                    delete name;
                    name= new char[lengh + 1];
                    strcpy(name,h.name);
                    age=h.age;
                    heigh=h.heigh;
                    cout<<"\nRefreshing data compleeted!";
                    label1:
                    cout<<"\nChange smth?\n1)NO\n2)YES";
                    int choise;
                    cout<<"\nYour choise:";
                    cin>>choise;
                    switch(choise)
                    {
                                 case 1: break;
                                 case 2:
                                      {
                                               label2:
                                               cout<<"\nWhat should we change?";
                                               cout<<"\n1)Name";
                                               cout<<"\n2)Age";
                                               cout<<"\n3)Heigh";
                                               cout<<"\nYour choise?";
                                               int choise2;
                                               cin>>choise2;
                                               switch(choise2)
                                               {
                                                             case 1:
                                                                  {delete[] name;
                                                                   cout<<"\nEnter new name:";
                                                                   char tmp_name[20];
                                                                   cin>>tmp_name;
                                                                   int lengh;
                                                                   lengh=strlen(tmp_name);
                                                                   name= new char[lengh + 1];
                                                                   strcpy(name,tmp_name);
                                                                   break;
                                                                   }
                                                             case 2:
                                                                  {
                                                                    cout<<"\nEnter new age:";
                                                                    cin>>age;
                                                                    break;
                                                                  }
                                                             case3:
                                                                   {
                                                                     cout<<"\nEnter heigh:";
                                                                     cin>>heigh;
                                                                     break;
                                                                   }
                                                             default:
                                                                     {
                                                                           cout<<"no such option aviabe!!!";
                                                                           goto label1;
                                                                     }               
                                               }
                                               cout<<"\n Change smth else?\n1)NO\n2)YES";
                                               cout<<"\nYour choise?";
                                               int choise3;
                                               cin>>choise3;
                                               switch(choise3)
                                               {
                                                              case 1:break;
                                                              case 2:goto label2;break;
                                                              default:cout<<"No such option aviable!!rerurning to main prog!";
                                               }
                                               break;
                                      }
                                 default: 
                                      {
                                          cout<<"\nNo such option aviable!!";
                                          goto label1;
                                      }
                                 
                    }
                    cout<<"\nCopying data completed\n";
                    cout<<"\n====================================================================\n";
                    system("pause");
                    system("cls");
                    return *this;
       
}
//------------------------------------Metodi obiekta
int human::checkid(int id)
{
            if(obj_id==id)
            return 1;
            else 
            return 0;
}
void human::displayinfo()
{
            cout<<"\n====================================================================";
            cout<<"\nDisplaying info fot id:"<<obj_id;
            cout<<"\nName:"<<name<<"\nAge:"<<age<<"\nHeigh:"<<heigh;
            cout<<"\n====================================================================";
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.07.2013, 13:12
Помогаю со студенческими работами здесь

Неправельно работает микрофон Defender HN898
Наушники c микрафоном Defender HN898 .Проблемма вот в чем : На микрафон передается все , что происходит в наушниках , т.е. слушая музыку и...

Программа работает неправельно что не_так то??
программа выводит сумму побочной диагонали program ulb9; var a:array of integer; p,k,x,j,i,n,summ:integer; begin ...

Gpu не корректно работает,наверно
Здрасте,давно мучает вопрос:при включенном fraps , play claw...тд - тоесть програмы для показания фпс и снимания видео(запись не...

Не работает дисплей монитора (точнее, наверно, видеокарта)
Один раз мне уже делали ноутбук, тоже не работал дисплей, точнее видеокарта, т.к. есть HDMI выход и при подключинии к внешнему дисплею...

Определить конструктор без параметров, конструктор с одним параметром, конструктор с двумя параметрами, деструктор
Создать класс «матрица». Данный класс должен содержать элементы типа int, определяющие число строк, столбцов и состояние ошибки. Определить...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru