Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Antikl
с++
284 / 280 / 150
Регистрация: 15.07.2015
Сообщений: 1,515
Завершенные тесты: 6
#1

Реализация конструктора копирования и перегрузки =

08.04.2017, 20:48. Просмотров 780. Ответов 6
Метки нет (Все метки)

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
#include <iostream>
 
#include <cstring>
 
using namespace std;
 
class Cow{
private:
    char name[80];
    char * hobby;
    double weight;
public:
//конструктор по умолчанию
Cow()
{
    strcpy(name,"Буренка\0");
   hobby=new char[10];
    strcpy(hobby, "Сено");
    weight = 1080;
}
//конструктор заданный пользователем
Cow(const char * nm, const char*ho, double wt){
 
int len=strlen(ho);
 
hobby=new char[len+1];
strcpy(hobby, ho);
len=strlen(nm);
strcpy(name, nm);
weight = wt;
}
//конструктор копирования
Cow(const Cow& s){
strcpy(name, s.name);
strcpy(hobby, s.hobby);
weight=s.weight;
}
//Деструктор
~Cow()
{
cout<<"\nБаць и удалились!\n";
delete [] hobby;
}
//Перегрузка =
Cow operator=(const Cow&h)
{
           Cow j;
 j.hobby=strcpy(hobby, h.hobby);
//j.name=strcpy(name, h.name);
j.weight=weight;
return j;
}
//Вывод в консоль
void ShowCow(){
cout<<"Имя: "<<name<<"\n";
cout<<"Что любит кушать: "<<hobby<<endl;
cout<<"Вес: "<<weight<<"кг."<<endl;
}
};
int main(){
Cow mun("Торри", "Цветы",1234);
mun.ShowCow();
cout<<endl;
Cow bui;
bui.ShowCow();
Cow bj(mun);
bj.ShowCow();
    return 0;
}
есть класс Cow как в нем реализовать конструктор копирования и перегрузку =, вообще не получаешься

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2017, 20:48
Ответы с готовыми решениями:

Реализация конструктора копирования для класса
P.S плохо с русским Этот конструктор копирования сломал мне мозг И вот что...

В чём отличия конструктора копирования и конструктора перемещения? Где и как их нужно использовать?
Помогите разобраться в копирующем и перемещающем конструкторах. В чём их...

Ошибка перегрузки конструктора
Есть класс в котором 2 конструктора #ifndef DATE_H #define DATE_H class...

Пример перегрузки конструктора
Приведите простой пример пожалуйста.

Отличие перегрузки operator() от конструктора
Добрый день! Подскажите пожалуйста, в чем отличие перегрузки operator() от...

6
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
08.04.2017, 20:53 #2
Лучший ответ Сообщение было отмечено Antikl как решение

Решение

Цитата Сообщение от Antikl Посмотреть сообщение
как в нем реализовать конструктор копирования
В параметрах ссылка на константный объект класса. Копируешь из него name, weight, определяешь длину строки по указателю hobby, выделяешь нужный размер памяти, копируешь в неё строку.
1
GbaLog-
Любитель чаепитий
3160 / 1466 / 462
Регистрация: 24.08.2014
Сообщений: 5,190
Записей в блоге: 1
Завершенные тесты: 2
08.04.2017, 20:55 #3
Лучший ответ Сообщение было отмечено Antikl как решение

Решение

Цитата Сообщение от Antikl Посмотреть сообщение
weight = 1080;
ничё у вас там коровы весят.
по теме:
C++
1
2
3
4
5
6
7
Cow & operator=(const Cow&h)
{
 strcpy(hobby, h.hobby);
 strcpy(name, h.name);
 weight=h.weight;
 return *this;
}
но тут надо учитывать ещё длину строк.
конструктор копирования правильно реализован.
1
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
08.04.2017, 20:58 #4
Лучший ответ Сообщение было отмечено Antikl как решение

Решение

В операторе присваивания почти то же самое, только добавляется освобождение памяти под hobby, прежде, чем выделить новую, и возвращается из оператора *this.

Добавлено через 1 минуту
Цитата Сообщение от GbaLog- Посмотреть сообщение
конструктор копирования правильно реализован.
А память выделить?
2
Antikl
с++
284 / 280 / 150
Регистрация: 15.07.2015
Сообщений: 1,515
Завершенные тесты: 6
08.04.2017, 21:22  [ТС] #5
ну то для примера что коровы так весят
C++
1
2
3
4
5
6
7
8
9
//конструктор копирования
Cow(const Cow&h)
{
int len = strlen(h.hobby);
hobby = new char[len+1];
strcpy(hobby, h.hobby);
 strcpy(name, h.name);
 weight=h.weight;
}
C++
1
2
3
4
5
6
7
8
9
10
Cow operator=(const Cow&h)
{
delete[] hobby;
int len = strlen(h.hobby);
hobby = new char[len+1];
strcpy(hobby, h.hobby);
 strcpy(name, h.name);
 weight=h.weight;
 return *this;
}
пишет

Предупреждение 1 warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

Добавлено через 6 минут
Цитата Сообщение от nd2 Посмотреть сообщение
В операторе присваивания почти то же самое, только добавляется освобождение памяти под hobby, прежде, чем выделить новую, и возвращается из оператора *this.
я реализовал нормально так? проверил работает только предуприждение пишет
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
08.04.2017, 21:31 #6
Лучший ответ Сообщение было отмечено Antikl как решение

Решение

Цитата Сообщение от Antikl Посмотреть сообщение
я реализовал нормально так? проверил работает только предуприждение пишет
В общем, нормально. Обычно, в операторе присваивания, ещё проверяют присваивание самому себе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Cow operator=(const Cow&h)
{
    if (this != &h)
    {
        delete[] hobby;
        int len = strlen(h.hobby);
        hobby = new char[len+1];
        strcpy(hobby, h.hobby);
        strcpy(name, h.name);
        weight=h.weight;
    }
    return *this;
}
1
Antikl
с++
284 / 280 / 150
Регистрация: 15.07.2015
Сообщений: 1,515
Завершенные тесты: 6
08.04.2017, 21:36  [ТС] #7
Цитата Сообщение от nd2 Посмотреть сообщение
В общем, нормально. Обычно, в операторе присваивания, ещё проверяют присваивание самому себе:
Спасибо
0
08.04.2017, 21:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2017, 21:36

Добавить в программу конструкторы, копирования, удаления и перегрузки
Очень срочно надо переработать прогу, позарез, буду примного благодарен. Надо...

Касательно конструктора копирования
Вопрос следующий. У меня есть класс &quot;Точки&quot; есть класс &quot;группы&quot; и есть класс...

Ошибка в перегрузке конструктора копирования
// strimem.cpp // Класс String с экономией памяти // Перегружаемая операция...


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

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

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