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

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

Войти
Регистрация
Восстановить пароль
 
frontez
4 / 4 / 0
Регистрация: 26.04.2013
Сообщений: 124
#1

Для чего нужно переопределение оператора присваивания? - C++

06.06.2014, 06:02. Просмотров 279. Ответов 9
Метки нет (Все метки)

C++ (Qt)
1
    HumansClass& operator=(const HumansClass& right);   //переопределение операции присваивания
Для чего нужно переопределение оператора присваивания?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12887 / 7273 / 810
Регистрация: 27.09.2012
Сообщений: 17,973
Записей в блоге: 2
Завершенные тесты: 1
06.06.2014, 06:10     Для чего нужно переопределение оператора присваивания? #2
Цитата Сообщение от frontez Посмотреть сообщение
Для чего нужно переопределение оператора присваивания?
чтобы можно было писать a = b
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
06.06.2014, 06:18     Для чего нужно переопределение оператора присваивания? #3
Цитата Сообщение от frontez Посмотреть сообщение
Для чего нужно переопределение оператора присваивания?
Если объект содержит указатель, то тупое присвоение чревато
frontez
4 / 4 / 0
Регистрация: 26.04.2013
Сообщений: 124
06.06.2014, 06:21  [ТС]     Для чего нужно переопределение оператора присваивания? #4
C++ (Qt)
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
using namespace std;
 
string FormatString(string , int , bool);       //функция для форматирования строки
 
class HumansClass                           // Абстрактный класс 
{
private:
    string Name, SurName, LastName, tel;            //храним данные о ФИО и номере телефонв
public:
    HumansClass(void);                              //конструктор
    virtual void Print(int, bool) = 0;          // Чистая (пустая) виртуальная функция.
    string GetName(void) { return Name;};           //получить имя
    void SetName(string _name) {Name = _name;};     //изменить имя
 
    string GetSurName(void) { return SurName;};     //получить отчество
    void SetSurName(string _surname) {SurName = _surname;};         //изменить отчество
 
    string GetLastName(void) { return LastName;};                   //получить фамилиию
    void SetLastName(string _lastname) {LastName = _lastname;};     //изменить фамилию
 
    string GetTel(void) { return tel;};                             //получить номер телефона
    void SetTel(string _tel) {tel = _tel;};                         //изменить номер телефона
 
    ~HumansClass(void);                         //деструктор
 
    HumansClass& operator=(const HumansClass& right);           //переопределение операции присваивания
};
Ну вот допустим если не делали "Переопределение оператора присваивания" что было бы?
Croessmah
Модератор
Эксперт CЭксперт С++
12887 / 7273 / 810
Регистрация: 27.09.2012
Сообщений: 17,973
Записей в блоге: 2
Завершенные тесты: 1
06.06.2014, 06:22     Для чего нужно переопределение оператора присваивания? #5
В данном примере хватит и сгенерированного оператора
frontez
4 / 4 / 0
Регистрация: 26.04.2013
Сообщений: 124
06.06.2014, 06:27  [ТС]     Для чего нужно переопределение оператора присваивания? #6
Croessmah, что это значит?
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
06.06.2014, 07:26     Для чего нужно переопределение оператора присваивания? #7
Цитата Сообщение от frontez Посмотреть сообщение
Ну вот допустим если не делали "Переопределение оператора присваивания" что было бы?
Ничего. Этот класс не требует переопределения оператора присвоения, его члены правильно копируются дефолтным.
frontez
4 / 4 / 0
Регистрация: 26.04.2013
Сообщений: 124
06.06.2014, 07:27  [ТС]     Для чего нужно переопределение оператора присваивания? #8
А в каких случаях он был бы нужным?
Renji
1800 / 1218 / 285
Регистрация: 05.06.2014
Сообщений: 3,504
06.06.2014, 07:37     Для чего нужно переопределение оператора присваивания? #9
Для чего нужно переопределение оператора присваивания?
C++
1
2
3
4
5
6
7
8
9
10
11
struct string
{
    string():text(new char[100]){}
    ~string(){delete[]text;}
    char*text;
};
int test()
{
    string text1,text2;
    text1=text2;
}
text1=text2 затирает text1.text. Никто больше об этом указателе не знает и память по нему не отчистит. Итого, утечка памяти. При уничтожении text1 и text2 их деструкторы ломятся отчищать одну и ту же область памяти text1.text (равное text2.text), стукаются лбами и программа красочно падает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 07:47     Для чего нужно переопределение оператора присваивания?
Еще ссылки по теме:

C++ Перегрузка оператора присваивания
C++ Переопределение оператора () для своего класса
C++ Неправильная работа оператора присваивания после работы оператора суммирования
Перегрузка оператора присваивания C++
Переопределение оператора "меньше" пользовательского типа для работы с set C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6513 / 4979 / 460
Регистрация: 14.02.2011
Сообщений: 16,488
06.06.2014, 07:47     Для чего нужно переопределение оператора присваивания? #10
Цитата Сообщение от frontez Посмотреть сообщение
Ну вот допустим если не делали "Переопределение оператора присваивания" что было бы?
вот именно в таком виде?
Цитата Сообщение от frontez Посмотреть сообщение
HumansClass& operator=(const HumansClass& right); * * * * * //переопределение операции присваивания
ошибка линковки "объявлен но не определен"
Yandex
Объявления
06.06.2014, 07:47     Для чего нужно переопределение оператора присваивания?
Ответ Создать тему
Опции темы

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