Zkouska 06.02.2012

Základní kurs objektově orientovaného programování v C++. Třídy a objekty, zapouzdření, metody, plymorfismus. Abstraktní datové typy, přetěžování. Kontejnery, iterátory, algoritmy. Šablony, generické programování, kompilační polymorfismus. Výjimky. Bezpečné a přenositelné programování, vazby na OS.
Uživatelský avatar
Davpe
Matfyz(ák|ačka) level II
Příspěvky: 98
Registrován: 22. 9. 2010 16:07
Typ studia: Informatika Bc.
Kontaktovat uživatele:

Zkouska 06.02.2012

Příspěvek od Davpe »

Vetsina otazek ze socketky, ale obcas se tam objevi novinka, tady mate utrzky toho co si pamatuju.

1) Mame tridu Rectangle odvozenou od base. Mame kod:
vector<Base *> a;
Jak vlozit do tohoto pole Rectangle?
Mel jsem za A:

Kód: Vybrat vše

{Rectangle r; a.push_back(&r);}
Odpoved mi byla zakrouzkovana a dostal jsem za ni 1 trestny bod. Takze mozna je tam spravne jeste nejaka varianta.

2)

Kód: Vybrat vše

int a;
int f(int p, int q) {
a = p+q;
p = a*q;
return p+a;
}

int g() {
a = 3;
return f(a,a);
}
Hodnota, kterou vraci g? (24)

3)
Dve tridy: A, B kde A je predek B. Kazda mela ruzne funkce (i virtualni), ktere vracely nejake cislo nebo jinou funkci.
Mame kod

Kód: Vybrat vše

A x; B y;
A *p = &x;
A *r = &y;
B *q = &y;
A pod tim byly 4 otazky na zaskrtavani. Vzdy se volala nejaka funkce (p->f apod.) a melo se zaskrtnout, jaka bude vysledna hodnota nebo "chyba"). Jen bych chtel podotknout, ze promenne p, q ukazuji na sve tridy, takze tam neni zadny trik, nevola se nic virtualniho, zavola se jen clenska funkce.

4) PES. SAVEC a ZVIRE
Mame tyto tri tridy a hiearachie je ZVIRE->SAVEC->PES. Pak byly 4 moznosti na zaskrtavani (a byly docela zdrojem chyb), zda dana konstrukce je spravna, neprojde prekladacem ci projde prekladacem ale stane se neco nepekneho (memory leak). Myslim, ze zadna z tech co ta byly neprosla prekladacem
Priklady konstrukci

ZVIRE azor = *new PES;
(tohle by podle me mel byt splicing a prekladacem by to melo projit, ale vznikl by memory leak)
PES azor = * new ZVIRE;
(neprojde prekladacem)
PES & azor = & new PES;
(neprojde prekladacem)

(celkove si myslim, ze pokud se na prave strane vyskytuje konstrukce "& new TRIDA" tak to prekladacem nemuze projit nikdy, protoze new by mel vracet adresu na pametovy blok a brat z adresy jeste jednou adresu nejde. takove konstrukce tam byly dve).

Pripadne me nekdo opravte/ potvrdte to :)
Uživatelský avatar
kolage
Matfyz(ák|ačka) level I
Příspěvky: 32
Registrován: 27. 1. 2011 18:10
Typ studia: Informatika Mgr.

Re: Zkouska 06.02.2012

Příspěvek od kolage »

Ja mel napr. jeste podobnou otazku te prvni - akorat kontejner byl std::vector<Base>, takze se tam nedaly vlozit zadni potomci. Jeste bych se zeptal - uz mate zapsane znamky?
Uživatelský avatar
Davpe
Matfyz(ák|ačka) level II
Příspěvky: 98
Registrován: 22. 9. 2010 16:07
Typ studia: Informatika Bc.
Kontaktovat uživatele:

Re: Zkouska 06.02.2012

Příspěvek od Davpe »

kolage píše: Jeste bych se zeptal - uz mate zapsane znamky?
Ne. Snad nebudu litovat, ze jsem si to nenechal zapsat do indexu :) (info pro budouci, index s sebou, zapisuje to rovnou ;) )
vojta_vorel
Matfyz(ák|ačka) level I
Příspěvky: 49
Registrován: 14. 1. 2011 15:10
Typ studia: Informatika Ph.D.

Re: Zkouska 06.02.2012

Příspěvek od vojta_vorel »

A především, zapisuje to i těm co ještě nemají zápočet! Nevěděl jsem to a málem mě to stálo život když jsem rychle lezl pro index skrz zábradlí v posluchárně :)
Odpovědět

Zpět na „NPRG041 Programování v C++“