Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 122
#1

Исправить код конструктора и деструктора - C++

14.05.2014, 19:04. Просмотров 273. Ответов 10
Метки нет (Все метки)

Что-то не так с конструктором, так нельзя обнулять?
нужно найти ошибку в деструкторе...
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
#include <iostream>
using namespace std;
 
class Book
{
    char* _surname; // фамилия автора
char* _name; // имя автора
char* _patronymic; // отчество автора
int _year; // год издательства
char* _book; // название книги
int _count; // количество страниц
public:
 
    Book(char* surname, char* name, char* patronymic)
        :_count(0), _year(0), _surname(NULL), _name(NULL), _patronymic(NULL), _book(NULL)
    {
        SetSurname(surname);
SetName(name);
SetPatronymic(patronymic);
cout <<"Вызов конструктора!!!"<<endl;
    }
 
    ~Book(void)
    {
        if(_surname != NULL)
            delete[] _surname;
 
        if(_name != NULL)
            delete[] _name;
 
        if(_patronymic != NULL)
            delete[] _patronymic;
 
        if(_book != NULL)
            delete[] _book;
        cout <<"Вызов деструктора!!!"<<endl;
    }
 
    void SetSurname(char* surname) 
    {
        cout <<"Метод SetSurname - ";
 
        if(_surname != NULL) 
        {
            cout <<"Старая запись: " << _surname << " ";
 
            delete[] _surname; 
        }
 
        _surname = _strdup(surname); // выдиляем и копируем новое значение
 
        cout <<"Новая запись: " << _surname<<endl;
    }
 
    void SetName(char* name)
    {
        cout <<"Метод SetName - ";
 
        if(_name != NULL)
        {
            cout <<"Старая запись: " << _name << " ";
 
            delete[] _name;
        }
 
        _name = _strdup(name);
 
        cout <<"Новая запись: " << _name<<endl;
    }
    void SetPatronymic(char* patronymic)
    {
        cout <<"Метод SetPatronymic - ";
 
        if(_patronymic != NULL)
        {
            cout <<"Старая запись: " << _patronymic << " ";
 
            delete[] _patronymic;
        }
 
        _patronymic = _strdup(patronymic);
 
        cout <<"Новая запись: " << _patronymic<<endl;
    }
 
    void SetBook(char* book)
    {
        cout <<"Метод SetBook - ";
 
        if(_book != NULL)
        {
            cout <<"Старая запись: " << _book << " ";
 
            delete[] _book;
        }
 
        _book = _strdup(book);
 
        cout <<"Новая запись: " << _book;
    }
 
    void SetYear(int year)
    {
        _year = year;
    }
 
    void SetCount(int count)
    {
        _count = count;
    }
 
    const char* GetSurname()const
    {
        return _surname;
    }
 
    const char* GetName()const
    {
        return _name;
    }
 
    const char* GetPatronymic()const
    {
        return _patronymic;
    }
 
    const char* GetPost()const
    {
        return _book;
    }
 
    const int GetYear()const
    {
        return _year;
    }
 
    const int GetCount()const
    {
        return _count;
    }
};
 
