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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Построить на экране елку http://www.cyberforum.ru/cpp-beginners/thread1030376.html
1. построить на экране Елку
C++ разработать программу для построения графика функций 1. построить график функции y = x2 2. построить график функции y = sin x 3. построить график функции y = ln x 4. построить график функции y = 1/x2 http://www.cyberforum.ru/cpp-beginners/thread1030372.html
C++ построить на экране Автомобиль
2. построить на экране Автомобиль
разработать программу сортировки двумерных массивов C++
1. создать и отсортировать двумерный массив по строкам используя алгоритм сортировки "пузырь" 2. создать и отсортировать двумерный массив по столбцов используя алгоритм сортировки выбором 3. создать и отсортировать двумерный массив по строкам используя алгоритм сортировки вставкой 4. создать и отсортировать двумерный массив по столбцов используя алгоритм сортировки обменом
C++ Перечисления http://www.cyberforum.ru/cpp-beginners/thread1030361.html
Объясните плыз что такое перечисления, для чего нужны и как ими оперировать? В общем что и как.
C++ Объединение одномерных массивов Задано два массива и их размеры. В первом массиве например слово Неllo,а во втором world. Нужно в первый массив записать второй , и потом вывести на экран. Как это сделать? насколько я понимаю , то нужно как то через цикл и указать где в первом массиве \n. подробнее

Показать сообщение отдельно
Guy Kawasaki
2 / 1 / 0
Регистрация: 07.11.2013
Сообщений: 42

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

05.12.2013, 23:50. Просмотров 227. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru