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

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

Восстановить пароль Регистрация
 
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 120
14.05.2014, 19:04     Исправить код конструктора и деструктора #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
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 19:04     Исправить код конструктора и деструктора
Посмотрите здесь:

Отслеживание входа и выхода с помощью конструктора и деструктора трассировочного типа C++
C++ Исправить код
C++ Какие нюансы в вызове виртуальных функций из конструктора и из деструктора?
Классы. Программирование алгоритмов с использованием конструктора, деструктора, friend - функции инициализации set() и функции вывода результатов prin C++
C++ Классы. Программирование алгоритмов с использованием конструктора, деструктора, friend - функции инициализации set() и функции вывода результатов pri
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
14.05.2014, 19:35     Исправить код конструктора и деструктора #2
Функция strdup создаёт копию строки, но память выделяет не через new[]. Соответственно, и удаление её через delete[] некорректно.
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 120
15.05.2014, 03:16  [ТС]     Исправить код конструктора и деструктора #3
ну так просто без delete[] ?

ребят, а с конструктором что, что делать с нулями в параметрах, что бы норм работало?
alsav22
5282 / 4801 / 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;
}
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 120
15.05.2014, 07:20  [ТС]     Исправить код конструктора и деструктора #5
alsav22, сетеры не работают, не видно как меняется
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.05.2014, 07:32     Исправить код конструктора и деструктора #6
Цитата Сообщение от cHuVbaka Посмотреть сообщение
сетеры не работают, не видно как меняется
Не работают или не видно? Какой, конкретно, сетер не работает? Где не видно?
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 120
15.05.2014, 07:42  [ТС]     Исправить код конструктора и деструктора #7
не видно по cout Новая запись - старая
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.05.2014, 07:50     Исправить код конструктора и деструктора #8
Цитата Сообщение от cHuVbaka Посмотреть сообщение
не видно по cout
При использовании каких сетеров? В какой строке кода используются сетеры?
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 120
15.05.2014, 09:02  [ТС]     Исправить код конструктора и деструктора #9
до - после
Миниатюры
Исправить код конструктора и деструктора  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.05.2014, 09:10     Исправить код конструктора и деструктора #10
Цитата Сообщение от cHuVbaka Посмотреть сообщение
до - после
И что с этого? Конструктор другой. Код, вообще, смотрите, или как? От темы отписался.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2014, 19:47     Исправить код конструктора и деструктора
Еще ссылки по теме:

C++ Переписать код с использованием конструктора
C++ Вызов конструктора и деструктора с использованием пула
Классы. Программирование линейных алгоритмов с использованием конструктора, деструктора, C++

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

Или воспользуйтесь поиском по форуму:
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 120
18.05.2014, 19:47  [ТС]     Исправить код конструктора и деструктора #11
как сделать, что бы было видно как оно изменилось ( как на первом скрине)...
Yandex
Объявления
18.05.2014, 19:47     Исправить код конструктора и деструктора
Ответ Создать тему
Опции темы

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