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

Перегрузка + - C++

Восстановить пароль Регистрация
 
ee
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
27.04.2014, 22:25     Перегрузка + #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
class loc {
int n , m;
public:
loc() {}
loc( int lg , lt) {
n = lg;
m = lt;
}
loc operator+(loc op2);
};
loc loc::operator+(loc op2) {
loc temp;
temp.n = op2.n + n;
temp.m = op2.m + m;
return temp;
}
Помогите разобраться (поэтапно)!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2014, 22:25     Перегрузка +
Посмотрите здесь:

C++ C++ Перегрузка
C++ Перегрузка
C++ перегрузка []
перегрузка [] C++
C++ Перегрузка *
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
27.04.2014, 22:40     Перегрузка + #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class loc 
{
    int n , m; // защищенные данные класса
public:
loc() {n=0;m=0;} // конструктор по умолчанию
loc( int lg , lt) {n = lg;m = lt;} // конструктор с параметрами
loc operator+(loc op2); // Объявление перегруженного оператора сложения
}; // конец объявления класса
// Описание (код) перегруженного оператора сложения
loc loc::operator+(loc op2) 
{
    loc temp;
    temp.n = op2.n + n;
    temp.m = op2.m + m;
    return temp;
}
ee
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
27.04.2014, 23:52  [ТС]     Перегрузка + #3
zss, а нельзя ли объединить объявление и описание перегруженного оператора?добавьте пожалуйста комментарии к объявлению (особенно к оператору точка).

Добавлено через 1 минуту
zss, и приводится ли temp к какому-то стандартному типу или остается loc при возврате?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
28.04.2014, 14:10     Перегрузка + #4
Цитата Сообщение от ee Посмотреть сообщение
нельзя ли объединить объявление и описание
Можно, но тогда этот оператор будет компилироваться со свойством inline
(т.е. вместо вызова функции компилятор будет везде вставлять ее полный код).
А оператор "точка" я не уверен, что можно перегрузить.
Знаю, что стрелку перегружать можно. Получаются умные указатели.
Цитата Сообщение от ee Посмотреть сообщение
приводится ли temp
А зачем приводить, если возвращаемый тип такой же!!!
aLarman
28.04.2014, 14:17
  #5

Не по теме:

C++
1
const loc loc::operator+(const loc& op2)

ee
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
28.04.2014, 14:37  [ТС]     Перегрузка + #6
zss, насчет точки я имел ввиду смысл 13-14 строчек.а насчет типа - при возвращении значения (при компиляции) он ведь не сможет остаться loc ?

Добавлено через 2 минуты
aLarman, насолько я знаю перегрузке не нужен const - параметры неизменны (или по умолчанию) , а отличие от другихперегруженных операторов в кол-ве операторов.а также при перегрузке компилятор не понимает разницы между &op2 и op2
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
28.04.2014, 14:41     Перегрузка + #7
Цитата Сообщение от ee Посмотреть сообщение
он ведь не сможет остаться loc
А чем же он может стать.
Единственный нюанс. При возврате значения вызывается копиконструктор.
Поскольку у Вас в классе определены простые данные m и n, то компилятор
сам их скопирует. Но, если бы хранились указатели, то копиконструктор
пришлось написать свой собственный.
ee
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
28.04.2014, 14:51  [ТС]     Перегрузка + #8
zss, а насчет точки?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.04.2014, 15:08     Перегрузка + #9
ee, не совсем понял Ваше предложение по поводу моей поправки
Цитата Сообщение от ee Посмотреть сообщение
а также при перегрузке компилятор не понимает разницы между &op2 и op2
эм.....что? она как бы есть - разница то

Добавлено через 2 минуты
об.яснюсь, почему в параметре ссылка на константу - что бы случайно в ф-ии не изменить входящий параметр, потому что было бы странно сложить а и b и b при этом изменится, почему ссылка - потому что нефиг лишний раз копировать, да у Вас класс "легкий", но он не всегда будет таковым
почему возвращаем константу - что бы не было даже соблазна написать вот так a+b=c;
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
28.04.2014, 15:35     Перегрузка + #10
Цитата Сообщение от zss Посмотреть сообщение
temp.n = op2.n + n;
temp.m = op2.m + m;
Цитата Сообщение от ee Посмотреть сообщение
насчет точки я имел ввиду смысл 13-14 строчек
C++
1
2
3
temp.n = op2.n + n; // переменная n объекта op2 скаладывается с переменной n текущего(this)объекта
// результат записывается в переменную n объекта temp
temp.m = op2.m + m;// аналогично для m
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2014, 17:58     Перегрузка +
Еще ссылки по теме:

C++ Перегрузка ~
перегрузка -- C++
C++ перегрузка

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

Или воспользуйтесь поиском по форуму:
DrOffset
28.04.2014, 17:58     Перегрузка +
  #11

Не по теме:

Цитата Сообщение от zss Посмотреть сообщение
А оператор "точка" я не уверен, что можно перегрузить.
Точно нельзя.

Yandex
Объявления
28.04.2014, 17:58     Перегрузка +
Ответ Создать тему
Опции темы

Текущее время: 10:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru