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

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

Войти
Регистрация
Восстановить пароль
 
Guy Kawasaki
2 / 1 / 0
Регистрация: 07.11.2013
Сообщений: 42
#1

Конструктор копирования и оператор присваивания - C++

05.12.2013, 23:50. Просмотров 237. Ответов 0
Метки нет (Все метки)

Спасибо всем тем, кто заглянул на огонек.
Проблема: Реализовать конструктор копирования и оператор присваивания для класса User.
Вопрос: В чем разница между конструктором копирования и оператором присваивания?

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
#ifndef MYSKYPE_H
#define MYSKYPE_H
#include <string>
 
using namespace std;
 
class User
{
private:
        int id, friend_number, ban_number;
        string nickname, password, email;
        User *friend_list, *ban_list;
public:
        User();
        User(int identifier, int numF, int numB, string nick, string pasw, string mail, User *frd, User *ban);
        User(const User &user_copy);
        User &operator = (const User &original);
        ~User();
 
        int get_id();
        int get_friend_number();
        int get_ban_number();
        string get_nick();
        string get_pasw();
        string get_mail();
 
        void put_id(int identifier);
        void put_friend_number(int numF);
        void put_ban_number(int numB);
        void put_nick(string name);
        void put_pasw(string psw);
        void put_mail(string mail);
        //void friend_list_null();
        //void ban_list_null();
};
#endif
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
#include "myskype.h"
#include <string>
#include <iostream>
 
using namespace std;
 
User::User():
    id(0),
    friend_number(0),
    ban_number(0),
    nickname("unknown"),
    password("unknown"),
    email("unknown"),
    friend_list(0),
    ban_list(0)
{}
 
User::User(int identifier, int numF, int numB, string nick, string pasw, string mail, User *frd, User *ban):
    id(identifier),
    friend_number(numF),
    ban_number(numB),
    nickname(nick),
    password(pasw),
    email(mail)
{
    friend_list = new User[numF];
    for(int i = 0; i < numF; ++i)
        friend_list[i] = frd[i];
 
    ban_list = new User[numB];
    for(int i = 0; i < numB; ++i)
        ban_list[i] = ban[i];
}
 
User& User::operator = (const User &original)
    //id(original.id),
    //friend_number(original.friend_number),
    //ban_number(original.ban_number),
    //nickname(original.nickname),
    //password(original.password),
    //email(original.email)
{
    if (this != &original) // Защита от неправильного самоприсваивания
    {
        User new_friend_list = new User[friend_number];
        for(int i = 0; i < friend_number; ++i)
            original.friend_list[i] = friend_list[i];
 
        delete []friend_list; // Освобождаем старую память
 
        User new_ban_list = new User[original.ban_number];
        for(int i = 0; i < original.ban_number; ++i)
            original.ban_list[i] = ban_list[i];
 
        delete []ban_list;
 
        friend_list = new_friend_list; // Присваиваем значения в "новой" памяти объекту
        ban_list = new_ban_list;
    }
    return *this; // По соглашению всегда возвращаем *this
}
 
/*
void User::friend_list_null()
{
    if(friend_list == 0);
    else
    {
        for(int i = 0; i < friend_number; ++i)
            friend_list[i] = 0;
    }
}
 
void User::ban_list_null()
{
    if(ban_list == 0);
    else
    {
        for(int i = 0; i < ban_number; ++i)
            ban_list[i] = 0;
    }
}
*/
 
User::~User()
{
    //friend_list_null();
    delete []friend_list;
        friend_list = 0;
 
    //ban_list_null();
    delete []ban_list;
        ban_list = 0;
}
 
int User::get_id()
{
    return id;
}
 
int User::get_friend_number()
{
    return friend_number;
}
 
int User::get_ban_number()
{
    return ban_number;
}
 
string User::get_nick()
{
    return nickname;
}
 
string User::get_pasw()
{
    return password;
}
 
string User::get_mail()
{
    return email;
}
 
void User::put_id(int identifier)
{
    id = identifier;
}
 
void User::put_friend_number(int numF)
{
    friend_number = numF;
}
 
void User::put_ban_number(int numB)
{
    ban_number = numB;
}
 
void User::put_nick(string name)
{
    nickname = name;
}
 
void User::put_pasw(string psw)
{
    password = psw;
}
 
void User::put_mail(string mail)
{
    email = mail;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2013, 23:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор копирования и оператор присваивания (C++):

Конструктор копирования и оператор присваивания - C++
Не понимаю, когда используется один, а когда другой. Написал простой пример с комплексными числами - при компиляции в VS2010 и CodeBlock 10...

Про конструктор копирования, оператор присваивания - C++
Объясните, пожалуйста, принцип действия конструктора копирования и операции присваивания. На что указывает указатель this в этих функциях?...

Очередь, конструктор копирования и перегруженный оператор присваивания - C++
#include &lt;iostream&gt; using namespace std; typedef char type; struct Node { type element; Node *pNext; };

Конструктор копирования и оператор присваивания - общая часть, выделять ли в отдельный метод - C++
Как лучше? // конструктор копирования Fraction::Fraction( const Fraction&amp; rhs ) { // инициализируем данными параметра функции и...

Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания - C++
#include &lt;iostream&gt; using namespace std; struct SNode { SNode*next; int val; SNode(){} SNode(SNode*...

Нужно ли реализовать также отдельно конструктор копирования, если имеется перегруженный оператор присваивания? - C++
у меня есть класс. и прототип перегруженной операции присваивания some_class&amp; some_class::operator=(const some_class&amp; some_object); ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2013, 23:50
Привет! Вот еще темы с ответами:

Конструктор копирования, присваивания - C++
Пусть есть класс class some{ private : int a ; }; Перегрузить оператор &quot;=&quot; можно так some&amp; operator=(const some&amp;...

Конструктор присваивания или копирования - C++
Есть программа. В ней есть класс стэк. Нужно написать оператор копирования ИЛИ присваивания. Заранее спасибо. #include...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * - C++
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор копирования, бинарный оператор суммы «*»,...

Конструктор копирования и операция присваивания в классе - C++
Народ, вот есть такие объявления(motto - объект класса StringBad): StringBad ditto(motto); StringBad metoo = motto; StringBad...


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

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

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