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

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

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

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

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

Перегрузка - C++
ребята помогите сделать тут перегрузку очень нужно :) #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;stdlib.h&gt;...

перегрузка <<, >>, [] - C++
правильно ли я перегрузил &gt;&gt;, &lt;&lt;, !?? у меня такое ощущение что неправильно, если всатвил стороку сout&lt;&lt;&quot;fvfsvdv&quot;&lt;&lt;endl; вместо ...

Перегрузка - C++
даны две перегрузки: 1. постфиксная для ++ чтобы прибавить 1 к height и к width Rectang &amp; operator ++(int) {height++; width++; ...

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

Перегрузка >> - C++
Доброго времени суток. Есть учебный пример перегрузки операций &gt;&gt; и &lt;&lt;. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 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
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 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
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 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
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.04.2014, 15:08     Перегрузка + #9
ee, не совсем понял Ваше предложение по поводу моей поправки
Цитата Сообщение от ee Посмотреть сообщение
а также при перегрузке компилятор не понимает разницы между &op2 и op2
эм.....что? она как бы есть - разница то

Добавлено через 2 минуты
об.яснюсь, почему в параметре ссылка на константу - что бы случайно в ф-ии не изменить входящий параметр, потому что было бы странно сложить а и b и b при этом изменится, почему ссылка - потому что нефиг лишний раз копировать, да у Вас класс "легкий", но он не всегда будет таковым
почему возвращаем константу - что бы не было даже соблазна написать вот так a+b=c;
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 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++, реализующию перегруженную функцию z_cnt, получа- ющую в качестве аргумента или массив целых чисел, или...

перегрузка [] - C++
Здравствуйте! код из учебного пособия. (возможно немного не рабочий) текст перед кодом- &quot;Пусть класс определен как строка символов....

Перегрузка - C++
Дали задачу, на перегрузку строк вот один из операторов который надо перегрузить. stringg&amp; operator+=( stringg a) { char...

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


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

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

Не по теме:

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

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

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