Přetypování
Přetypování je v informatice operace znamenající převedení jednoho datového typu na jiný.
Implicitní a explicitní přetypování
[editovat | editovat zdroj]Implicitní (automatické - koerce)
[editovat | editovat zdroj]Toto přetypování se provede automaticky pokud se původní datový typ "vejde" do datového typu cíleného objektu nebo převodem nedojde ke ztrátě informace. Toto nastává například pokud jsou v jedné aritmetické operaci přítomny operandy různých typů. V této situaci se operand s nižší prioritou konvertuje na operand s prioritou vyšší (nižší rozsah→vyšší rozsah).
příklad pro jazyk C:
int a = 3;
double b = 2.123;
double c;
c = a + b; // a se převede na double hodnotu 3.000
int |
unsigned int |
long |
unsigned long |
float |
double |
long double |
Explicitní (vynucené)
[editovat | editovat zdroj]Vynucené přetypování se použije tam, kde není implicitní převod možný. Nastává zde problém se smysluplností těchto převodů a zároveň je třeba dát pozor na ztrátu informace, ke které při této konverzi dochází.
příklad pro jazyk C:
double a = 5.3;
int b;
b = (int)a; // do proměnné b se uloží oříznuté a, tj. 5
Při explicitním přetypování je třeba dbát zřetel na to, aby cílený typ dokázal pojmout informaci převáděného typu. V tom případě bude výsledkem nedefinovaná hodnota.
char y = 'd';
int a = 256;
y = (char) a;
C/C++
[editovat | editovat zdroj]Přetypování v C/C++ se provádí tak, že se před výraz napíše do závorek typ, na který chceme přetypovat.
int a = 60, b = 7;
float c, d;
char ch = 'x';
c = a / b;
d = (float) a / b;
printf("Celočíselný výsledek: %+4.3f\n", c);
printf("Racionalni deleni: %+4.3f\n", d);
printf("ASCII kod znaku %c je %i\n", ch, (int) ch);
V C++ se pro přetypování ukazatelů používají operátory static_cast, dynamic_cast a reinterpret_cast.
A *x = new B(); // třída A je předek třídy B
B *y = new B();
A *z = new A();
B *p = static_cast<B *>(x);
B *q = static_cast<B *>(z); // riskantní přetypování na potomka.
B *r = dynamic_cast<B *>(z); // provede se kontrola a r bude nulové.
int yi = reinterpret_cast<int>(y);
PHP
[editovat | editovat zdroj]PHP explicitně nepoužívá deklarování typu proměnně. Její typ se určí tím co se do ní vloží. PHP rozlišuje čtyři základní typy proměnných: Integer, Float, Boolean a String. K přetypování slouží příkaz settype(), který nenávratně konvertuje proměnnou na jiný typ. Společně s příkazem settype() existuje příkaz gettype(), který vrací typ proměnné.
Nový → Původní (dolu) |
String | Float | Integer | Boolean |
---|---|---|---|---|
String | --- | Začíná-li číslem toto číslo, jinak nula. Když neobsahuje '.', 'e', nebo 'E' | Začíná-li číslem toto číslo, jinak nula. Když neobsahuje '.', 'e', nebo 'E' | "" a "0"=false, ostatní True |
Float | Převede na řetězec | --- | Ořízne se desetinná část | 0.0=False, ostatní True |
Integer | Převede na řetězec | Převede se beze změny | --- | 0=False, ostatní True |
Boolean | false="" true="1" | false=0.0 true=1.0 | false=0 true=1 | --- |
Java
[editovat | editovat zdroj]U Javy se implicitní přetypování provádí automaticky stejně jako v C.
float a = 25;
double b = 13;
b = a; //implicitní konverze
Explicitní konverze musí být inicializována programátorem ve zdrojovém kódu, jinak se příkaz vyhodnotí jako chybový.
float a = 6;
double b = 4;
a = (float)b; //explicitní konverze