Přetypování

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Přetypování je v informatice operace znamenající převedení jednoho datového typu objektu na jiný.

Implicitní a explicitní přetypování[editovat | editovat zdroj]

Implicitní (automatické)[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
Tabulka priorit (od nejnižší k nejvyšší)
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 = (int) 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 Foat 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
Foat 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

Zdroje/Externí odkazy[editovat | editovat zdroj]