Здравствуйте Терехов Василий Владимирович, вы писали:
ТВВ>Привет
ТВВ>Как не в классе перерпределить оператор равно ну скажем для 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= не может быть объявлен как не член класса.
— Он не наследуется потомками.
— Если не определено ни одного оператора присваивания, компилятор может сгенерировать оператор присваивания по умолчанию.
ТВВ>Как не в классе перерпределить оператор равно ну скажем для 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; ТВВ>}
Не работает по вышеуказанным причинам.
Желаю удачи!!!
Здравствуйте Alexei Monastyrsky, вы писали:
AM> Видимо, для встроенных типов перегрузка AM>операторов в языке не предусмотрена.
так точно ... так как перегрузка операторов это feature
для классов — а всроенне типы — это не классы...