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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
broDiaga_cpp
22 / 12 / 1
Регистрация: 20.02.2010
Сообщений: 180
#1

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

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

Могу ли я сделать operator+ как член класса таким образом?
C++
1
2
3
4
5
myClass& myClass::operator+(const myClass& other1, const myClass& other2)
{
    data += other.data;
    return *this;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2013, 20:15     operator+ как член класса
Посмотрите здесь:

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

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

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

Как вызвать член класса по адресу? - C++
В общем вопрос такой: допустим есть адрес класса, то получается по определенному смещению вызвать его член? (кстати, как можно найти...

Статический массив как член класса - C++
Я туплю, что ли, почему это компилируется? о_О struct V { int v; }; V v1; V v2(v1); // копирование v2 = v1; //...

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

Динамическая матрица как член класса - C++
Доброго времени суток, не так давно отзывчивые люди научили меня тому, что я хочу старая тема Путём ручное выделения памяти под нужный...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,482
Записей в блоге: 4
15.08.2013, 15:21     operator+ как член класса #21
Цитата Сообщение от Tulosba Посмотреть сообщение
И что в этом случае хотелось бы получить?
Хотелось бы, - громко сказано. Максимум удовольствия, наверное.

Добавлено через 3 минуты
Цитата Сообщение от Tulosba Посмотреть сообщение
Всё же ссылки и две const))
Речь о модификации this функцией, которая модифицировать не должна.
Я не так понял. В классе + с двумя аргументами не получится. А вне класса придётся модифицировать одно из слагаемых. А за это гореть в аду...
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.08.2013, 15:47     operator+ как член класса #22
Цитата Сообщение от IGPIGP Посмотреть сообщение
А вне класса придётся модифицировать одно из слагаемых.
Для обычного сложения-то? C = A + B. Не требует модификации ни A, ни B.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,482
Записей в блоге: 4
15.08.2013, 16:10     operator+ как член класса #23
Цитата Сообщение от Tulosba Посмотреть сообщение
Для обычного сложения-то? C = A + B. Не требует модификации ни A, ни B.
В вопросе требуется вернуть не объект, а именно ссылку. Что будем возвращать?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
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
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,482
Записей в блоге: 4
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
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.08.2013, 23:58     operator+ как член класса #37
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
работает так как нужно.
садись, два. это возврат ссылки на локальную переменную. объект будет разрушен при выходе из тела метода, и ссылка будет ссылатся на то чего уже нет

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

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

Добавлено через 46 секунд
Цитата Сообщение от Jupiter Посмотреть сообщение
думаешь компиляторы пишут тупицы?
Насчёт этого я ничего не думаю.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 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++
Как изменить статический приватный член класса если менять его нужно в main()!??

Большой двумерный массив как член класса - C++
Размеры массива 2048 на 512. Создал, заполняю в конструкторе, но результата нету. Такое вообще реально, без динамического выделения памяти?

Указатель на классы, объявленный как член класса - C++
Если у кого-то сохранились какие-либо статьи, заметки в памяти на тему указателей, пожалуйста, дайте примеры подробных примеров, статьи,...

Переопределение операторов как член-класса и как дружественная функция - C++
Привет. Задача создать класс целых чисел, для него нужно переопределить операторы ++ и + как функции-члены и -- и - как дружественные...

Как создать член класса только для чтения - C++
Хочу создать член класса только для чтения. Можно, конечно, поместить член в раздел private и написать метод для получения его значения: ...


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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,482
Записей в блоге: 4
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+ как член класса
Ответ Создать тему
Опции темы

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