HOGESCHOOL VAN AMSTERDAM Informatica Opleiding
. CPP 1 van 10 ADSdt 1-2009
TENTAMENVOORBLAD Voor aanvang van het tentamen s.v.p. de tentamengegevens goed doorlezen om eventuele misverstanden te voorkomen!! Naam student
:
Studentnummer
:
Groep
:
Studieonderdeel
: C++ voor Java Programmeurs (CPP)
Datum
: 26-01-10
Tijd
: 8:30-10:10
Propedeuse/Hoofdfase
: Afstudeerfase
Studiejaar
: 2009/2010
Docent
: Eric Ravestein
Aantal bladz. (incl.voorblad)
: 10
Toegestane hulpmiddelen
: geen
Normering tentamen
: Elke vraag scoort 1 punt tenzij anders aangegeven. Het cijfer is de (2+totaalscore)/2
Bijzonderheden
: Vul het antwoord bij de betreffende tentamenopgave in. Tenzij anders aangegeven zijn bij de multiple choice vragen één of meerdere antwoorden mogelijk. Onduidelijke markeringen of onleesbare tekst wordt fout gerekend.
Dit tentamen dient na afloop te worden ingeleverd !
Veel succes!
HOGESCHOOL VAN AMSTERDAM Informatica Opleiding
. CPP 2 van 10 ADSdt 2-2009
Vraag 1 Wat is het resultaat van het volgende programma? #include
using namespace std; class Hoofd { protected: int x,y; public: virtual int berekening() {return x*y;} }; class Afgeleid: public Hoofd { public: Afgeleid(int x, int y) {this->x = x; this->y=y;} int berekening() {return 2*x;} }; void fie1(Hoofd h) {cout <<"resultaat : "<< h.berekening() << endl;} void fie2(Hoofd* h) {cout <<"resultaat : "<< h->berekening() << endl;} int main(int argc, char* argv[]) { Afgeleid a(3,4); fie1(a); fie2(&a); return cin.get(); } □ □ □
.............................................................................. .............................................................................. ..............................................................................
Vraag 2 Wat is de output van het volgende programma?
/******************************* * argument.cpp * aanroep: * d:\argument Jan code=4 * *******************************/ #include using namespace std; int main(int argc, char* argv[]) { cout << argc << endl; for (int i=0;i<argc;i++) cout << argv[i] << endl; return cin.get(); } □ □ □ □ □ □
.............................................................................. .............................................................................. .............................................................................. .............................................................................. .............................................................................. ..............................................................................
HOGESCHOOL VAN AMSTERDAM Informatica Opleiding
. CPP 3 van 10 ADSdt 3-2009
Vraag 3 Is het volgende programma correct? /********** * Punt.h **********/ #include using namespace std; class Punt { double x,y; public: Punt(); void setPunt(double ,double ); string toString(); }; /************** * Punt.cpp **************/ #include "Punt.h" #include #include <sstream> using namespace std; Punt::Punt(){x=0.0;y=0.0;} void Punt::setPunt(double x,double y){ this->x=x; this->y=y; } string Punt::toString(){ ostringstream ss(ostringstream::out); ss << "("<<x<<","< #include <sstream> using namespace std; void DrieHoek::setA(double x, double y) {pA.setPunt(x,y);} void DrieHoek::setB(double x, double y) {pB.setPunt(x,y);} void DrieHoek::setC(double x, double y) {pC.setPunt(x,y);} string DrieHoek::toString() { string s; s = "("+ pA.toString()+";" + pB.toString()+";" + pC.toString()+")"; return s; }
HOGESCHOOL VAN AMSTERDAM Informatica Opleiding
. CPP 4 van 10 ADSdt 4-2009
/********************** * Main.cpp **********************/ #include "Punt.h" #include "DrieHoek.h" #include using namespace std; int main(int argc, char* argv[]){ Punt p,q; DrieHoek d; q.setPunt(2.0,0.0); cout << p.toString()<< endl; d.setA(2.0,0.0);d.setB(0.0,2.0);d.setC(0.0,0.0); cout << "Driekhoek "<< d.toString() << endl; return cin.get(); }
□ □ □
De definitie van de klasse Driehoek moet tussen #ifndef ... #endif compiler direcives. #include Punt.h moet uit Main.cpp worden verwijderd. De definitie van de klasse Punt moet tussen #ifndef ... #endif compiler directives.
□ Zowel de definities van de klassen Punt en Driehoek moeten tussen #ifndef #endif compiler directives. □ □
...
De klasse Driehoek heeft geen constructor De member variabelen van de klassen Punt en Driehoek zijn niet private gedeclareerd
Vraag 4 Is in het volgende programma sprake van memory leakage? #include using namespace std; class Klasse { int *pi; public: Klasse(int i) {pi = new int(i);} ~Klasse(){delete pi;} int getPi() {return *pi;} }; int main(int argc, char* argv[]) { Klasse *v[5]; for (int i=0; i<5; i++) v[i]=new Klasse(i); delete v[i]; delete v; return cin.get(); }
□ Nee, de array v wordt netjes vrijgegeven d.m.v. delete □ □ □
□ Nee, want v[i] wordt keurig vrijgegeven met delete □
v;
Ja, want delete is is niet correct. Het moet delete [] v zijn om een array vrij te geven. Nee, want er is een destructor gedefinieerd die pi delete. Ja, want de inhoud van de array wordt niet expliciet vrijgegeven. v[i]
Nee, want door het delete v wordt ook de gehele inhoud van v vrijgegeven.
HOGESCHOOL VAN AMSTERDAM Informatica Opleiding
. CPP 5 van 10 ADSdt 5-2009
Vraag 5 Is het volgende programma correct? #include using namespace std; class Klasse { int mi; public: Klasse(int i) {mi=i;} }; int main(int argc, char* argv[]) { Klasse k; return cin.get(); }
□ □
Ja, geen probleem Nee, er is geen instantie van Klasse gemaakt. Dit is op te lossen door: k = new Klasse();
□
Nee, er is geen instantie van Klasse gemaakt. Dit is op te lossen door: k = new Klasse(5);
□
Nee, de variabele k kan geen waarde krijgen omdat er geen default constructor is gedefinieerd, terwijl er wel een integer constructor is gedefinieerd. □ Nee, de default constructor is standaard aangemaakt en kent geen expliciete waarde toe aan mi. Vraag 6 Bekijk het volgende programma. Bij compileren geeft de compiler de volgende foutmelding: 8 D:\docs\HvA\Cpp\fout.cpp new types may not be defined in a return type 8 D:\docs\HvA\Cpp\fout.cpp extraneous `int' ignored 8 D:\docs\HvA\Cpp\fout.cpp `main' must return `int'
Wat is er mis? #include using namespace std; class Klasse { public: int waarde ; } int main(int c, char* v[]) { Klasse w; c=5; w.waarde=c; cout << w.waarde; return cin.get(); }
□ De parameters van main moeten argc en argv[] zijn in plaats van c en v[]. □ □ □ □ □
De functie main mag geen int waarde terug geven. de parameter c van main is read only en mag dus niet worden veranderd werkt alleen als main wordt gestart met twee parameters b.v. main 5, "test" ";" vergeten na de klasse definitie. cin.get() levert geen int , zodat de return waarde van main niet correct is.
HOGESCHOOL VAN AMSTERDAM Informatica Opleiding
. CPP 6 van 10 ADSdt 6-2009
Vraag 7 Wat is de output van het volgende programma? #include using namespace std; class Klasse { public: virtual void fie01(){cout << "Klasse ::fie01 void fie02(){cout << "Klasse ::fie02\n";} }; class Derived : public Klasse { public: virtual void fie01(){cout << "Derived::fie01 void fie02(){cout << "Derived::fie02\n";} }; int main(int argc, char* argv[]) { Klasse *pk= new Derived(); Derived d, *pd= new Derived(); d.fie01();d.fie02(); pk->fie01();pk->fie02(); pd->fie01();pd->fie02();
";}
";}
return cin.get(); } □ □ □ □ □
.............................................................................. .............................................................................. .............................................................................. .............................................................................. ..............................................................................
Vraag 8 Wat is de output van het volgende programma? #include using namespace std; void telOp3(int i) {i++ ;} void telOp2(int &i) {i++ ;} void telOp4(int *pi){(*pi)++;} int telOp1(int i) {return (++i);} int main(int argc, char* argv[]) { int x ; x = 10; cout << "start x = " << x << endl ; x=telOp1(x+3);cout << "after telOp3 x = " << x << endl ; telOp2(++x);cout << "after telOp2 x = " << x << endl ; telOp3(x++);cout << "after telOp1 x = " << x << endl ; telOp4(&(x+=2));cout << "after telOp4 x = " << x << endl ; return cin.get(); } □ □ □ □ □ □ □
.............................................................................. .............................................................................. .............................................................................. .............................................................................. .............................................................................. .............................................................................. ..............................................................................
HOGESCHOOL VAN AMSTERDAM Informatica Opleiding
. CPP 7 van 10 ADSdt 7-2009
Vraag 9 Het volgende programma geeft een compile error doordat de variabelen x en y uit de klasse Box private zijn en gebruikt worden in de globale functie foo. Wat moet je op de aangegeven regel toevoegen om het programma werken te krijgen? #include using namespace std; class Box { int x,y; public: Box(int xi,int yi) {x=xi;y=yi;} // ******** Hier de regel code invullen // .................................................................. // }; bool foo(Box l,Box r) {return (l.x*l.y)>(r.x*r.y);} int main(int argc, char* argv[]) { Box b1(3,4),b2(1,2); if (foo(b1,b2)) cout <<"b1>b2\n return cin.get(); } □ □ □
.............................................................................. .............................................................................. ..............................................................................
Vraag 10 (één antwoord mogelijk) Bekijk het volgende programma; Wat is de output? #include using namespace std; class Box { public: int x,y; }; void typePrint(Box *v[]){ cout << "type : "<< typeid(v).name() ; cout << " : "<< typeid(v[0]).name(); cout << " : "<< typeid(*v[0]).name(); cout << " : "<< typeid((*v[0]).x).name() << endl; } int main(int argc, char* argv[]) { Box *v[5]; v[0]= new Box(); typePrint(v); return cin.get(); } □ □ □ □ □
type: type: type: type: type:
3Box[5] : P3Box : 3Box: null 3Box : P3Box : PP3Box: i PP3Box : 3Box : P3Box: pi PP3Box : P3Box : 3Box: i 3Box[] : 3Box : null: null
HOGESCHOOL VAN AMSTERDAM Informatica Opleiding
. CPP 8 van 10 ADSdt 8-2009
Vraag 11 Wat is de output van het volgende statement: cout << ((5&9)^(5|9)) << endl; □ □
.............................................................................. ..............................................................................
Vraag 12 (één antwoord mogelijk) Wat is de output van het volgende programma? #include using namespace std; class K { int a,b; public: void set(int ia, int ib) {a=ia;b=ib;} K(int ia,int ib) {a=ia;b=ib;} bool operator >(K r) {return ((a*b)>(r.a*r.b));} void print() {cout <<"["< T * maximaal(T *t1,T *t2) {if((*t1)>(*t2))return(t1); else return(t2);} int main(int argc, char* argv[]) { K k1(1,2),k2(3,4); K *pk = maximaal(&k1,&k2); K k3 = * maximaal(&k1,&k2); pk->set(5,6); k1.print();k2.print();k3.print();pk->print(); return cin.get(); }
□ □ □ □
[1,2][5,6][3,4][5,6] [1,2][3,4][3,4][5,6] [1,2][3,4][5,6][5,6] [1,2][5,6][5,6][3,4]
Vraag 13 Wat is het verschil tussen een struct en een class? □ □ □
Een class kan variabelen en functies bevatten, een struct alleen variabelen. Een class kent een verschil tussen public en private functies en variabelen; een struct niet Bij een class zijn functies en variabelen bij default private, bij een struct bij default public
□
Bij een class zijn functies en variabelen bij default public, bij een struct bij default
□ □
private Een class kan afgeleid worden; een struct niet Van een class kan dynamisch een instantie worden een struct niet.
gemaakt met de new operator; van
HOGESCHOOL VAN AMSTERDAM Informatica Opleiding
. CPP 9 van 10 ADSdt 9-2009
Vraag 14 Wat is de output van het volgende programma? #include using namespace std; union UnionPrice { public: int yen; int dollar; }; struct StructPrice { public: int yen; int dollar; }; int main(int argc, char* argv[]) { UnionPrice up; StructPrice sp; sp.yen = 100; sp.dollar = 200; cout << "Struct: yen:"<< sp.yen << " up.yen = 100; up.dollar = 200; cout << "Union : yen:"<< up.yen << " return cin.get();
dollar : "<< sp.dollar << endl;; dollar : "<< up.dollar << endl;
} □ □ □ □
.............................................................................. .............................................................................. .............................................................................. ..............................................................................
Vraag 15 Wat is een Dangling Pointer? □ □ □ □
Een pointer, waar nog geen object aan is toegewezen. Een pointer nadat het betrokken object is vrijgegeven met delete Een pointer die wijst naar een object dat reeds is vrijgegeven. Een kopie van een andere pointer
Vraag 16 (één antwoord mogelijk) Wat is de output van het volgende programma? #include using namespace std; int main(int argc, char* argv[]) { int a=4,b=2; int &c=b; c=4; cout << (c==b?"true, ":"false, "); cout << (&c==&b?"true, ":"false, "); cout << (a==b?"true, ":"false, "); cout << (&a==&b?"true ":"false "); return cin.get(); }
□ □ □ □
false, true, false, true true, true, true, true true, true, true, false false, true, false, false
HOGESCHOOL VAN AMSTERDAM Informatica Opleiding
. CPP 10 van 10 ADSdt 10-2009
Vraag 17 Wat is de output van het volgende programma? #include using namespace std; int main(int argc, char* argv[]) { int a=5; cout << (a?"true":"false"); return cin.get(); } □ □
.............................................................................. ..............................................................................
Vraag 18 (één antwoord mogelijk) Wat is overloading? □ □
Het definieren van twee functies in dezelfde klasse met dezelfde naam, maar met een verschillend prototype. Het definieren van twee functies met dezelfde prototype in een klasse en de daarvan afgeleide klasse.