С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
 Аватар для broDiaga_cpp
24 / 14 / 2
Регистрация: 20.02.2010
Сообщений: 181

operator+ как член класса

14.08.2013, 20:15. Показов 4142. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Могу ли я сделать operator+ как член класса таким образом?
C++
1
2
3
4
5
myClass& myClass::operator+(const myClass& other1, const myClass& other2)
{
    data += other.data;
    return *this;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.08.2013, 20:15
Ответы с готовыми решениями:

Массив объектов класса как член другого класса
Здравствуйте. У меня тут возникла проблемка #include "main.h" class player { public: player(); player(char*); ...

Член-ссылка на другой член класса
Есть класс Dot с двумя членами - x и y. Требуется еще один класс, который хранит width i height, но реализация этого класса ничем не...

Как перенести operator из базового класса в производный?
Добрый день! Подскажите, пожалуйста, на простых примерах, как нужно работать с оператором перегрузки операций, если он находится в...

42
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.08.2013, 20:26
Бинарный оператор принимает один параметр если он член класса.
0
 Аватар для Kins
60 / 59 / 7
Регистрация: 03.02.2013
Сообщений: 167
14.08.2013, 20:28
Цитата Сообщение от IGPIGP Посмотреть сообщение
Бинарный оператор принимает один параметр если он член класса.
может я конечно и парю, давно читал про дружественные ф-ии, у дружественной ф-ии два аргумента. Первый вызывает, второй как аргумент.
0
Сгибальщик
 Аватар для Бендерродригез
42 / 42 / 4
Регистрация: 18.05.2013
Сообщений: 220
14.08.2013, 20:42
Цитата Сообщение от Kins Посмотреть сообщение
может я конечно и парю, давно читал про дружественные ф-ии, у дружественной ф-ии два аргумента. Первый вызывает, второй как аргумент.
Таки на то она и дружественная.
0
 Аватар для broDiaga_cpp
24 / 14 / 2
Регистрация: 20.02.2010
Сообщений: 181
14.08.2013, 20:45  [ТС]
Kins, дружественные функции, насколько мне известно, не являются членами класса.
IGPIGP, т.е. я не могу сделать оператор, являющийся членом класса, принимающий два параметра? Получается, я уже не смогу написать c = a + b ? Придётся обязательно менять данные класса a?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.08.2013, 20:51
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
IGPIGP, т.е. я не могу сделать оператор, являющийся членом класса, принимающий два параметра? Получается, я уже не смогу написать c = a + b ? Придётся обязательно менять данные класса a?
Вы можете объявить дружественную функцию-оператор "+". Она примет 2 параметра (две константные ссылки, например) и вернёт ссылку. Но она не будет членом класса. В классе имеет смысл определить оператор "+=", если это нужно.
Ну или делайте с одним параметром, зачем именно с двумя?
0
 Аватар для VLK
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,236
14.08.2013, 20:54
1. как уже было сказано operator+ будет принимать только один параметр т.е.
C++
1
myClass& myClass::operator+(const myClass& other)
2. строчка
C++
1
data += other.data;
data как я понимаю переменная типа int и она должна быть private, а из этого следует, что тут возникнет ошибка т.к. один объект пытается получить доступ к закрытым данным другого объекта, т.е. надо использовать методы доступа
C++
1
2
int get_data() const
{ return data; }
C++
1
data += other.get_data();
0
 Аватар для Kins
60 / 59 / 7
Регистрация: 03.02.2013
Сообщений: 167
14.08.2013, 20:57
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
дружественные функции, насколько мне известно, не являются членами класса.
объявляются то они в классе. а определяются вне.
0
 Аватар для broDiaga_cpp
24 / 14 / 2
Регистрация: 20.02.2010
Сообщений: 181
14.08.2013, 21:02  [ТС]
Цитата Сообщение от Kins Посмотреть сообщение
объявляются то они в классе.
Но членами класса не являются.

Хорошо, если нельзя обойтись при перегрузке оператора + без дружественных функций, можно ли объявить функцию add, например:
C++
1
myClass& myClass::add(const myClass& other1, const myClass& other2);
Просто целью для меня является обойтись без дружественных функций. Не важно зачем. Задача такая.
И не хотелось бы менять a и b в выражении c = a + b.
0
 Аватар для VLK
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,236
14.08.2013, 21:05
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
можно ли объявить функцию add
Да, можешь, это же С++

что эта функция конкретно должна делать?
0
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
14.08.2013, 21:19
Оператор - член класса принимает только один параметр. Причина тому проста: второй параметр - ссылку на сам класс - он получает неявно. то есть кусок кода
C++
1
2
3
4
5
myClass& myClass::operator+=(const myClass& other)
{
    this->data += other.data;
    return *this;
}
эквивалентен дружественной функции
C++
1
2
3
4
5
6
7
8
9
class myClass {
///...
friend myClass& operator+=(myClass& other1, const myClass& other2);
};
myClass& operator+=(myClass& other1, const myClass& other2)
{
    other1.data += other2.data;
    return other1;
}
в точности до интерфейса. Однако, многие авторы советуют такие операторы делать членами класса.
1
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
14.08.2013, 22:52
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Просто целью для меня является обойтись без дружественных функций. Не важно зачем. Задача такая.
ну так и делай оператор свободной функцией
C++
1
2
3
4
5
myClass operator + (const myClass& a, const myClass& b)
{
    myClass c(a);
    return c += b;
}
Добавлено через 1 минуту
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
C++
1
2
3
4
myClass& myClass::operator+
...
data += other.data;
...
гореть тебе в аду за такое
1
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
14.08.2013, 23:08
Цитата Сообщение от Jupiter Посмотреть сообщение
ну так и делай оператор свободной функцией
C++
1
2
3
4
myClass operator + (const myClass& a, const myClass& b){
    myClass c(a);
    return c += b;
}
код плодит лишний экземпляр класса. Плюс, класс может не иметь такой конструктор, да и вообще какое-либо приравнивание. Плюс, нельзя унаследовать эту функцию, а вызывать только через касты. Говно, короче, а не предложение.

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
гореть тебе в аду за такое
Если хочет и если это оправдано, пусть хоть запятую перегружает, не нам его судить. может, он делает интерпретатор машины Тьюринга или какую-нибудь другую бубуйню, в которой z++=+-,!!=+(==(-b+)) будет иметь особый смысл

0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
14.08.2013, 23:20
Цитата Сообщение от icpu Посмотреть сообщение
код плодит лишний экземпляр класса
а на кой тогда оператор + если не сохранять результат

Цитата Сообщение от icpu Посмотреть сообщение
Плюс, класс может не иметь такой конструктор, да и вообще какое-либо приравнивание. Плюс, нельзя унаследовать эту функцию, а вызывать только через касты
встречный ответ:
Цитата Сообщение от icpu Посмотреть сообщение
может, он делает интерпретатор машины Тьюринга или какую-нибудь другую бубуйню, в которой z++=+-,!!=+(==(-b+)) будет иметь особый смысл
0
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
15.08.2013, 00:19
Цитата Сообщение от Jupiter Посмотреть сообщение
а на кой тогда оператор + если не сохранять результат
Важно, как... Плюс, я уже написал, что operator может использоваться для краткости записи совсем иных действий, нежели простое суммирование.
Цитата Сообщение от Jupiter Посмотреть сообщение
встречный ответ
А что, машина Тьюринга не имеет права наследовать операторы? От детерменированой к недетерменированной? Что за расизм?!
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
15.08.2013, 00:20
Цитата Сообщение от icpu Посмотреть сообщение
Важно, как..
что как?
0
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
15.08.2013, 00:21
Цитата Сообщение от Jupiter Посмотреть сообщение
что как?
Ладно, я затупил. И так, и сяк создаётся экземпляр класса, разницы нет. Ну, разыгрался у меня сегодня синдром паладина, что поделать?
0
15.08.2013, 12:32

Не по теме:

кстати, operator+ может быть еще и унарным. А чтобы не гореть в адах, надо функции-члены, которые не должны менять this, делать константными.

0
15.08.2013, 14:54

Не по теме:

Tulosba, вопрос в постановке нерешаем даже за пределами класса. Все же ссылки и две const))
Как говорил кот Матроскин: - "Чтобы вернуть что нибудь ненужное нужно сначала получить что нибудь ненужное." :pardon:
Можно опрератор сравнения перегрузить. Чтобы наконец можно таки было написать что то вроде:

C++
1
A=B>C>D>E;
:D

0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.08.2013, 15:00
Цитата Сообщение от IGPIGP Посмотреть сообщение
вопрос в постановке нерешаем даже за пределами класса
Вопрос решаем. Ответ: "нет"
Цитата Сообщение от IGPIGP Посмотреть сообщение
Всё же ссылки и две const))
Речь о модификации this функцией, которая модифицировать не должна. Не о явных аргументах речь, а о неявном.
Цитата Сообщение от IGPIGP Посмотреть сообщение
C++
1
A=B>C>D>E;
И что в этом случае хотелось бы получить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.08.2013, 15:00
Помогаю со студенческими работами здесь

Предикат как член класса
Напомните пожалуйста Reference to non-static member function must be called std::count_if (v.begin(), v.end(), func); // Reference to...

Callback как член класса
В общем, захотел я немного поработать с библиотекой libgit2. Эта библиотека предоставляет API Git'a. Т.е. можно написать свое приложение...

Массив как член класса
Почему мне GCC выдаёт ошибку компиляции, что это zero-sized array ? struct Base { const char* d{"f", "f"}; ...

Vector как член класса
собственно заголовок моего класса: #pragma once #include <Vector> #include "StdAfx.h" #include "PObject.h" ...

Ifstream& как член класса
Здравствуйте. Решаю задачу: Напишите функцию, получающую и качестве аргументов istream и vector<string> и возвращающую...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru