Переопределение =
От: Терехов Василий Владимирович  
Дата: 08.05.01 06:03
Оценка:
Привет

Как не в классе перерпределить оператор равно ну скажем для int?
И почему не работает следующее:

int operator=(const int i)
{
cout << "Overload int=" << endl;
return i;
}

int main()
{
int i;
i = 5;
return 0;
}

Выдает ошибку:
error C2801: 'operator =' must be a <Unknown> member
Re: Переопределение =
От: Черневич Василий Болеславович  
Дата: 08.05.01 07:24
Оценка:
Здравствуйте Терехов Василий Владимирович, вы писали:

ТВВ>Привет


ТВВ>Как не в классе перерпределить оператор равно ну скажем для int?


Никак! Я вроде бы и раньше это читал а сейчас еще раз нашел на MSDN.

The assignment operator (=) is, strictly speaking, a binary operator. Its declaration is identical to any other binary operator, with the following exceptions:

— It must be a nonstatic member function. No operator= can be declared as a nonmember function.
— It is not inherited by derived classes.
— A default operator= function can be generated by the compiler for class types if none exists.

Ну и чтобы не нарушать правила форума, вольный перевод:

Оператор присваивания (=), строго говоря, бинарный оператор. Его объявление идентично объявлению любого другого бинарного оператора, со следующими ограничаниями:

— Он должен быть нестатической функцией-членом класса (как ужасно это звучит по-русски :). operator= не может быть объявлен как не член класса.
— Он не наследуется потомками.
— Если не определено ни одного оператора присваивания, компилятор может сгенерировать оператор присваивания по умолчанию.

P.S.: Извините за кривоватый перевод :)
\/\/i||i
Re: Переопределение =
От: Mobster  
Дата: 08.05.01 09:58
Оценка:
Здравствуйте Василий, вы писали:


ТВВ>Как не в классе перерпределить оператор равно ну скажем для int?

Оператор = — бинарный, то есть требует два аргумента. Соотвественно, если вы его перегружаете ВНЕ класса, необходимо чтобы он и принимал два аргумента. То есть что-то вроде:

int operator=(const int i, MyClass obj) // Или аргументы местами поменять...

Кроме того, при перегрузке опреторов ГЛОБАЛЬНО, необходимо, чтобы хотя бы один из аргументов был пользовательского типа (то есть не-встроенного). Понятно, что это необходимо для того, чтобы не переопределить смысл операторов для встроенных типов данных (int, float, etc.).

ТВВ>И почему не работает следующее:


ТВВ>int operator=(const int i)

ТВВ>{
ТВВ> cout << "Overload int=" << endl;
ТВВ> return i;
ТВВ>}

ТВВ>int main()

ТВВ>{
ТВВ> int i;
ТВВ> i = 5;
ТВВ> return 0;
ТВВ>}

Не работает по вышеуказанным причинам.
Желаю удачи!!!
Re: Переопределение =
От: Alexei Monastyrsky http://rusf.ru/english/
Дата: 08.05.01 14:04
Оценка:
Видимо, для встроенных типов перегрузка
операторов в языке не предусмотрена.
Re[2]: Переопределение =
От: SIV BLADER  
Дата: 10.05.01 01:37
Оценка:
Здравствуйте Alexei Monastyrsky, вы писали:

AM> Видимо, для встроенных типов перегрузка

AM>операторов в языке не предусмотрена.
так точно ... так как перегрузка операторов это feature
для классов — а всроенне типы — это не классы...
* thriving in a production environment *
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.