Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2015, 11:32   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию Перегрузка оператора "+"

Добрый день !

Можно ли в С++ написать оператор

Код:
void operator + (const A * lhs, const A * rhs)
{
    cout<<"*** operator +\n";
}
который будет срабатывать при выполнении выражения a+b; ?

Код:
class A {};
 
void operator + (const A * lhs, const A * rhs)
{
    cout<<"*** operator +\n";
}   
 
 
int main() 
{
    A *a = new A, *b = new A;
    a+b;
    
    return 0;
}
RAFA91 вне форума Ответить с цитированием
Старый 10.10.2015, 11:44   #2
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Нет, но оно и не нужно
Croessmah вне форума Ответить с цитированием
Старый 10.10.2015, 11:46   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

МСДН говорит что да: https://msdn.microsoft.com/ru-ru/library/5tk49fh2.aspx
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.10.2015, 11:48   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что оно говорит? Где там void operator+?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.10.2015, 12:32   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

void-а там нет. Но саму перегрузку, как я понял ТС, если конечно правильно понял, ему нужно делать с двумя однотипными операторами.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.10.2015, 13:51   #6
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Stilet сможете привести рабочий пример кода. ?

тип возврата не имеет значения.

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Нет, но оно и не нужно

кому что
RAFA91 вне форума Ответить с цитированием
Старый 10.10.2015, 14:00   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что именно вы хотите? Обычная перегрузка оператора + есть по ссылке выше например. А если вы хотите чтоб он изменял операнды, то это фигня какая-то и так не надо делать даже если б было можно, никто не ожидает такого поведения. Есть же += (и обычно + реализовывается через него)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.10.2015, 14:24   #8
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Перегрузка операторов разрешена только для пользовательских типов (как минимум один из операндов должен быть пользовательским). Так что выход один - делать обвёртку.
Код:
#include <iostream>
using namespace std;

struct A 
{
    int *i;
    operator int *&() {return this->i;}
};
 
void operator+(A &, A &)
{
    cout << "----\n";
}
 
int main() 
{
    A a{new int}, b;
    a + b;
    return 0;
}
220Volt вне форума Ответить с цитированием
Старый 10.10.2015, 16:14   #9
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Что именно вы хотите? Обычная перегрузка оператора + есть по ссылке )
МНЕ ПО ССЫЛКЕ не надо.

мне нужно для работы с указателями .

к примеру
Код:
A *a = new A, *b = new A;
    A *c = a+b;
оператор + тут возвращает указатель

Код:
A * operator + (const A * lhs, const A * rhs)
{
    A *c = new A;
    return c;
}
разыменование не катит.

Последний раз редактировалось RAFA91; 10.10.2015 в 16:17.
RAFA91 вне форума Ответить с цитированием
Старый 10.10.2015, 16:21   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну тогда указываю вам на ссылку
Код:
 |
 |
 |
\ /
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 10.10.2015 в 16:25.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Ошибка "Expecting a valid name" для оператора "<" в JScript Ратибор Редоран JavaScript, Ajax 0 15.12.2011 14:38
База Данных - "мини мобильного оператора " Masarr Фриланс 4 30.11.2010 10:59
Перегрузка оператора "поместить в поток" rommster Общие вопросы C/C++ 2 24.10.2010 07:00
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04