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

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

Войти
Регистрация
Восстановить пароль
 
ee
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
#1

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

27.04.2014, 22:25. Просмотров 283. Ответов 10
Метки нет (Все метки)

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;
}
Помогите разобраться (поэтапно)!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2014, 22:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка + (C++):

Перегрузка в виде метода VS Перегрузка в виде функции друг - C++
Привет! Собственно сабж: В каких случаях используется перегрузка в виде метода, а когда в виде функции друг? Добавлено через 4...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

Перегрузка [][] - C++
Возможно ли для данного класса обеспечить перегрузку жвойных скобок с тем, чтобы в программе можно было использовать выражения типа: ...

Перегрузка в c++ - C++
Собственно для чего нужна перегрузка функций или операторов ?

перегрузка >> и << - C++
Решил попробовать перегрузить операции ввода и вывода,почему то выводятся 0, вместо нужных значений,подскажите в чем косяк #include...

Перегрузка new - C++
Дайте примеры на перегрузку. #define n ... // Некая целая константа class a { ... }; // Некий класс a *p=new a; // Здесь должен быть...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6380 / 5945 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 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;
}
0
ee
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
27.04.2014, 23:52  [ТС] #3
zss, а нельзя ли объединить объявление и описание перегруженного оператора?добавьте пожалуйста комментарии к объявлению (особенно к оператору точка).

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

Не по теме:

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

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

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

Добавлено через 2 минуты
об.яснюсь, почему в параметре ссылка на константу - что бы случайно в ф-ии не изменить входящий параметр, потому что было бы странно сложить а и b и b при этом изменится, почему ссылка - потому что нефиг лишний раз копировать, да у Вас класс "легкий", но он не всегда будет таковым
почему возвращаем константу - что бы не было даже соблазна написать вот так a+b=c;
0
zss
Модератор
Эксперт С++
6380 / 5945 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 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
0
DrOffset
28.04.2014, 17:58     Перегрузка +
  #11

Не по теме:

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

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

Перегрузка ++ и -- - C++
У меня было задание: Напишите программу работы со временем, в которой используются перегруженные операции ++ и --, которые работают в...

Перегрузка << и >> - C++
помогите сделать так чтобы &lt;&lt; и &gt;&gt; в int main() работали... Printers.h class Printers { public: ...

Перегрузка в c++ - C++
Зачем нужно использовать перегрузку в c++? Этот вопрос будет у меня на экзамене, поэтому хочу услышать ваши версии

перегрузка [] - C++
Здарова никак не могу перегрузить имеется класс Int2 моделирующий int я перегрузил rvalue тоесть при вызове int a; Int2...


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

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

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