Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 73
1

Добавить конструктор копирования в программу

10.04.2018, 18:44. Показов 542. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Знаю, что разбираться в чужом коде дело очень веселое, но нужна помощь с добавлением конструктора копирования в программу.
Пробовал сам это сделать, но ничего не вышло, скорее всего просто не понимаю. Зачем он здесь - не знаю, просто в задание было нужно его использовать.
Буду благодарен за помощь.

Старался в коде вырезать, что можно было:
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
#include <string.h>
#include <iostream>
using namespace std;
 
class CONDITIONER
{
public:
    CONDITIONER(char* fName);
    CONDITIONER();
    virtual ~CONDITIONER();
    virtual void Open() = 0;
    virtual void get() = 0;
    virtual void set() = 0;
 
protected:
    char *GadgetName;
    
};
CONDITIONER::CONDITIONER() {}
 
CONDITIONER::CONDITIONER(char* fName)
{
    GadgetName = 0;
 
}
CONDITIONER::~CONDITIONER()
{
    if (GadgetName != 0)
    {
        delete[] GadgetName;
    }
    cout << "Destructor Deleted Name data " << endl;
 
}
 
 
class Control : public CONDITIONER
{
public:
    Control(char* fName);
    Control();
    virtual ~Control();
    virtual void Open();
    virtual void get();
    virtual void set();
    void temperaturefunc();
    
 
private:
    int *temperature;
    int pretemp = 0;
};
 
Control::Control() : CONDITIONER()
{}
 
Control::Control(char* fName) : CONDITIONER(fName)
{
 
}
Control::~Control()
{
    if (temperature != 0)
    {
        delete temperature;
    }
    cout << "Destructor Deleted temperature data" << endl;
}
void Control::Open()
 
{
 
    GadgetName = new char[30];
    cin >> GadgetName;
    
    cout << "Device is ready for work." << endl;
    
}
 
 
void Control::get() {
    cout << "Name:" << GadgetName << endl;
    cout << "Temperature at this moment:" << *temperature << endl;
    cout << "Preferred temperature:" << pretemp << endl;
}
 
void Control::temperaturefunc() {
 
    temperature = new int;
    *temperature = (rand() % 40 - 20);
    cout << "Temperature at this moment:" << *temperature << endl;
}
 
void Control::set() {
    int choice;
    cout << "Set preferred temperature - 1" << endl;
    cout << "Set name - 2" << endl;
    cin >> choice;
 
    if (choice == 1) {
        cin >> pretemp;
 
    }
    if (choice == 2) {
        cin >> GadgetName;
 
    }
 
}
 
 
int main()
 
