![]() |
|
Модераторы: bsa |
![]()
|
|
| alexey009 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: нет Всего: 2 |
Доброе время суток. Начал изучать С++. Приступил к теме использования operator, т.е. перегрузки операций.
Сначала хочется разобраться с элементарными операциями (+ - += -=). Например, есть класс
Теперь вот что хочется, перегрузить оператор + для сложения 2х переменных.(Это так для понимания). Затем, сделать 2 объекта:
Хочется перегрузить оператор += чтобы сложить первые переменные(5 и 15) и вторые (6 и 16). и результаты записать в _x, _y; Если не сложно, подскажите как это сделать? Или посоветуйте литературу(Читал C++ для чайников и Павлоскую). Спасибо. |
||||
|
|||||
| Acer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 5.9.2007 Где: UA::DN Репутация: нет Всего: 8 |
||||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
alexey009, взял на себя наглость "отрефакторить" код.
|
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
alexey009, Учись у zim22 как код форматировать нужно!!! Потому как иногда просто лень глаза напрягать. И по этому ты ответа можешь не поучить.
Добавлено через 11 минут и 54 секунды Вот перегрузка += и =. Остальные сам поймешь как.
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| alexey009 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: нет Всего: 2 |
andrew_121, спасибо Вам большое=)
Но есть несколько вопросов по коду. 1. Для чего всюду используется const? 2. Почему в operator возращается *this? 3. Можете объяснить этот код? A& operator= (const A& o) можно ли его переписать так: A operator= (const A o) В чем разница и чем предложенный Вами код "лучше"?=) |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
alexey009
1. const говорит о том, что аргумент остается неизменным. 2. Потому что, operator+= перегружен как член класса. 3. Собственно, оператор присвоения.
Можно. Но в этом случае нет надобности использовать const. Так как аргумент передается по значению. Т.е. копированием. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
alexey009, не ленитесь.
Acer привёл отличную ссылку на операторы. вам осталось лишь прочитать её. |
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
1. const используется исключительно с целью создания кода, который сам указывает на ошибки на этапе компиляции (т.е. по логике ты не имеешь права менять аргументы в операторе сложения, но при использовании const и попытке изменить, ты получишь по рукам от компилятора) 2. Читай книжку. В частности, чтобы можно было делать такое: c = (a = x) + b; 3. A& operator=(const A& v) - выполняется быстрее, чем A operator=(A v), так как во втором случае вместо одного вызова метода фактически будет:
|
||||
|
|||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |