C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Переопределение операции  (Прочитано 3238 раз)
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Переопределение операции
« : 17 Ноябрь 2013, 18:11:44 »

Здравствуйте. Подскажите, возможно ли переопределить операцию (например умножение) для какого-то типа (например для int). То есть, что-то типа такого:
Код
int a = 7;
int b = 10;
int f = a * b; // тут в f должно получится 72, то есть, алгоритм такой: 7 * 10 + 2
 
Записан
volvo877
Глобальный модератор


Сказали спасибо: +736/-1
Offline

Сообщений: 891


Re: Переопределение операции
« Ответ #1 : 17 Ноябрь 2013, 20:48:03 »

Для какого-то можно, для примитивного - нет, Стандарт требует, чтобы как минимум один из операндов при перегрузке оператора был либо классом либо перечислением: C++ FAQ Lite
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Переопределение операции
« Ответ #2 : 17 Ноябрь 2013, 21:09:23 »

То есть, надо создать класс (пусть он будет описывать какой-то тип, например int), и уже для него определить операции. Так и делаю. Создаю класс:
Код
class MY_INT
{
private:
int Value;
 
public:
void operator = (int arg)
{
 Value = arg;
}
}

Правильно делаю?
« Последнее редактирование: 19 Ноябрь 2013, 20:34:34 от d7d1cd » Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Переопределение операции
« Ответ #3 : 20 Ноябрь 2013, 12:38:22 »

Цитата: d7d1cd от 17 Ноябрь 2013, 21:09:23
То есть, надо создать класс (пусть он будет описывать какой-то тип, например int), и уже для него определить операции. Так и делаю. Создаю класс:
Код
class MY_INT
{
private:
int Value;
 
public:
void operator = (int arg)
{
 Value = arg;
}
}

Правильно делаю?

Нет, конечно. Почитай в "интернетах" про перегрузку операторов в C++ - хотя бы на википедии.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Переопределение операции
« Ответ #4 : 21 Ноябрь 2013, 19:57:17 »

Почитал... Все равно не могу понять, чего в моем примере неправильно: ведь код то работает. Ткните носом уже...
Записан
volvo877
Глобальный модератор


Сказали спасибо: +736/-1
Offline

Сообщений: 891


Re: Переопределение операции
« Ответ #5 : 21 Ноябрь 2013, 23:32:05 »

Цитировать
ведь код то работает
Какой код работает? Код определения класса? Где использование?

Код
MY_INT a = 2; //  MY_INT? Значит, должно работать...

Почему не работает? Почему выдает Cannot convert 'int' to 'MY_INT' ?
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Переопределение операции
« Ответ #6 : 22 Ноябрь 2013, 10:24:26 »

Например
Код
class TMyInt // классический класс-обёртка
{
private:
int FValue;
const int ADDED;
 
public:
__fastcall TMyInt(const int AValue=0) :
FValue(AValue), ADDED(2)
{ }
virtual __fastcall ~TMyInt() { }
 
public:
TMyInt& __fastcall operator=(const TMyInt& obj)
{
FValue = obj.FValue;
return *this;
}
 
TMyInt& __fastcall operator*(const TMyInt& obj)
{
FValue = FValue * obj.FValue + ADDED;
return *this;
}
 
TMyInt& __fastcall operator*(const int& obj)
{
FValue = FValue * obj + ADDED;
return *this;
}
 
__fastcall operator int()
{
return FValue;
   }
};
 
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Переопределение операции
« Ответ #7 : 23 Ноябрь 2013, 15:17:16 »

Следующий оператор позволяет присвоить типу int значение типа TMyInt. Правильно?
Код
__fastcall operator int()
{
return FValue;
}

Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Переопределение операции
« Ответ #8 : 25 Ноябрь 2013, 07:10:54 »

Цитата: d7d1cd от 23 Ноябрь 2013, 15:17:16
Следующий оператор позволяет присвоить типу int значение типа TMyInt. Правильно?
Код
__fastcall operator int()
{
return FValue;
}

Да, это перегрузка оператора приведения к типу int.
Код
TMyInt b(100);
int a = b; // здесь вызывается TMyInt::operator int()
 
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Re: Переопределение операции
« Ответ #9 : 09 Декабрь 2013, 11:26:02 »

Так же будет полезно причитать книгу Герберт Шилд С++ Шаг за шагом (спокойно скачивается в нете) стр. 378 - 379
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Re: Переопределение операции
« Ответ #10 : 09 Декабрь 2013, 11:28:05 »

ой пардон      378 - 397
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.102 секунд. Запросов: 21.