Varijable su promjenjive dok su konstante su izrazi sa fiksnim, nepromjenjivim vrijednostima.
Morate inicirati konstantu kada ju napravite, i ne možete jej prirdružiti novu vrijednost kasnije. Poslje kada je konstanta inicirana njezina vrijednost je nepromjenjiva.
Literal Constants (konkretne konstante)
C++ ima dva tipa konstanti: konkretne i slimbolične (literal i symbolic)
Literal konstanta je vrijednost upisana direktno u program kada god je to potrebno. Npr.
int godine = 24;
godine je varijabla tipa integer, a 24 je literal konstanta. Ne možete pridružiti vrijednost na 24, i ta vrijednost ne može biti promijenjena.
Symbolic constants (simbolične konstante)
Simbolična konstanta je konstanta koja je pretstavljena po imenu, baš kao i varijabla. Ali nakon što je konstanta inicirana, njezina vrijednost ne može biti promjenjena. Ako imate jednu integer varijablu imenovanu "studenti" i drugu imenovanu "ucionica", možete procijeniti koliko studenata imate, i broj učionica, te ako znate da je 15 studenata po razredu.
sudenti = ucionice * 15;
U ovom primjeru, broj 15 je Literal konstanta. Kod bi bio puno jednostavniji za čitanje i jednostavniji za održavati ako biste tu vrijednost zamijenili simboličnom konstantom.
studenti = ucionice * ucenika_po_ucionici;
Ako kasnije odlučite promijeniti broj studenata po ucionice, mozete to uciniti tako da definirate konstantu ucenika_po_ucionici bez potrebe za izmjenama u svakom dijelu koda gdje ste koristili tu vrijednost.
Definiranje konstanti sa #define
Da biste definirali konstantu na sa staromodnim, i lošim načinom unest ćete
#define ucenika_po_razredu 15;
Primjetite da ucenika_po_ucionici nema konkretni tip (int, char itd.). Svaki puta kad preprocesor vidi riječ ucenika_po_razredu upisat će broj 15 u tekst.
Zbog toga što se preprocesor pokreće prije kompajlera, kompjuter nikad ne vidi vašu konstantu, ono vidi broj 15.
Definiranje konstanti sa const
Iako #define radi, postoji bolji, ukusniji način definiranja konstanti u C++
const unsigned int ucenika_por_ucionici = 15;
U ovom primjeru se isto deklarira simbolična konstanta imenovana ucenika_po_ucionici, ali ovaj puta ucenika_po_ucionici je napisano kao unsigned int (bez predznaka, cijeli broj)
S ovime imate više za tipkati ali nudi nekoliko prednosti.Najveća razlika je u tome što ova konstanta ima tip i kompajler može prisliti da to bude korišteno po svom tipu.