Преобразование типа в языке C++ в целом аналогично такому преобразованию в других языках. Но есть несколько тонкостей, которые выделяют C++ в этом плане.
Как известно, есть 2 вида преобразования типа – неявное и явное. Первый вариант означает, что компилятор при считывании кода изменяет тип самостоятельно. Для примера
1 2 3 4 5 |
int i=10 float j=5; float a; A=i+j; |
Программа сама меняет тип i на float и суммирует 2 числа. Тип меняется только для этой функции.
Второй вариант подразумевает, что преобразование идет с помощью специальной функции. Ниже приведен пример подобного
1 2 3 |
int m=15; A=float(15); |
Так же преобразования возможны с помощью функций atoi, atof, atol, из массива символов в числа разных форматов.
1 2 3 |
int a = atoi(const char* str) long b = atol(const char* str) double c = atof(const char* str) |
Для обратного перевода из числа в строку можно воспользоваться функцией
1 |
sprintf(char* buffer, const char* format [, argument] ... ); |
которая напоминает функцию printf, но печатает не на экран, а в строку buffer, или встроенными функциями компилятора.
Для примера, в компиляторе Borland перевод из int в char* имеет вид char* itoa(int value, char* string, int radix). Параметры этой функции: value – исходное число, string – возвращаемая строка, radix – система счисления (для десятичной системы счисления radix = 10).
Все виды преобразований не слишком надежны и зачастую дают неточности, так что использование их в коде сопряжено с трудностями. Рекомендуется делать проверки результатов преобразований и задавать граничные значения.
Приведем пример программы, преобразующей целое число в строку, строку в вещественное число и вещественное число в строку.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream.h> // подключаем функцию cout #include <stdio.h> // подключаем функцию sprintf int main(int argc, char* argv[]) { int A; float B; char C[10]; A = 10; sprintf(C, "%d", A); cout<<C<<" "; B=atof(C); cout<<B<<" "; sprintf(C, "%f", B); cout<<C<<" "; return 0; } |