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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
HaRuKy
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 290
#1

Конструктор и деструктор - C++

22.03.2014, 08:59. Просмотров 502. Ответов 8
Метки нет (Все метки)

Всем привет!
В программе не работает конструктор с параметрами! Можете подсказать чего я не так делаю?
Задание: есть класс изделия, содержащий следующие поля:
имя – char*
шифр – char*
количество – int

Текст программы:
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
#include <iostream.h>
class izd
 {  private:
     char name[10];
     char code[10];
     int count;
    public:
    izd(): count(3)      //constr_bez_param
      {
           strcpy(name,"Panasonic");
       strcpy(code,"W2210");
       cout<<"constr_1"<<endl;
       show();
          }
       // ~izd(){}
       izd(char _name,char _code, int _count)       //constr_s_param
      {
           name=_name;
           code=_code;
           count=_count;
           cout<<"constr_2"<<endl;
           show();
      }
    void show()
      {
       cout<<name<<endl;
       cout<<code<<endl;
       cout<<count<<endl;
      }
        void input()
      {
       cout<<"\n Name:";  cin>>name;
       cout<<"\n Code:";  cin>>code;
           cout<<"\n Count:"; cin>>count;
      }
 
 };
 
 void main()
{
 izd model;
 model.input();
 model.show();
 system("pause");
 return;
}
Благодарю за ранее!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6187 / 5790 / 1875
Регистрация: 18.12.2011
Сообщений: 14,790
Завершенные тесты: 1
22.03.2014, 10:02     Конструктор и деструктор #2
C++
1
2
3
4
5
6
izd(char* _name,char* _code, int _count)       //constr_s_param
      {
           strcpy(name,_name);
           strcpy(code,_code);
           count=_count;
       }
HaRuKy
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 290
22.03.2014, 11:44  [ТС]     Конструктор и деструктор #3
zss, можете подсказать, а почему при компиляции программы отображается только первый конструктор, а второй не отображается?
Миниатюры
Конструктор и деструктор  
MicM
821 / 488 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
22.03.2014, 11:57     Конструктор и деструктор #4
HaRuKy, в данном случае он и не должен вызываться.
У тебя есть 2 конструктора, один с параметрами, другой - по умолчанию. Т.к. при создании объекта, ты не указываешь никакие параметры, то и вызывается первый конструктор. Если же написал бы, например:
C++
1
izd model ("one", "two", 1);
то, вызвался бы второй конструктор
HaRuKy
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 290
22.03.2014, 12:38  [ТС]     Конструктор и деструктор #5
Осталось добавить конструктор копирования
Написал код конструктора копирования по образцу, но не понимаю как он работает
В главную функцию добавлю переменную model2 класс izd, но при компиляции 3й конструктор не отображается

C++
1
2
3
4
5
izd ( izd &s){//constr_copy
    name[50]=s.name[50];
    code[30]=s.code[30];
    count=s.count;
}
C++
1
2
3
4
5
6
7
8
9
10
void main()
{
 izd model;
 izd model1("Canon","LBP3200",5);
 izd model2();
 model.input();
 model.show();
 system("pause");
 return;
}
Миниатюры
Конструктор и деструктор  
MicM
821 / 488 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
22.03.2014, 13:02     Конструктор и деструктор #6
Цитата Сообщение от HaRuKy Посмотреть сообщение
Осталось добавить конструктор копирования
Лишнее. Компилятор автоматически генерирует подобный конструктор.
http://ru.wikipedia.org/wiki/Конструктор_копирования
C++
1
2
3
4
5
6
7
8
9
void main()
{
 izd model;
 izd model1("Canon","LBP3200",5);
 izd model2 (model1);
 model2.show();
 system("pause");
 return 0;
}
Посмотрите на результат.
HaRuKy
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 290
22.03.2014, 13:15  [ТС]     Конструктор и деструктор #7
Копирует тип int правильно, а вот тип char не совсем
В результате компиляции я получаю следующее сообщение:
Миниатюры
Конструктор и деструктор  
MicM
821 / 488 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
22.03.2014, 13:25     Конструктор и деструктор #8
HaRuKy, я так понял, вы все-таки хотите реализовать свой конструктор копирования, тогда попробуйте в методе так написать:
C++
1
2
3
4
5
6
izd (izd& s)//constr_copy
{
    strcpy (name, s.name);
    strcpy (code, s.code);
    count = s.count;
}
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
#include <iostream>
#include <cstring>
using namespace std;
 
class izd
 {  private:
     char name[10];
     char code[10];
     int count;
    public:
    izd(): count(3)      //constr_bez_param
      {
           strcpy(name,"Panasonic");
       strcpy(code,"W2210");
       cout<<"constr_1"<<endl;
       show();
          }
       // ~izd(){}
    izd(char* _name,char* _code, int _count)       //constr_s_param
      {
           strcpy(name,_name);
           strcpy(code,_code);
           count=_count;
           cout <<"constr_s_pa\n";
       }
    void show()
      {
       cout<<name<<endl;
       cout<<code<<endl;
       cout<<count<<endl;
      }
        void input()
      {
       cout<<"\n Name:";  cin>>name;
       cout<<"\n Code:";  cin>>code;
           cout<<"\n Count:"; cin>>count;
      }
 
 };
 
void main()
{
izd model;
 izd model1("Canon","LBP3200",5);
 izd model2(model1);
 model2.show();
 system("pause");
 return;
}
Посмотрите на результат выполнения, и увидите, что необязательно самим писать конструктор копирования
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2014, 13:29     Конструктор и деструктор
Еще ссылки по теме:

C++ Конструктор и деструктор
C++ С++. Конструктор, деструктор
Конструктор, деструктор C++
Конструктор и деструктор C++

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

Или воспользуйтесь поиском по форуму:
HaRuKy
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 290
22.03.2014, 13:29  [ТС]     Конструктор и деструктор #9
Все понял! Благодарю за помощь!
Yandex
Объявления
22.03.2014, 13:29     Конструктор и деструктор
Ответ Создать тему
Опции темы

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