{
    int choice;
 
    Control Conditioner("nothing");
    cout << "Please, enter conditioner's model: ";
    Conditioner.Open();
    
    Conditioner.temperaturefunc();
 
 
    while (true) {
 
        cout << "Show data - 1" << endl;
        cout << "Set the temperature and new name - 2" << endl;
        cout << "exit - 3" << endl;
    
 
        cin >> choice;
 
 
        if (choice == 1) {
 
            Conditioner.get();
 
 
        }
        if (choice == 2) {
 
            Conditioner.set();
 
        }
 
        if (choice == 3) {
            
            break;
            cout << endl;
        }
 
 
    }
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2018, 18:44
Ответы с готовыми решениями:

Добавить в программу конструктор копирования
Задача состоит в следующем : нужно добавить в программу конструктор копирования. Искал на многих...

Подскажите пожалуйста как добавить конструктор копирования в готовую программу
Вот код программы: # include &lt;iostream&gt; # include &lt;conio.h&gt; # include &lt;string&gt; # include...

Нужно добавить конструктор копирования !
Здравствуйте! Помогите написать конструктор копирования к данной задаче. Честно говоря, не понимаю...

Вставить конструктор копирования в программу
Составить описание класса одномерных массивов строк, каждая строка задается длиной и указателем на...

5
12 / 11 / 5
Регистрация: 30.11.2017
Сообщений: 76
10.04.2018, 19:04 2
C++
1
2
3
4
5
6
//Конструктор копирования
CONDITIONER::CONDITIONER(const CONDITIONER& K)
{
   GadgetName = new char[strlen(K.GadgetName)+1];
   GadgetName=K.GadgetName;
}
1
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 73
10.04.2018, 19:11  [ТС] 3
Спасибо. Но будет ли он выполнять свою функцию, плюс нужно ли оставлять, то что в 73 строке?
0
12 / 11 / 5
Регистрация: 30.11.2017
Сообщений: 76
10.04.2018, 19:23 4
69-79 это метод установки имени устройства с клавиатуры оставлять или нет откуда я знаю.

Добавлено через 1 минуту
Работать для базового класса будет, для класса наследника его надо модифицировать в наследовании.
0
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 73
10.04.2018, 19:34  [ТС] 5
Просто спрашивал про эту строку конкретно, ибо там выделяется память под переменную "GadgetName"
0
12 / 11 / 5
Регистрация: 30.11.2017
Сообщений: 76
10.04.2018, 19:58 6
Ну если 30 символов для имени достаточно то вполне корректно.

Добавлено через 15 минут
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
#include <string.h>
#include <iostream>
#include <cstdlib>
using namespace std;
 
class CONDITIONER
{
public:
    CONDITIONER(char* fName);
    CONDITIONER();
    CONDITIONER(const CONDITIONER& K);
    virtual ~CONDITIONER();
    virtual void Open() = 0;
    virtual void get() = 0;
    virtual void set() = 0;
 
protected:
    char *GadgetName;
 
};
CONDITIONER::CONDITIONER() {}
//Конструктор копирования
CONDITIONER::CONDITIONER(const CONDITIONER& K)
{
GadgetName = new char[strlen(K.GadgetName)+1];
GadgetName=K.GadgetName;
}
CONDITIONER::CONDITIONER(char* fName)
{
    GadgetName = 0;
 
}
CONDITIONER::~CONDITIONER()
{
    if (GadgetName != 0)
    {
        delete[] GadgetName;
    }
    cout << "Destructor Deleted Name data " << endl;
 
}
 
 
class Control : public CONDITIONER
{
public:
    Control(char* fName);
    Control(const Control& K);
    Control();
    virtual ~Control();
    virtual void Open();
    virtual void get();
    virtual void set();
    void temperaturefunc();
 
 
private:
    int *temperature;
    int pretemp = 0;
};
 
Control::Control() : CONDITIONER()
{}
 
Control::Control(char* fName) : CONDITIONER(fName)
{
 
}
//Конструктор копирования
Control::Control(const  Control& K) : CONDITIONER(K)
{
   temperature=K.temperature;
   pretemp=K.pretemp;
}
 
Control::~Control()
{
    if (temperature != 0)
    {
        delete temperature;
    }
    cout << "Destructor Deleted temperature data" << endl;
}
void Control::Open()
 
{
 
    GadgetName = new char[30];
    cin >> GadgetName;
 
    cout << "Device is ready for work." << endl;
 
}
 
 
void Control::get() {
    cout << "Name:" << GadgetName << endl;
    cout << "Temperature at this moment:" << *temperature << endl;
    cout << "Preferred temperature:" << pretemp << endl;
}
 
void Control::temperaturefunc() {
 
    temperature = new int;
    *temperature = (rand() % 40 - 20);
    cout << "Temperature at this moment:" << *temperature << endl;
}
 
void Control::set() {
    int choice;
    cout << "Set preferred temperature - 1" << endl;
    cout << "Set name - 2" << endl;
    cin >> choice;
 
    if (choice == 1) {
        cin >> pretemp;
 
    }
    if (choice == 2) {
        cin >> GadgetName;
 
    }
 
}
 
 
int main()
 
{
    int choice;
 
    Control Conditioner("nothing");
    cout << "Please, enter conditioner's model: ";
    Conditioner.Open();
 
    Conditioner.temperaturefunc();
 
 
    while (true) {
 
        cout << "Show data - 1" << endl;
        cout << "Set the temperature and new name - 2" << endl;
        cout << "exit - 3" << endl;
 
 
        cin >> choice;
 
 
        if (choice == 1) {
 
            Conditioner.get();
 
 
        }
        if (choice == 2) {
 
            Conditioner.set();
 
        }
 
        if (choice == 3) {
 
            break;
            cout << endl;
        }
 
 
    }
    system("pause");
    return 0;
}
1
10.04.2018, 19:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2018, 19:58
Помогаю со студенческими работами здесь

Классы (объединить мой класс с проверкой на его работу, убрать гото и добавить конструктор копирования)
Доброго времени суток. Подскажите как обьеденить мой класс с проверкой на его работу, убрать...

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных...

Конструктор класса, конструктор копирования запускается не тот который нужен
Есть такой конструктор: Neuron::Neuron(int iType_activation_funk) { this-&gt;iType_act =...

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru