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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
broDiaga_cpp
 Аватар для broDiaga_cpp
22 / 12 / 1
Регистрация: 20.02.2010
Сообщений: 180
14.08.2013, 20:15     operator+ как член класса #1
Могу ли я сделать operator+ как член класса таким образом?
C++
1
2
3
4
5
myClass& myClass::operator+(const myClass& other1, const myClass& other2)
{
    data += other.data;
    return *this;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6228 / 2957 / 287
Регистрация: 04.12.2011
Сообщений: 7,882
Записей в блоге: 3
15.08.2013, 15:21     operator+ как член класса #21
Цитата Сообщение от Tulosba Посмотреть сообщение
И что в этом случае хотелось бы получить?
Хотелось бы, - громко сказано. Максимум удовольствия, наверное.

Добавлено через 3 минуты
Цитата Сообщение от Tulosba Посмотреть сообщение
Всё же ссылки и две const))
Речь о модификации this функцией, которая модифицировать не должна.
Я не так понял. В классе + с двумя аргументами не получится. А вне класса придётся модифицировать одно из слагаемых. А за это гореть в аду...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
15.08.2013, 15:47     operator+ как член класса #22
Цитата Сообщение от IGPIGP Посмотреть сообщение
А вне класса придётся модифицировать одно из слагаемых.
Для обычного сложения-то? C = A + B. Не требует модификации ни A, ни B.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6228 / 2957 / 287
Регистрация: 04.12.2011
Сообщений: 7,882
Записей в блоге: 3
15.08.2013, 16:10     operator+ как член класса #23
Цитата Сообщение от Tulosba Посмотреть сообщение
Для обычного сложения-то? C = A + B. Не требует модификации ни A, ни B.
В вопросе требуется вернуть не объект, а именно ссылку. Что будем возвращать?
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
15.08.2013, 16:21     operator+ как член класса #24
Цитата Сообщение от IGPIGP Посмотреть сообщение
В вопросе требуется вернуть не объект, а именно ссылку.
Бредовое желание для операции сложения.
Jupiter
15.08.2013, 16:43
  #25

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
В вопросе требуется вернуть не объект, а именно ссылку
будем гореть в аду
Цитата Сообщение от Tulosba Посмотреть сообщение
А чтобы не гореть в адах, надо функции-члены, которые не должны менять this, делать константными.
надо просто форкнуть цпп и запилить перегрузку операторов в виде статических методов, как в решотке

IGPIGP
15.08.2013, 16:44
  #26

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Бредовое желание для операции сложения.
Консенсус.
Цитата Сообщение от Jupiter Посмотреть сообщение
будем гореть в аду
ещё поупираемся.

Tulosba
15.08.2013, 17:11
  #27

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
надо просто форкнуть цпп и запилить перегрузку операторов в виде статических методов, как в решотке
Это, кстати, можно было бы внести в очередной стандарт просто. А в шарпы из плюсов добавить константные функции и возможность readonly объекты создавать внутри функций.

Jupiter
15.08.2013, 17:16
  #28

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
А в шарпы из плюсов добавить константные функции и возможность readonly объекты создавать внутри функций.
и static

Tulosba
15.08.2013, 17:24
  #29

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
и static
Статик внутри функций не нужен. С учетом обязательной принадлежности функции к классу, логичнее перенести ее в класс.

Jupiter
15.08.2013, 18:32
  #30

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Статик внутри функций не нужен. С учетом обязательной принадлежности функции к классу, логичнее перенести ее в класс.
нечего засорять область видимости

Tulosba
15.08.2013, 18:35
  #31

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
нечего засорять область видимости
в таком случае создать вложенный класс
P.S. Жду ответа: "нечего плодить классы"

IGPIGP
15.08.2013, 18:40
  #32

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Это, кстати, можно было бы внести в очередной стандарт просто.
Не уж-то это поможет вернуть ссылку на объект, которой создан внутри метода и не погореть. В аду...
Эx-x... Может тогда уже и компилятор чуть-чуть джитнуть? Для динамической типизации.

Tulosba
15.08.2013, 18:44
  #33

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Не уж-то это поможет вернуть ссылку на объект
Ссылку вернуть не поможет. Поможет избавиться от друзей, и от this.

Jupiter
15.08.2013, 18:48
  #34

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
нечего плодить классы
именно, бревно в глаз

Цитата Сообщение от IGPIGP Посмотреть сообщение
Эx-x... Может тогда уже и компилятор чуть-чуть джитнуть? Для динамической типизации.
это то чего и не хватает в дебаг-режиме...это залог успеха Apple

broDiaga_cpp
 Аватар для broDiaga_cpp
22 / 12 / 1
Регистрация: 20.02.2010
Сообщений: 180
15.08.2013, 23:45  [ТС]     operator+ как член класса #35
Что-то, товарищи, форумчане, много ненужного хлама вы написали при довольно простом вопросе. Больше бы по делу и больше бы кода

C++
1
2
3
4
5
myClass& myClass::operator+(const myClass& other)
{
    myClass result(data + other.data);
    return result;
}
и тогда конструкция
C++
1
myClass object3 = object + object2;
работает так как нужно.
1. Является членом класса.
2. Избежал френдовых функций.

Просто в сначала перегружал оператор + как friend, потом появилась задача избавиться от френдов.

Да, кстати!
Можно ли как-то оптимизировать вот это? Чтобы не создавались лишние экземпляры.
C++
1
2
myClass result(data + other.data);
    return result;
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6228 / 2957 / 287
Регистрация: 04.12.2011
Сообщений: 7,882
Записей в блоге: 3
15.08.2013, 23:56     operator+ как член класса #36
Во-первых вы просили, чтобы принимал 2 константные ссылки.
Этим и отличается вопрос: - "Как сделать то-то?", от вопроса: - "Как сделать то-то, но так-то и так-то?"
Во-вторых, вернули ссылку на локальный объект.
C++
1
2
3
4
5
myClass& myClass::operator+(const myClass& other)
{
    myClass result(data + other.data);
    return result;
}
можно:
C++
1
2
3
4
5
myClass& myClass::operator+(const myClass& other)
{
   data += other.data;
    return *this;
}
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.08.2013, 23:58     operator+ как член класса #37
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
работает так как нужно.
садись, два. это возврат ссылки на локальную переменную. объект будет разрушен при выходе из тела метода, и ссылка будет ссылатся на то чего уже нет

Добавлено через 1 минуту
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Можно ли как-то оптимизировать вот это? Чтобы не создавались лишние экземпляры.
думаешь компиляторы пишут тупицы? RVO/NRVO
broDiaga_cpp
 Аватар для broDiaga_cpp
22 / 12 / 1
Регистрация: 20.02.2010
Сообщений: 180
16.08.2013, 00:04  [ТС]     operator+ как член класса #38
Цитата Сообщение от Jupiter Посмотреть сообщение
объект будет разрушен при выходе из тела метода, и ссылка будет ссылатся на то чего уже нет
Код работает так как нужно. В object3 записывается верное значение. Мусора нет.
Да и, если мне правильно помнится, то в Страуструпе были похожие конструкции.

Если я не прав - объясните как правильно.

Добавлено через 46 секунд
Цитата Сообщение от Jupiter Посмотреть сообщение
думаешь компиляторы пишут тупицы?
Насчёт этого я ничего не думаю.
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.08.2013, 00:06     operator+ как член класса #39
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Если я не прав - объясните как правильно.
правильно вернуть копию

Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Код работает так как нужно
работает, пока у вас нет никаких ресурсов типа открытого файла, динамической памяти, сетевого соединения и подобного что будет закрыто/разрушено в деструкторе
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2013, 00:09     operator+ как член класса
Еще ссылки по теме:

C++ Массив как член класса
Ifstream& как член класса C++
Большой двумерный массив как член класса C++
C++ Статический массив как член класса
C++ Как вызвать член класса по адресу?

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6228 / 2957 / 287
Регистрация: 04.12.2011
Сообщений: 7,882
Записей в блоге: 3
16.08.2013, 00:09     operator+ как член класса #40
Цитата Сообщение от IGPIGP Посмотреть сообщение
можно:
C++
1
2
3
4
5
myClass& myClass::operator+(const myClass& other)
{
   data += other.data;
    return *this;
}
лучше +=
C++
1
2
3
4
5
myClass& myClass::operator+=(const myClass& other)
{
   data += other.data;
    return *this;
}
Yandex
Объявления
16.08.2013, 00:09     operator+ как член класса
Ответ Создать тему
Опции темы

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