Возвращаемое значение operator=()
не может быть использовано, как вы пытались продемонстрировать. Если вы думаете о перегруженном операторе как о отдельной функции, это может иметь больше смысла.
Например:
int main() {
myObject obj, obj2;
obj.isNumber = true;
obj.numVal = 17.5;
obj2.operator=(obj); // equivalent to obj2 = obj
}
Причина number = obj;
не работает в том, что вы определили myObject::operator=()
, тогда как number
будет использовать double::operator=()
(хорошо, технически нет double :: operator = () поскольку это фундаментальный тип, а не класс ... просто работайте со мной здесь).
Интересно отметить, что эта функция ведет себя как любая другая функция в том, что возвращаемое значение (return right.numval;
) игнорируется, когда оно не используется. Однако возвращаемое значение может быть назначено или использовано как возвращаемое значение любой другой функции, поэтому, если вы действительно хотите, вы можете сделать что-то вроде этого:
int main() {
myObject obj, obj2;
obj.isNumber = true;
obj.numVal = 17.5;
double number;
// number = obj; still won't work.
number = obj2 = obj; // equivalent to number = obj2.operator=(obj)
}
Это только так полезно. Как уже упоминалось, вы действительно хотите изучить операторы преобразования при попытке назначить myObject
объекты фундаментальным типам.