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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Кольцевой буфер http://www.cyberforum.ru/cpp-beginners/thread923380.html
Здравствуйте, уважаемые пользователи. Мне поставили задачу, которую я один решить не могу и поэтому обращаюсь за помощью к вам. Итак, у нас есть файл и мне нужно отфильтровать его. Но он просто огромный и мне сказали реализовать эту процедуру с помощью кольцевого буфера. Я не до конца понимаю каким образом мне сформировать его и сделать так, чтобы при окончании буфера он автоматически скидывал...
C++ Перемещение содержимого из одного байта в другой байт Здравствуйте все. Есть char A=3; char B=0; Как переместить физическое содержание битов из байта A в байт В, чтобы стало A=0 B=3; http://www.cyberforum.ru/cpp-beginners/thread923361.html
Применение полученных знаний. Больная тема C++
Здравствуйте, уважаемые друзья! Хотел бы немножко поговорить с опытными людьми и узнать, как научиться применять свои знания, полученные в процессе обучения ? Вот предположим я - студент 4го курса, отличник, учусь на программиста, но есть одна проблема: я совершенно не понимаю, как применять свои знания. Я прочитал несколько книг по Си и Си++ (вне программы университета) справлялся с задачами,...
Замена виртуальных функций шаблонами C++
Такая задача - нужно заменить виртуальные функции шаблонами. Можно сделать так: struct Derived1; struct Derived2; template <typename T> struct Base { void f(); };
C++ Передача звука, приём http://www.cyberforum.ru/cpp-beginners/thread923235.html
Доброго времени суток. Вот задумал создать, что то на подобии голосового чата, но вот нет навыков в данной сфере. Может, кто то уже делал что то подобное, если можно подскажите.
C++ push_back vs emplace_back собственно тема обсуждалась там, я сделал вывод, что надо использовать emplace_back теперь, вроде как эффективнее местами. Одно визуальное изуальное отличие я уже нашёл // list::emplace_back #include <iostream> #include <list> int main () { std::list< std::pair<int,char> > mylist,mylist1; mylist.emplace_back(10,'a'); подробнее

Показать сообщение отдельно
лилиэн
6 / 6 / 0
Регистрация: 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====================================================================";
}
 
Текущее время: 20:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru