C/C++

Операторы преобразования типов в C++

Я застрял на операторах. Если операторы арифметики мне уже понятны, то операторы преобразования нифига. Лафоре очень хреново эту тему объясняет, а на ютубе роликов нет.

Можете объяснить, что например, будет делать operator float()? operator int()? Нутром чую, работа с операторами преобразования бесполезна.
Сергей 1
Сергей 1
333
 #include  
using namespace std;
class Integer {
int value;
public:
Integer() : value(0) {}
Integer(const int value) : value(value) {}
operator int() { return value; }
};
int main() {
Integer i = 5;
int n = i;
}
ЕК
Евгений Казанков
52 462
Лучший ответ
Эти функции будут вызываться в следующих случаях:

MyClass x;
float y;
int z;
y = (float) x;
z = (int) x;
Сергей 1 Какое лаконичное и красивое изложение. Спасибо
Ну самый тупой и простой пример:
float x = 1 / 2;
ожидаем 0.5 а получаем 0.
1 - это инт, 2 - это тоже инт, если два типа совпадают, то и результат арифметики будет таким же, инт. Т.е. 0, потому что инт отбрасывает дробные части. И затем этот ноль присваивается переменной x.
Чтобы получить 0.5 нужно одну или обе части деления привести к дробному типу.
float x = float(1) / 2;
Теперь результат float и инт даст флоат, так как реальные типы имеют больший приоритет чем целочисленные. Флоат уже умеет хранить дробные части, так что выражение будет иметь значение 0.5 которое и присвоится переменной x.
не путать с float x = float(1/2); так как выражение 1/2 будет иметь тип инт как и в первом случае и вернет 0.
ND
Nikolas Dorogov
51 417
Разве в этом может быть что-то не понятно?
float() преобразует к вещественному числу
int() - к целому числу
Вот и всё...
И это на практике бывает нужно очень часто
Нутром чую, работа с операторами преобразования бесполезна
Неправильно чуюте, преобразование нужно допустим у вас координаты во float а функция принимает int, тогда нужно преобразовывать из float в int, иначе компилятор скажет что это ошибка.