1-19 Random c++ Flashcards
Који од показивача p1, p2 и p3 није исправно дефинисан у примеру?
int* p1,p2;
int* p3=(int*)1000;
Pokazivac p2.
У каквом су односу дужине низова s1 и s2 у примеру:
char s1[] = “C++”;
char s2[] = { ‘C’, ‘+’, ‘+’ };
sizeof(S1) == 4
sizeof(s2) == 3
. Шта ће исписати овај програм?
int a = 1;
int* b=&a;
main(){
*b = a + 1;
*b = a + 1;
cout «_space;a «_space;endl;
}
3
Који концепти програмског језика C++ се употребљавају да би се повећала (потенцијално
поновљена) употребљивост написаног кода?
- Polimorfizam
- Nasledjivanje
- Virtualno nasledjivanje
- Sabloni
Који је редослед уништавања објеката у примеру:
int a(3);
main() {
int* n = new int(10);
int k(3);
…
delete n;
}
Tip int je primitivni tip a ne objekat. Ako bi promenljiva a predstavljala objekat, onda bi redosled unistavanja bio sledeci: Prvo ce se unistiti n, pa k, i na kraju a. ???
Да ли је нека (која?) од наредних линија кода неисправна?
short* p = new short;
short* p = new short[900];
short* p = new short(900);
short** p = new short[900];
short** p ce vratiti gresku jer pokusavamo da mu dodelimo nesto sto je tipa short*
Које операције класе Lista се извршавају у следећој наредби:
Lista l2 = Lista();
- alocira se memorija za objekat Lista
- poziva se eksplicitan konstruktor za objekat Lista
Zasto se ne poziva operator dodele?
Zasto se ne poziva konstruktor kopije?
The rule of three
Колико пута се позива деструктор класе А у следећем програму?
main() {
A a, b;
A& c = a;
A* p = new A();
A* q = &b;
}
Tri puta, za a,b i p ovo ostalo su reference
Шта су шаблони функција?
Sabloni funkcija predstavljaju specijalne funkcije koje rade sa generickim tipovima. Ukoliko nam je potrebno vise verzija iste funkcije samo sa razlicitim tipom podataka ili klasa, onda sablon funkcija moze da zameni tu grupu funkcija. Takodje konstante mogu da budu genericki parametri. U sustini sabloni nam omogucavaju genericko programiranje. Sabloni predstavljaju tip statickog polimorfizma tj. polimorfizam koji se obradjuje tokom kompilacije.
Како се пишу и користе шаблони функција?
template<typename>
T sum(T a, T b){
return a + b;
}
Ako napisemo sablon funkcije i ne koristimo u programu nijednom konkretnu funkciju, onda ce nam kompajler dati isti izvrsni kod kao da nismo ni pisali sablom. Kompajler prevodi sve konkretizovane funkcije nekog sablona. Isto vazi i za klase.</typename>
Ako definisemo konkretnu funkciju onda ona ima prioritet u odnosu na sablon i ona ce biti pozvana.
Написати шаблон функције која рачуна средњу вредност два броја за било који нумерички тип.
template <typename>
T avg(T x, T y){
return (x+y) /2;
}</typename>
Шта су шаблони класа?
template<typename a, typename b>
struct Pair{
A first;
B second;
Pair(A f, B s): first(f), second(s){}
Isto kao i sabloni funkcija, samo se odnosi na genericke klase. Primer generickih klasa su mape, vektori, skupovi,…, koji su vec deo C++-a
Како се преводе шаблони класа?
Svi genericki tipovi se zamene sa konkretnim tipovima.
Primer:
Za vector<int> dobijamo tako sto zamenimo sva pojavljivanja generickog tipa "T" sa konkretnim tipom "int". Dobijeni kod kompilator moze prevesti na klasican nacin. Bitno je naglasiti da je ovaj proces statican.</int>
Шта је неопходан услов да би се позиви неког метода динамички везивали? Шта је довољан услов?
Neophodan: Metod mora biti virtuelan. Metod je virtuelan ako ima kljucnu rec “virtual”
Dovoljan: Objektu pristupamo preko reference ili preko pokazivaca
Шта је виртуална функција?
Virtuelna funkcija (metod) su metode neke klase koje uz sebe imaju kljucnu rec “virtual”.U C++-u podrazumevano povezivanje je staticko . Ako zelimo da koristimo dinamicki polimorfizam, potrebno je naglasiti to kljucnom reci “virtual” i pozvati taj metod preko pokazivaca ili reference na objekat.
Шта је чисто виртуална функција?
CIsto virtualna funkcija je isto sto i apstraktna funkcija, predstavljaju sinonime. Cisto virtuelna funkcija je funkcija koja nema svoju implementaciju u okviru klase. Klasa koja sadrzi cisto virtualnu funkciju je apstraktna klasa. Cisto virtualnu metodu oznacavamo sa “=0” kao sufiks
Шта је апстрактна класа?
Apstraktna klasa je klasa koja ima barem jednu cisto virtuelnu metodu. Apstraktna klasa ne moze da ima svoju instancu, ali mozemo imati pokazivac ili referencu na objekat apstrakne klase sto nam omogucava da koristimo dinamicki polimorfizam. Apstraktna klasa i dalje mooe da ima svoj konstruktor koji se poziva samo u okviru konstruktora klasa koje je
nasledjuju.
Шта су уметнуте (inline) функције? Како се пишу
Umetnute “inline” funkcije su funkcije koje imaju prefiks “inline”. Predstavlja sugestiju kompajleru da “prosiri” funkciju na mestu gde je pozvana. Ideja je da se zaobidje postavljanje funkcije na “stackframe” i da se povecaju performanse.
Ovo predstavlja samo sugestiju. Kompajler odlucuje da li ce funkcija
zapravo biti prosirena. Funkcije koje nemaju “inline” takodje mogu biti prosirene.
Шта су уметнути (inline) методи? Како се пишу?
Isto kao “inline” funkcije.