int main()
{
    setlocale(LC_ALL, "RUS"); // рус язык
Book* book = new Book("Syrname", "Name", "Patronymic");
book->SetYear(1980);
book->SetCount(3000);
cout << book->GetSurname() << " " << book->GetName() <<endl;
delete book;
    system("PAUSE");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 19:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Исправить код конструктора и деструктора (C++):

Вызов конструктора и деструктора с использованием пула - C++
У меня есть некоторая область памяти (указатель на её начало и размер в байтах), часть которой необходимо превратить в объект. У объекта...

Создать класс и проверить работу конструктора и деструктора - C++
Вечер добрый! Собственно вопрос, нужно определить класс и создать конструктор, деструктор, указатель на экземпляр класса + определить в...

Классы. Программирование линейных алгоритмов с использованием конструктора, деструктора, - C++
Классы. Программирование линейных алгоритмов с использованием конструктора, деструктора, friend - функции инициализации set() и функции...

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

Отслеживание входа и выхода с помощью конструктора и деструктора трассировочного типа - C++
Здравствуйте, у меня такой вопросик по объектно-ориентированному программированию. Требуется показать, как отслеживание входа в блок и...

Классы. Программирование алгоритмов с использованием конструктора, деструктора, friend - функции инициализации set() и функции вывода результатов pri - C++
Братаны, выручайте! Общая постановка. Пользовательский класс Х должен содержать необходимые элементы-данные, которые создаются в...

10
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
14.05.2014, 19:35 #2
Функция strdup создаёт копию строки, но память выделяет не через new[]. Соответственно, и удаление её через delete[] некорректно.
0
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 122
15.05.2014, 03:16  [ТС] #3
ну так просто без delete[] ?

ребят, а с конструктором что, что делать с нулями в параметрах, что бы норм работало?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.05.2014, 06:48 #4
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
#include <iostream>
using namespace std;
 
class Book
{
    char* _surname; // фамилия автора
    char* _name; // имя автора
    char* _patronymic; // отчество автора
    int _year; // год издательства
    char* _book; // название книги
    int _count; // количество страниц
    public:
 
    Book(char* surname, char* name, char* patronymic)
        :_count(0), _year(0), _book(NULL)
    {
         _surname = _strdup(surname);
         _name = _strdup(name);
         _patronymic = _strdup(patronymic);
         cout <<"Вызов конструктора!!!"<<endl;
    }
 
    ~Book(void)
    {
        free(_surname);
        free(_name);
        free(_patronymic);
        free(_book);
        cout <<"Вызов деструктора!!!"<<endl;
    }
 
    void SetSurname(char* surname) 
    {
        cout <<"Метод SetSurname - ";
 
        if(_surname != NULL) 
        {
            cout <<"Старая запись: " << _surname << " ";
 
            free(_surname); 
        }
 
        _surname = _strdup(surname); // выдиляем и копируем новое значение
 
        cout <<"Новая запись: " << _surname << endl;
    }
 
    void SetName(char* name)
    {
        cout <<"Метод SetName - ";
 
        if(_name != NULL)
        {
            cout <<"Старая запись: " << _name << " ";
 
            free(_name);
        }
 
        _name = _strdup(name);
 
        cout <<"Новая запись: " << _name<<endl;
    }
    void SetPatronymic(char* patronymic)
    {
        cout <<"Метод SetPatronymic - ";
 
        if(_patronymic != NULL)
        {
            cout <<"Старая запись: " << _patronymic << " ";
 
            free(_patronymic);
        }
 
        _patronymic = _strdup(patronymic);
 
        cout <<"Новая запись: " << _patronymic<<endl;
    }
 
    void SetBook(char* book)
    {
        cout <<"Метод SetBook - ";
 
        if(_book != NULL)
        {
            cout <<"Старая запись: " << _book << " ";
 
            free(_book);
        }
 
        _book = _strdup(book);
 
        cout <<"Новая запись: " << _book;
    }
 
    void SetYear(int year)
    {
        _year = year;
    }
 
    void SetCount(int count)
    {
        _count = count;
    }
 
    const char* GetSurname()const
    {
        return _surname;
    }
 
    const char* GetName()const
    {
        return _name;
    }
 
    const char* GetPatronymic()const
    {
        return _patronymic;
    }
 
    const char* GetPost()const
    {
        return _book;
    }
 
    const int GetYear()const
    {
        return _year;
    }
 
    const int GetCount()const
    {
        return _count;
    }
};
 
int main()
{
    setlocale(LC_ALL, "RUS"); // рус язык
    Book* book = new Book("Syrname", "Name", "Patronymic");
    book->SetYear(1980);
    book->SetCount(3000);
    cout << book->GetSurname() << " " << book->GetName() <<endl;
    delete book;
    system("PAUSE");
    return 0;
}
0
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 122
15.05.2014, 07:20  [ТС] #5
alsav22, сетеры не работают, не видно как меняется
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.05.2014, 07:32 #6
Цитата Сообщение от cHuVbaka Посмотреть сообщение
сетеры не работают, не видно как меняется
Не работают или не видно? Какой, конкретно, сетер не работает? Где не видно?
0
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 122
15.05.2014, 07:42  [ТС] #7
не видно по cout Новая запись - старая
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.05.2014, 07:50 #8
Цитата Сообщение от cHuVbaka Посмотреть сообщение
не видно по cout
При использовании каких сетеров? В какой строке кода используются сетеры?
0
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 122
15.05.2014, 09:02  [ТС] #9
до - после
0
Миниатюры
Исправить код конструктора и деструктора  
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.05.2014, 09:10 #10
Цитата Сообщение от cHuVbaka Посмотреть сообщение
до - после
И что с этого? Конструктор другой. Код, вообще, смотрите, или как? От темы отписался.
0
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 122
18.05.2014, 19:47  [ТС] #11
как сделать, что бы было видно как оно изменилось ( как на первом скрине)...
0
18.05.2014, 19:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2014, 19:47
Привет! Вот еще темы с ответами:

Классы. Программирование алгоритмов с использованием конструктора, деструктора, friend - функции инициализации set() и функции вывода результатов prin - C++
Братаны, выручайте!:help: Общая постановка. Пользовательский класс Х должен содержать необходимые элементы-данные, которые создаются в...

Переписать код с использованием конструктора - C++
Не совсем понятно как эту программу написать с использованием конструктора... не могли бы объяснить как ее переделать? #include...

[template] почему код не компилируется без конструктора - C++
добрый вечер. вопрос поместил прямо в коде. http://rextester.com/AESO94403 #include &lt;iostream&gt; #include &lt;string&gt; #include...

Исправить ошибку "no matching function for call" при использовании конструктора - C++
Здравствуйте, ребята. Такая проблема. Объявил класс class phoneClass { private: float *thickness, //Толщина ...


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

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

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