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í
Implicitní (automatické - koerce)
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
Tabulka priorit (od nejnižší k nejvyšší) |
int |
unsigned int |
long |
unsigned long |
float |
double |
long double |
Explicitní (vynucené)
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++
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
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
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
Externí odkazy
- www.sallyx.org
- www.linuxsoft.cz
- php.net
- physics.ujep.cz
- vyuka.eparo.cz[nedostupný zdroj]