Do sada smo naučili kako C++ radi sa različitim tipovima podataka:
intfloatdoublecharboolstring
Ali u realnom programiranju podaci retko ostaju zauvek u istom obliku.
Vrlo često moramo da pretvaramo jedan tip podatka u drugi.
Na primer:
- ceo broj u decimalni broj
- decimalni broj u ceo broj
- karakter u broj
- broj u karakter
boolu broj- broj u
bool
Ovaj proces zove se:
konverzija tipova podataka
ili:
type casting
Ovo je izuzetno važna tema jer se casting koristi gotovo svuda:
- u matematici
- radu sa funkcijama
- obradi podataka
- korisničkom unosu
- radu sa memorijom
- sistemskom programiranju
Ako ne razumemo casting, program može davati neočekivane rezultate.
U ovoj lekciji naučićemo:
- šta je casting,
- implicitnu i eksplicitnu konverziju,
- gubitak podataka,
- pretvaranje između numeričkih tipova,
chari ASCII konverzije,boolkonverzije,- i najčešće greške početnika.
Šta je konverzija tipova?
Konverzija znači:
pretvaranje jednog tipa podataka u drugi
Primer:
int broj = 10;
double cena = broj;
Ovde:
int
postaje:
double
Rezultat:
10 → 10.0
Program menja način predstavljanja podatka.

Zašto je casting potreban?
Zato što različiti tipovi imaju različitu namenu.
Primer:
int
za cele brojeve
Primer:
double
za decimalne brojeve
Ako želimo precizno deljenje:
5 / 2
nije dovoljno koristiti samo int.
Moramo promeniti tip.
Primer:
(double)5 / 2
Rezultat:
2.5
Bez konverzije:
2
Implicitna konverzija
Ovo je automatska konverzija koju C++ radi sam.
Primer:
int broj = 10;
double cena = broj;
C++ automatski pretvara:
10 → 10.0
Programer ne mora ništa posebno da napiše.
To je:
implicit conversion
Primer:
int a = 5;
double b = 2.5;
cout << a + b;
Rezultat:
7.5
Ovde C++ automatski pretvara a.
Zašto implicitna konverzija postoji?
Da bi programiranje bilo praktičnije.
Inače bismo stalno morali ručno da pretvaramo tipove.
Ali implicitne konverzije ponekad mogu napraviti problem.

Eksplicitna konverzija
Ovo je kada programer namerno kaže:
pretvori ovaj tip.
Primer:
double x = 9.8;
int broj = (int)x;
Rezultat:
9
Decimalni deo nestaje.
To je:
explicit cast
Klasični C-style cast
Primer:
(int)x
To je tradicionalni način.
Radi i danas.
Moderni C++ cast
Kasnije ćemo koristiti:
static_cast<int>(x)
To je moderniji i preporučen pristup.
Za početnike je lakše prvo razumeti:
(int)x
Gubitak podataka
Veoma važna tema.
Primer:
double broj = 15.99;
int x = (int)broj;
Rezultat:
15
Ne:
16
Casting ne zaokružuje.
On:
odseca decimalni deo
To je česta greška početnika.
Primer sa float
float temperatura = 36.8f;
int t = (int)temperatura;
Rezultat:
36
Decimalni deo se gubi.

Integer division problem
Veoma važna tema.
Primer:
int a = 5;
int b = 2;
cout << a / b;
Rezultat:
2
Zašto?
Jer oba operanda su int.
Ako želimo decimalni rezultat:
cout << (double)a / b;
Rezultat:
2.5
Ovde smo uradili cast.
int u char
Pošto char koristi ASCII kodove:
Primer:
int broj = 65;
char slovo = (char)broj;
cout << slovo;
Rezultat:
A
Jer:
65 = A
char u int
Obrnuto:
char slovo = 'A';
cout << (int)slovo;
Rezultat:
65
ASCII konverzija.
Broj u bool
Primer:
bool status = 1;
Rezultat:
true
Primer:
bool status = 0;
Rezultat:
false
Pravilo:
0 → false
sve ostalo → true
Primer:
bool x = 25;
Rezultat:
true
bool u int
Primer:
bool aktivan = true;
cout << (int)aktivan;
Rezultat:
1
Ako:
false
onda:
0
char i matematika
Primer:
char slovo = 'A';
slovo = slovo + 1;
cout << slovo;
Rezultat:
B
Zašto?
Jer:
A = 65
B = 66
Implicitni problemi
Primer:
double cena = 99.99;
int x = cena;
Radi.
Ali rezultat:
99
C++ automatski pretvara.
To može biti opasno ako ne primetimo.

Casting i unos podataka
Primer:
char brojKarakter = '7';
Ovo nije broj 7.
ASCII:
55
Ako želimo pravi broj:
potrebna je konverzija.
Primer:
int broj = brojKarakter - '0';
Rezultat:
7
Ovo je veoma koristan trik.
Moderni static_cast
Profesionalniji stil:
Umesto:
(int)x
možemo:
static_cast<int>(x)
Primer:
double cena = 19.95;
int celaCena = static_cast<int>(cena);
Isti rezultat:
19
Kasnije ćemo detaljnije učiti C++ cast stilove.
Najčešće greške početnika
1. Očekivanje zaokruživanja
Pogrešno očekivanje:
(int)9.9
da daje:
10
Ne.
Daje:
9
2. Nerazumevanje integer division
5 / 2
nije:
2.5
3. Mešanje char i brojeva
'5'
nije isto što i:
5
4. Neočekivane implicitne konverzije
Program radi
ali daje pogrešan rezultat.
5. Korišćenje bool bez razumevanja
bool x = 999;
rezultat:
true
Praktičan primer
#include <iostream>
using namespace std;
int main() {
int a = 5;
int b = 2;
double rezultat = (double)a / b;
cout << rezultat << endl;
char slovo = 'A';
cout << (int)slovo << endl;
double cena = 19.95;
cout << (int)cena << endl;
return 0;
}
Rezultat:
2.5
65
19
Zašto je casting važan?
Bez castinga teško je raditi:
- matematiku
- obradu ASCII karaktera
- funkcije
- unos i validaciju
- konverzije podataka
- sistemski kod
Ovo je jedna od veoma važnih C++ tema.
Rezime
U ovoj lekciji naučili smo:
implicitna konverzija
automatska
eksplicitna konverzija
ručna
Važne opasnosti:
- gubitak decimala
- integer division
- implicitne greške
Casting je osnovni alat ozbiljnog programiranja.
Mini test
- Šta je casting?
a) Brisanje promenljive
b) Pretvaranje tipa podatka - Šta daje:
(int)9.8
a) 10
b) 9
- Šta daje:
5 / 2
a) 2
b) 2.5
- ASCII za
A?
a) 65
b) 97 - Šta daje:
bool x = 5;
a) false
b) true
Zadaci za vežbu
- Pretvori
doubleuint. - Pretvori
charu ASCII broj. - Pretvori ASCII broj u karakter.
- Ispravi integer division problem.
- Probaj
static_cast.
Domaći zadatak
Napravi program koji:
- unosi dva cela broja
- prikazuje integer deljenje
- prikazuje decimalno deljenje pomoću castinga
- prikazuje ASCII kod unetog karaktera
