p3 Flashcards
Sta uradimo definicijom varijable
Imenujemo komad memorije
Sta je ime varijable i za sta ga koristimo
Ime var je simbol koji mi uvodimo da ga mozemo koristiti u izrazu odnosno za komunikaciju sa komadom memorije
Ako se definise a ne inicijalizira varijabla sta se desi
Samo dobijemo komad memorije u kom se nalazi proizvoljna sekvenca bita
Koji izrazi se koriste za inicijalizaciju
Koriste se (), {}, =
int b{4};
int b(5);
int a = 5;
Gdje = pri inicijalizaciji predstavlja SIMBOL ZA INICIJALIZACIJU, a ne operator
Simbol = pri inicijalizaciji
Lijevo je simbol (ime varijable koje mu se dodjeli definicijom), a desno vrijednost
razlika izmedju
int a=4;
i
int a;
a=4;
u prvom slucaju se desava inicijalizacija pri deklaraciji koristeci se SIMBOLOM = koji je simbol za inicijaizaciju, te se sve nalazi u jednom stejtmentu
a u drugom slucaju se nalaze dva stejtmenta gdje u prvom se definise var, a u drugom joj se koristeci OPERATOR = dodjeljuje vrijednost
koja je razlika izmedju = () i {} pri inicijalizaciji
{} ne dozvoljava demociju odn ne dopusta gubitak podataka, dok sa = i () to je dozvoljeno iako se gube informacije
Sta je const u c++
Kljucna rijec koja NE oznacava novu tip vec je TYPE QUALIFIER.
Ta kljuxna rijec kompajleru govori da ta varijabla moze figurirati samo u izrazima gdje joj se ne mijenja vrijednkst
Kako definisemo neku varijablu kao konstantu i sta to znaci
Var definisemo kao konstantu pri definiciji gdje prije tipa varijable upise kljucna rijec const i kao takva se OBAVEZNO mora inicijalizirati
const int a =5;
Ili
int const a = 5;
Oboje
koji je tip varijable pri upotrebi kljucne rijeci const
tip ove var se ne mijenja, odn ostaje isti, ali ovakva varijabla ima ogranicen domen upotrebe i u nju se ne moze pisati, vec je moguce samo citati informacije iz iste. takodje nije dozvoljeno koristenje nekonstantnih operacija
const int a = 7;
a=5;
greska?
varijabla definisana kao konstanta se ne moze koristiti sa lijeve strane operatora dodjeljivanja
obavezno kod konstanti?
inicijalizacija
sta je default initialisation
inicijalizacija koja se desava ukoliko definisemo varijablu a ne inicijaliyiamo njenu vrijednost
ta var ima enku vr ali mi ne znamo koju
sta je primitivna varijabla
varijabla nekog od primitivnih tipova u c++
kao za takve mogu se koristiti sve 3 vrste inicijalizacije sto nije moguce kod svih tipova
Sta znaci kljucna rijec auto
U kontekstu definicije to znaci type inference (zakljuciti tip)
Koji je tip varijable pri upotrebi kljucne rijeci const
Tip varijable pri koristenju const se NE MIJENJA vec samo naznacava kompajleru da ta var ima samo jedan domen upotrebe:
U tu var se ne moze pisati nego samo citati iz nje i nije dozvoljeno koristiti nekonstantne operacije
Ukoliko pri definiciji varijable vidimo kljucnu rijec auto sta to znaci
KOMPAJLER pri definiciji var moze da zakljuxi njen tip i to na osnov tipa vr kojom je inicijalizirana var pri definiciji
Gdje se koristi kljucna rijec auto sintaksicku
Umjesto tipa varijable pri definiciji sa inicijalizacijom, ide na mjesto tipa
Da li upotrebom auto mozemo mijenjati tip varijable dalje u kodu
Ne, nakon sto kompajler zakljuci tip te var ona ce dalje u kodu imati taj tip koji je zakljucen iskljucivo
Ukratko o auto
Da bi kompajler sam zakljucio tip
Na mjestu tipa var pri definiciji sa inicijalizacijom
Kada se auto ne moze koristiti
Kada nema inicijalizacije jer kompajler bema na osnovu cega da zakljuci top te var
const auto tar = false;
Const i auto se mogu kombinirati pri definiciji var
Ovo je npr konstantna varijabla tar koja ce uvijek imati vrijednost false, a sam tip var ce odrediti kompajler
Sta je blok
Sekvenca C++ IZJAVA koja je grupisana u blok koda i ogranicena viticastim zagradama {}
Sta definise blok koda
Opseg/scope
Zasto je bitna pozicija definicije varijeble u odnosu na blok
Jer se time utice na njenu vidljivost (dostupnost) i njen zivotni vijek
Koliko stejtmenta moze imati blok
Proizvoljno dugu sekvencu stejtmenta ogranicenu {}
Sta je vidljivost var i odakle potice
Vidljivost odn dostupnost te var oznacava KADA se moze koristiti ta var da se u nju pise i iz nje cita
Vidljivost potice i zavisi od definicije var u odnosu na blok
Sta je zivotni vijek var i odakle potice
Zivotni vijek predstavlja koliko je dugo neka varijabla na raspolaganju. Odn kada se memorija zauzme za tu var (kada var nastane) i kada se ta memorija otpusti (kada var nestane)
Zavisi od definicije var u odnosu na blok koda
Gdje je definirana lokalna var odnosno sta je lokalna var
To je var definirana UNUTAR nekog bloka
Kakav je zivitni vijek lokalne var
Ona nastaje pri izvrsavanju stejtmenta(CPU) u kojoj je ona definirana a nestaje po izvrsenjy tog bloka odnosno nakon sto cpu izvrsi zadnji stejtment u tom bloku
Ukoliko je var definisana u bloky gdje je ona vidljiva
Vidljiva je u svim stejtmentima od njene definicije do kraja tog bloka programa eventualni y ugnjezdenim blokovima tog bloka
Globalna var
Definisana van svih blokova
Zivitni vijek glob var
Nastaje prije izvrsenja prve izjave programa (tada joj se alocira memorija) i nestaje neposrredno po zavrsetku izvrsenja zadnje izjave u programu
Gdje je vidljiva glob var
U cijelom programu, bilo gdje u kodu
Ako se glob var ne inicijalizira
Memorija koja joj je alocirana je popunjena nulama za razliku id default inicijalizacije kod lokalnih varr
Ako nije moguca definicija globalne varijable sta se radi
Deklarise se ista a definicjja se moze poslije uraditi
Kljucna rijec static uz lokalnu varijablu
Modificira zivotni vijek ali ne i vidljivost
Sta mijenja static uz lok var
Var nece nestati izvrsavanjem naredbi bloka u kom je definisana, vec ostaje u memoriji i pri napustanju tog bloka, zadrzava trenutnu vrijednost pa pri sljedecoj iteraciji SE PRESKACE izjava u kojoj je var definisana
Lok static i memorija?
Prostor u memoriji alociran static varijabli ostaje savuvan i nakon napustanja bloka
Lokalna static var
Postoji sve vrijeme ali nije vidljiva u svim blokovima
Global static var
Vidljiva u blokovima zapisanim u ISTOM FAJLU u kojem je izjava sa definicijom te glob var
Da li je dozvoljena redefinicija
Unutar jednog bloka globalnog ili lokalnog redefinicija NIJE DOZVOLJENA (nije dozvoljeno definiranje varijable sa istim imenim koje ima varijabla vec prethodno definirana u tom bloku
Vazi li pravilo redefincije za ugnjezdene blokove
Ne
Kada je redefinicija dozvoljena
U razlicitim opsezima odn blokovima
Redefinicija u razlicitkm opsezima
Glob i lok var mogu imati isto ime jer se memorija alocira na razlicitim mjestima
Ako je var redefinirana kada pozovemo tu var u bloku hoce li se koristiti lokalna ili goobalna var
Koristi se LOKALNA na globalna bez obzira na vidljivost. Kompajler pregleda kod unazad i trazi najblizu definicijy varijable pod tim imenom
SHADOWING
Sta je neophodno za kompajliranje
Da bi se c++ program kompajlrao u masinac mora biti definirana PRVA INSTRUKCIJA u programu (entry point)
Odnosno da bi se uppste pocelo kompajlirati neophodno je definirati funkciju main
Zasto je fja main bitna
To nije kljucna rijec vec nju ocekuje sistem za kompajliranje odnosno LINKER
Sta je entry point
Prva izjava unutar bloka koji se zove main
Minimalan balidan blok?
int main(){}
Sta main radi
Uspostavlja redoslijed izvrsavanja programa
Free standing blok u c++
Nije moguc
Sta je linker
Zadnja komponenta u kompajliranju
On trazi fju main ds napravi program koji se moze ucitati u memorinu i odakle se moze izvrsavati (povevsi od maina)
Sta ako nema main
Ukoliko nije definisan main ne moze se proizvesti izvrsna datoteka kojom se pokrece izvrsavanje programa
Za sta sluzi namespace
za logicku operaciju koda
Sve var u c++ pripadaju nekom namespaceu
Da
Kako se kreira novi namespace
namespace ime
{
// definicije simbola u ns(var, fje, klase…
}
Pripadaju li blokovi ns
Da i sve ostalo sto je validan stejtment
Da li se sta mijenja vezano za var ako se ona definise u ns
Ne, definicija var unutar ns ne ytice na njen zivotni vijek
Tako ni na globalni karakter gkobalnih varijabli ako su definirane u ns
Ako ne navedemo kojem ns pripadaju simboli gdje su oni?
Tada kompajler implicitno to svrstava u namespace koji je rezervisan za kod koji se ne nalazi ni u kakvom drugom ns. Taj ns je neimenovan a jos se zove i globalni ns
Obzirom na definiciju ns
Sta je globalna var
Globalna var je var koja se nalazi izvan svih blokova osim namespace bloka u kom je definirana
Sta omogucava ns u vidu redefinicije
Omogucava da U ISTOM OPSEGU (BLOKU) mozemo imaati simbol pod istim imenom ppd uslovom da se oni nalaze u razlicitim ns
Pristup simbolima definiranim u namespaceu unutar tog ns
Direktno pristupamo koristeci ime tog simbola u izjavi
Pristup simbolu iz ns u izjavama van tog ns
POMOCU OPERATORA ::
Primjer kako pristupamo simbolu iz drugig ns
imens::simbol
Sta je ::
Lijevo asocijativan binarni operator
Lijevo uzima vrijednost simbola definiranog kao ns
Desno uzima sibol definisan u ns
Da li je moguce importovati sve simbole iz jednog ns u drugi
Da, koristimo
using namespace imens;
Da li je moguce importovati samo npr jedan simbol iz ns u drugi ns
Da koristimo
using imens::simbolkojiimportujemo;
Sta se desava kada importujemo nesto iz drugog ns
Deklarisemo kompajleru da tretira simbol iz namespacea koji smo importovali kao da je definiran u ns u stejtmentu gdje smo ga importovali
Mogu li ns biti ugnjezdeni
Da
Da li je definicija novog ns validan stejtment u nekom drugom bloku
Da
Kako se pristupa ns ugnjezdenom u drugom ns
Posto je :: operator lijevo asicijativan prvo pristupimo ns pa ugnjezdenom ns pa simbolu
ns1::ugnjezdenins::simbol
Kako pristupamo simbolu iz neimenovanog ns
Pomocu :: bez da navedemo ime ns lijevo
Npr
::simbol;