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!
CPP 2 van 10 Vraag 1 Wat is het resultaat van het volgende programma? ADSdt 2-2009 class Hoofd { protected: int x,y; virtual int berekening() {return x*y; ; class Afgeleid: public Hoofd { 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; { Afgeleid a(3,4); fie1(a); fie2(&a); Vraag 2 /******************************* * argument.cpp * aanroep: * d:\argument Jan code=4 * *******************************/ { cout << argc << endl; for (int i=0;i<argc;i++) cout << argv[i] << endl;
CPP 3 van 10 ADSdt 3-2009 Vraag 3 Is het volgende programma correct? /********** * Punt.h **********/ class Punt { double x,y; Punt(); void setpunt(double,double ); string tostring(); ; /************** * Punt.cpp **************/ #include "Punt.h" #include <sstream> 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<<","<<y<<")"; return ss.str(); /********** * Driehoek.h **********/ #include "Punt.h" class DrieHoek { Punt pa, pb, pc; void seta(double, double ); void setb(double, double ); void setc(double, double ); string tostring(); ; /******************* * DrieHoek.cpp *******************/ #include "DrieHoek.h" #include <sstream> 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;
CPP 4 van 10 ADSdt 4-2009 /********************** * Main.cpp **********************/ #include "Punt.h" #include "DrieHoek.h" { 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; 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? class Klasse { int *pi; Klasse(int i) {pi = new int(i); ~Klasse(){delete pi; int getpi() {return *pi; ; { Klasse *v[5]; for (int i=0; i<5; i++) v[i]=new Klasse(i); delete v[i]; delete v; Nee, de array v wordt netjes vrijgegeven d.m.v. 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. Nee, want v[i] wordt keurig vrijgegeven met delete v[i] Nee, want door het delete v wordt ook de gehele inhoud van v vrijgegeven.
CPP 5 van 10 Vraag 5 Is het volgende programma correct? ADSdt 5-2009 class Klasse { int mi; Klasse(int i) {mi=i; ; { Klasse k; 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? class Klasse { int waarde ; int main(int c, char* v[]) { Klasse w; c=5; w.waarde=c; cout << w.waarde; 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.
CPP 6 van 10 Vraag 7 ADSdt 6-2009 class Klasse { virtual void fie01(){cout << "Klasse ::fie01 "; void fie02(){cout << "Klasse ::fie02\n"; ; class Derived : public Klasse { virtual void fie01(){cout << "Derived::fie01 "; void fie02(){cout << "Derived::fie02\n"; ; { Klasse *pk= new Derived(); Derived d, *pd= new Derived(); d.fie01();d.fie02(); pk->fie01();pk->fie02(); pd->fie01();pd->fie02(); Vraag 8 void telop3(int i) {i++ ; void telop2(int &i) {i++ ; void telop4(int *pi){(*pi)++; int telop1(int i) {return (++i); { 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 ;
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? class Box { int x,y; 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); { Box b1(3,4),b2(1,2); if (foo(b1,b2)) cout <<"b1>b2\n Vraag 10 (één antwoord mogelijk) Bekijk het volgende programma; Wat is de output? class Box { 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; { Box *v[5]; v[0]= new Box(); typeprint(v); type: 3Box[5] : P3Box : 3Box: null type: 3Box : P3Box : PP3Box: i type: PP3Box : 3Box : P3Box: pi type: PP3Box : P3Box : 3Box: i type: 3Box[] : 3Box : null: null
CPP 8 van 10 Vraag 11 Wat is de output van het volgende statement: ADSdt 8-2009 cout << ((5&9)^(5 9)) << endl; Vraag 12 (één antwoord mogelijk) class K { int a,b; 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 <<"["<<a<<","<<b<<"]"; ; template <class T> T * maximaal(t *t1,t *t2) {if((*t1)>(*t2))return(t1); else return(t2); { 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(); [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 gemaakt met de new operator; van een struct niet.
CPP 9 van 10 Vraag 14 ADSdt 9-2009 union UnionPrice { int yen; int dollar; ; struct StructPrice { int yen; int dollar; ; { UnionPrice up; StructPrice sp; sp.yen = 100; sp.dollar = 200; cout << "Struct: yen:"<< sp.yen << " dollar : "<< sp.dollar << endl;; up.yen = 100; up.dollar = 200; cout << "Union : yen:"<< up.yen << " 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) { 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 "); false, true, false, true true, true, true, true true, true, true, false false, true, false, false
CPP 10 van 10 Vraag 17 ADSdt 10-2009 { int a=5; cout << (a?"true":"false"); 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.