C++ voor C-kenners. Jeroen Fokker Informatica Instituut Universiteit Utrecht januari 1995

Maat: px
Weergave met pagina beginnen:

Download "C++ voor C-kenners. Jeroen Fokker Informatica Instituut Universiteit Utrecht januari 1995"

Transcriptie

1 C++ voor C-kenners Jeroen Fokker Informatica Instituut Universiteit Utrecht januari 1995 De taal C+ + wordt steeds meer gebruikt als alternatief voor C. De taal is een object-georiënteerde uitbreiding van C. Het blijft dus mogelijk om alle constructies uit C te gebruiken, waardoor de taal voor C-programmeurs gemakkelijk te leren is. Het is echter aan te raden om sommige constructies en programmeertechnieken niet meer te gebruiken, omdat er betere voor in de plaats beschikbaar zijn. Deze tekst geeft een overzicht van de belangrijkste verschillen tussen C en C+ +. Eerst worden de nieuwe of uitgebreide taalconstructies uit C+ + behandeld. In hoofdstuk 2 en 4 wordt het belangrijkste nieuwe concept, de class, behandeld; dit wordt onderbroken door een aantal voorbeelden in hoofdstuk 3. In hoofdstuk 5 worden de belangrijkste aspecten van de nieuwe input/output library besproken. 1 Nieuwe taalconstructies 1.1 Commentaar De manier waarop commentaar wordt aangegeven is een niet erg belangrijk, maar wel in het oog lopend verschil tussen C en C+ +. In C begint commentaar met /* en eindigt met */. Bijvoorbeeld: /* Deze functie berekent de omtrek van een cirkel */ float omtrek(float r) { /* r is de straal */ return (2*pi*r); In C+ + is er nog een tweede manier om commentaar aan te duiden: commentaar begint met // en eindigt aan het eind van de regel. Bijvoorbeeld: // Deze functie berekent // de omtrek van een cirkel float omtrek(float r) { // r is de straal return (2*pi*r); Hiermee is uitcommentariëren van een regel makkelijker geworden. De oude commentaar-stijl blijft ook geldig. 1.2 Constanten In C kun je met #define constanten definiëren: #define pi #define false 0 1

2 Deze definities worden geëxpandeerd door een preprocessor van de compiler. De eigenlijke compiler ziet dus gewoon de numerieke waarden staan. Daarom zijn aldus gedefinieerde constanten ook toegestaan in bijvoorbeeld array-declaraties. Dat #define inderdaad door een preprocessor wordt behandeld, blijkt uit het feit dat je er de taal mee kunt veranderen: #define als if Daarna lijkt de taal een als-statement te kennen. Constanten definiëren is handig, maar hoort eigenlijk in de taal zelf thuis, en niet in de preprocessor. Andere namen verzinnen voor keywords is enigzins vergezocht, en kun je eigenlijk beter niet gebruiken. In C+ + is er daarom een constructie om constanten te definiëren, die beter aansluit op variabele-declaraties. Ze zien er uit als een initialiserende variabele-declaratie, voorafgegaan door het keyword const: const float pi = ; const int false = 0; Constante pointers zijn nu ook mogelijk: const int *pf = &false; Extra voordeel is dat deze constanten getypeerd zijn. Voor het definiëren van constanten is de preprocessor dus niet meer nodig. 1.3 Inline functies In C kunnen macros gedefinieerd met #define voorzien zijn van parameters. Je kunt hier een soort functies mee definiëren: #define square(x) x*x Ook hier wordt de substitutie door de preprocessor uitgevoerd. Als de macro dus gebruikt wordt met square(1+2) dan wordt er code gegenereerd voor de expressie 1+2*1+2. Je ziet hier meteen het nadeel: door de syntactische substitutie is het resultaat niet 9 (het kwadraat van 1+2) maar 5. Een C-programmeur die dit een paar keer meegemaakt heeft zal daarom liever definiëren: #define square(x) ((x)*(x)) maar dat blijft lapwerk. De enige reden om zo n definitie te schrijven in plaats van een gewone functieaanroep, is efficiëntie: je spaart een functieaanroep uit (ten kost van een langere objectcode). In C+ + is dit eleganter opgelost. Je mag bij elke functie erbij schrijven dat de functie inline is. Voor inline-functies wordt niet apart code gegenereerd, maar wordt de body geëxpandeerd bij elke aanroep. De definitie van een tijd-efficiënte kwadraatfunctie is dus: inline int square(int x) { return x*x; Voordeel is dat je door toevoegen en weghalen van het woord inline gemakkelijk kunt wisselen tussen een tijd- en een ruimte-efficiënte versie. Bovendien worden de functies altijd gecontroleerd op syntax en type. 1.4 Declaraties In oude versies van C mochten lokale variabelen alleen maar gedefinieerd worden aan het begin van een functie. In ANSI-C mogen variabelen aan het begin van elk blok gedefinieerd worden, dus na elke accolade openen. In C+ + zijn er helemaal geen voorwaarden meer aan de plaats van declaraties. Statements en declaraties mogen elkaar dus vrijelijk afwisselen. Voordeel is dat je declaraties dichtbij het gebruik kunt zetten, en gemakkelijk delen van een functie, compleet met declaraties, kunt verplaatsen. Je kunt zelfs een loop-teller ter plaatse declararen: for (int i=1; i<10; i++) p(i); 2

3 Nadeel is dat de declaraties minder gemakkelijk te vinden zijn. Veel programmeurs blijven de declaraties daarom aan het begin zetten. 1.5 Typedeclaraties Structures zijn altijd een beetje lastig geweest in C. Op de plaats van een type mag je schrijven struct naam. Bij het eerste gebruik moeten ook de velden worden opgesomd. In het volgende voorbeeld wordt een variabele p van het type struct punt gedeclareerd (waarbij, omdat dit het eerste gebruik is, de velden worden opgesomd). Later wordt het type nog eens gebruikt in een parameter-declaratie. De velden hoeven nu niet meer te worden opgesomd: struct punt {int x; int y; p; void f(struct punt q); In een variabele-declaratie mag je ook nul variabelen declareren. Meestal is dat natuurlijk onzin, maar veel mensen gebruiken dit om alvast maar de velden van een structure op te sommen: struct punt {int x; int y; struct punt p; Vervelend blijft dat je steeds het woord struct moet herhalen. mogelijk: typedef struct punt {int x; int y; PUNT; void f(punt p); Daarom is in C een typedef omslachtig is dat je nu twee namen moet verzinnen: punt en PUNT. Het nieuwe type is PUNT, terwijl struct punt nu alleen nog maar nodig is voor recursieve typedefinities. Omdat dit allemaal maar ingewikkeld is, is het in C+ + toegestaan om de naam achter struct, ook zonder typedef, te gebruiken als typenaam: struct punt {int x; int y; void f(punt p); 1.6 Call bij reference // eeste gebruik In C is het lastig om variabelen door een functie te laten veranderen. Je moet dan een pointer naar die variabele als parameter gebruiken. Bij aanroep moet je dan ook het adres van de variabele meegeven, in plaats de waarde ervan. Bijvoorbeeld de bekende wissel-functie: void wissel( int *x; int *y) { int h; h = *x; *x = y; *y = h; { int a, b; wissel( &a, &b ); In C+ + kun je bij declaratie van de functie aangeven dat de parameter by reference meegegeven moet worden. In de body van die functie hoef je dan geen sterretjes meer te zetten, en wat belangrijker is: bij de aanroep hoef je de adres-operator niet meer te gebruiken: void wissel( int &x; int &y) { int h; h = x; x = y; y = h; { int a, b; wissel( a, b ); Qua implementatie gebeurt er overigens precies hetzelfde. Daarmee is ook duidelijk waarom in 3

4 C+ + de eis wordt gesteld dat bij aanroep van een functie het type bekend is: dit is van belang om te weten welke code gegenereerd moet worden voor wissel(a,b). 1.7 Overloading Als je in C een functie wilt schrijven op verschillende typen, moet je verschillende namen verzinnen: int iabs(int x) { return (x<0? -x : x); float fabs(float x) { return (x<0.0? -x : x); {... iabs(3) + fabs(-2.7)... In C+ + mag je dezelfde naam gebruiken, mits de parameters van verschillend type zijn. Voor een functie-aanroep wordt door de compiler op grond van het type de juiste functie gekozen: int abs(int x) { return (x<0? -x : x); float abs(float x) { return (x<0.0? -x : x); {... abs(3) + abs(-2.7) Default-parameters Met overloading kun je handige dingen doen. parameters: float macht(float x; int n) { r = 0; for (i=0; i<n; i++) r *= x; return r; Bijvoorbeeld een machtsverhef-functie met twee en een aparte versie daarvan, waarbij de tweede parameter is weggelaten: float macht(float x) { return macht(x,2); Op deze manier zal macht als default -waarde voor de exponent 2 gebruiken. Nog handiger is het, dat je dit in C+ + in één declaratie kunt aangeven: float macht(float x; int n=2) { r = 0; for (i=0; i<n; i++) r *= x; return r; Parameters waarvoor je een default-waarde wilt specificeren, moeten aaneengesloten aan het eind van de parameterlijst staan. 4

5 1.9 Operator overloading Behalve functies mag je in C+ + ook zelf operatoren definiëren. De naam van de operator moet die van één van de standaardoperatoren zijn, zodat er altijd sprake is van overloading. De definitie ziet er hetzelfde uit als een functiedefinitie, behalve dat aan de naam het woord operator vooraf gaat. Als je zelf bijvoorbeeld een type Complex gemaakt hebt, kun je daarop de operator + als volgt definiëren: Complex operator + (Complex a, Complex b) { return makecomplex( a.re+b.re, a.im+b.im ); De volgende binaire operatoren mogen overloaded worden: && + - * / % ^ & << >> = = -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= ->*, en de volgende unaire operatoren: - ~! Bovendien mogen de volgende symbolen overloaded worden als binaire operator: -> [] () new delete Daarmee zijn zelfs dereferencing, array-indicering (zie sectie 3.3), functie-aanroep, en objectcreatie en -deletie (zie sectie 1.10) te overloaden Dynamische allocatie In C levert de standaardfunctie malloc een blok geheugen van een bepaalde lengte. Het resultaat is van type void* en moet gecast worden naar het juiste type. Omdat pointers ook geïndiceerd mogen worden, kun je hiermee arrays maken met een lengte die voor de compiler nog niet bekend is: int *data; data = (int*) malloc( n * sizeof(int) ); f(data[4]); free(data); Het aantal te alloceren bytes is het aantal gewenste elementen n vermenigvuldigd met de afmeting van één element. De geheugenruimte wordt vrijgegeven met de standaardfunctie free. In C+ + kan geheugen worden gealloceerd met het keyword new, gevolg door een type. Anders dan bij gewone declaraties mag als arraygrens hierbij een niet-constante expressie gebruikt worden. Een cast, zoals in C, is nu niet meer nodig. De geheugenruimte wordt weer vrijgegeven met het keyword delete: int *data; data = new int[n]; f(data[4]); delete data; 2 Classes 2.1 Abstracte datatypen in C In elke cursus over datastructuren leer je dat het handig is om eerst een type te definiëren, en vervolgens een aantal functies die op dat type werken. Dat type is meestal een structure met een heleboel velden. Het wordt een abstract type als je belooft variabelen van dit type alleen maar met behulp van de daarvoor bedoelde functies te gebruiken, en dus niet zelf in de structure gaat spitten. 5

6 In C zou je als volgt een stack kunnen definiëren. De implementatie bestaat uit een structure met een array en een integer die aangeeft hoe ver die array gevuld is. In de typedefinitie permitteren we ons alvast de C+ +-notatie zoals besproken in sectie 1.5: struct stack { char info[100]; int top; ; Op dit type werken de functies reset, push en pop, die dus alledrie een stack als parameter hebben. Omdat de stack ook veranderd wordt (althans bij reset en push) wordt een pointer naar de datastructuur meegegeven, en niet de structuur zelf: void reset(stack *s) { s->top = -1; void push(stack *s, char c) { s->top++; s->info[s->top] = c; char top(stack *s) { return s->info[s->top]; Bij het schrijven van deze functies ontkomen we er natuurlijk niet aan om de opbouw van de struct te kennen. In het hoofdprogramma wordt men geacht alleen de abstracte operaties te gebruiken: { stack stapel; /* netjes gebruik */ reset(&stapel); push(&stapel, a ); /* stiekem gebruik */ stapel.info[73] = x ; Helaas is het niet af te dwingen dat een gebruiker zich aan de belofte houdt om het type alleen te benaderen via de daarvoor bedoelde functies. In het voorbeeld wordt de belofte in het laatste statement gebroken. Dat is vervelend, want als je de implementatie zou vervangen door een andere (bijvoorbeeld met een lineaire lijst in plaats van een array), dan geeft het hoofdprogramma ineens een fout in de laatste regel. 2.2 Abstracte datatypen in C In C+ + kunnen de functies die op een bepaald datatype werken gedefinieerd worden in de typedefinitie van de structure: struct stack { private: char info[100]; int top; void reset(void) { top = -1; void push(char c){ top++; info[top]=c; char top(void) { return info[top]; ; Je hoeft niet meer op te schrijven dat deze functies een stack als parameter hebben. In de body van de functies kun je top en info direct gebruiken, zonder daarbij steeds s-> te hoeven schrijven. Bij aanroep van de functies moet wel duidelijk gemaakt worden op welke stack nu eigenlijk de ope- 6

7 raties toegepast moeten worden. Daarvoor wordt de punt-notatie gebruikt; per slot van rekening staan de definities van de functies in de structure-definitie, en kunnen ze dus ook geselecteerd worden: { stack stapel; stapel.reset(); stapel.push( a ); In C+ + declareer je in een structure-definitie naast data ook functies. Deze functies worden de memberfuncties van de structure genoemd. Met de keywords private en public kun je bovendien aangeven hoe de data en functies gebruikt mogen worden: private: mogen alleen door de memberfuncties gebruikt worden zijn ook door buitenstaanders bereikbaar met de punt-notatie Doordat in het voorbeeld de velden top en data achter private: staan, mogen ze alleen door de memberfuncties gebruikt worden. In het hoofdprogramma kan er dus geen misbruik van gemaakt worden. De drie memberfuncties zijn allemaal public, en mogen dus wèl in het hoofdprogramma gebruikt worden. Er zijn echter ook memberfuncties denkbaar die alleen als hulpfunctie zijn bedoeld voor de andere memberfuncties, en die niet van buitenaf gebruikt mogen worden. Die worden dan in het private deel neergezet. Als je eraan twijfelt wat een memberfunctie nu precies inhoudt, dan is het misschien handig om je de implementatie ervan voor te stellen. De code die wordt gegenereerd voor het voorbeeld uit deze sectie is namelijk precies hetzelfde als die voor het C-programma uit de vorige sectie. Dat wil zeggen: het gebruik van private en public beïnvloedt alleen de scope van de naam van velden, en is voor codegeneratie niet van belang; memberfuncties worden niet echt opgeslagen in variabelen; memberfuncties hebben stiekem een extra parameter, namelijk een pointer naar de betreffende structure. Waar een memberfunctie de member-variabele x gebruikt, wordt eigenlijk p->x gebruikt, waarbij p de extra meegegeven pointer is. 2.3 Classes Een class in C+ + is vrijwel hetzelfde als een struct met uitgebreide mogelijkheden, zoals besproken in de vorige sectie. Het enige verschil is de protectie van de members: in een struct zijn de declaraties zonder tegenbericht public; in een class zijn de declaraties zonder tegenbericht private. Het stack-voorbeeld had dus ook als class geschreven kunnen worden: class stack { char info[100]; int top; void reset(void) { top = -1; void push(char c){ top++; info[top]=c; char top(void) { return info[top]; ; Denk om het schrijven van de puntkomma aan het eind van de class-declaratie: het blijft een (uitgebreid soort) type-declaratie! Het woord class is ontleend aan het object-georiënteerde jargon. Variabelen met een type dat als class is gedefinieerd worden objecten genoemd. Een korte karakterisering van object-georiënteerd programmeren is: bij imperatief programmeren staan functies centraal, die objecten als parameter kunnen hebben; 7

8 bij objectgeoriënteerd programmeren staan objecten centraal, die functies als member kunnen hebben. Ècht object-georiënteerd wordt een taal overigens pas als classes geordend kunnen worden in een hiërarchie (zie sectie 4.5), en memberfuncties dynamisch gebonden kunnen worden (zie sectie 4.7). 2.4 Definitie van memberfuncties Tot nu toe definieerden we de memberfuncties direct in de class-declaratie: class c { int x; int f(void) { return 2*x; ; Als de memberfuncties wat langer worden, wordt dit echter erg onoverzichtelijk, omdat je uit het oog kunt verliezen dat al die pagina s functie-definities in feite deel uitmaken van één classdeclaratie. Daarom is het ook toegestaan om in de class-declaratie alleen het prototype van de memberfuncties op memberfuncties dynamisch gebonden kunnen worden (zie sectie 4.7), en te nemen: class c { int x; int f(void); ; De eigenlijke definitie van de memberfunctie kan daarna apart plaatsvinden. Daarbij moet, als onderscheid met gewone functies, de naam van de class opnieuw genoemd worden: int c::f(void) { return 2*x; Meestal wordt de class-declaratie in de.h-file geschreven, en de definities van de memberfuncties in de.cc-file. De class-definitie is immers ook nodig in eventuele andere modules die deze class gebruiken, maar de implementatie van de memberfuncties niet. Een bijkomend verschil tussen memberfunctie-definities in de class-declaratie, en losstaande definities, is dat definities in de class-declaratie per default inline zijn, zoals beschreven in sectie 1.3. Dit is dus alleen maar aan te raden voor zeer korte definities. 2.5 Constructors Vaak is het nuttig om objecten (dat wil zeggen variabelen waarvan het type een class is) te initialiseren. Hiervoor kan een speciale memberfuncties worden gedefinieerd: een constructor. Deze moet dezelfde naam hebben als de klasse, en heeft geen resultaattype (zelfs niet void). In het voorbeeld van de stack, zou je de top-wijzer bij creatie van een stack willen kunnen initialiseren. Dat kan als volgt: { char info[100]; int top; stack(void) { top = -1; ; De constructorfunctie wordt automatisch aangeroepen op het moment dat een object wordt gecreëerd. Voor globale variabelen is dat vóór uitvoer van main, voor lokale variabelen het moment dat de declaratie in het programma uitgevoerd wordt, en voor dynamische variabelen bij gebruik van new. Voorbeeld: stack a; { print(1); 8

9 stack b, *p; print(2); p = new stack; Eerst wordt hier de constructor van a aangeroepen. Dan wordt in het hoofdprogramma de waarde 1 geprint. Vervolgens wordt de constructor van b aangeroepen. Dan wordt 2 geprint, en tenslotte wordt de constructor van de stack waar p naar wijst aangeroepen. Nu blijkt ook waarom het nuttig is dat declaraties en statements elkaar kunnen afwisselen: aanroep van de constructorfunctie van a vindt pas plaats ná dat de waarde 1 geprint is. Constructorfuncties kunnen ook parameters krijgen. Actuele parameters moeten dan meegegeven worden bij declaratie en bij gebruik van new. Voorbeeld: class punt { int x, y; punt(int x0, int y0) { x=x0; y=y0; ; { punt hier(12,5), *p; p = new punt(2,6); Let op: in het laatste statement vervult punt dus zowel de rol van type (achter new) als van (constructor)functie (voor zijn parameters). Naast constructorfuncties zijn er ook destructorfuncties. Die worden automatisch aangeroepen aan het eind van de levensduur van een object. Bij globale variabelen is dat na afloop van de functie main, bij lokale variabelen aan het eind van die functie (en vlak voor elke return), en by dynamische variabelen bij gebruik van de delete constructie. Nu is dus ook duidelijk waarom er een aparte delete-constructie nodig is in plaats van de functie free uit C. Een voorbeeld hiervan volgt in sectie Voorbeelden 3.1 Dynamisch geheugen Vaak zal er in objecten gebruik gemaakt worden van dynamisch geheugen. Dit geheugen kan worden gealloceerd in de constructorfunctie, en worden opgeruimd in de destructorfunctie. Een voorbeeld is alweer de stack-klasse. In eerdere voorbeelden gebruiken we een array ter lengte 100, nu maken we een dynamische array. Bij de membervariabelen zit er alleen maar een pointer naar de data: class stack { char *info; int top; In de constructorfunctie laten we de pointer wijzen naar nieuw aangemaakt geheugen. De constructorfunctie heeft een parameter die aangeeft hoe lang de stack maximaal mag worden: stack(int n) { info = new char[n]; top = -1; In de destructorfunctie wordt het geheugen weer opgeruimd. Net als de constructorfunctie heeft de destructorfunctie geen resultaattype. De naam is die van de class, voorafgegaan door een slangetje: ~stack(void) { delete info; 9

10 ; In het hoofdprogramma kunnen we nu stacks van verschillende lengte aanmaken: { stack a(100); stack b(1000); Bij gebruik van stacks hoef je je nooit meer druk te maken over het opruimen ervan: dat gaat automatisch. 3.2 Open/sluit constructies Er zijn meer gevallen (dan dynamische geheugenallocatie) waarbij je in C geconfronteerd wordt met vergeet vooral niet aan het eind... te doen. Files bijvoorbeeld moeten aan het begin geopend worden, daarna mag je er van alles mee doen, maar aan het eind moeten ze weer gesloten worden. In een typisch C programma kun je dan ook aantreffen: File f; f = open("aap"); seek(f,pos); read(f,data); close(f); In een C+ +-library zou het openen mooi in de constructorfunctie kunnen staan, en het sluiten in de destructorfunctie. Bovendien hoeft de file niet steeds meegegeven te worden bij operaties die op de file werken. Althans niet expliciet. Achter de schermen wordt de file natuurlijk wel meegegeven. { File f("aap"); f.seek(pos); f.read(data); 3.3 Veilige arrays Een bekend nadeel van C is dat bij indicering van arrays de grens niet gecontroleerd wordt. Je kunt hier wat aan doen door een klasse te maken waarin array-operaties worden gedefinieerd mèt grens-controle. In dit voorbeeld noemen we deze klasse Vector. De elementen zijn integers. In de constructorfunctie wordt een array gealloceerd, maar bovendien wordt de bovengrens bewaard: class Vector { int *p; int size; Vector(int n=10) { size=n; p=new int[n]; ~Vector(void) { delete p; int &elem(int); ; Verder is er een memberfunctie elem, waarmee een element uit de array geselecteerd kan worden. Deze functie geeft een foutmelding als de index buiten het toegestane interval ligt. int & Vector::elem(int i) { if (i<0 i>=size) printf("bound error"); return p[i]; De functie elem levert een referentie naar een integer op. Daardoor kan de functie worden gebruikt in expressies, maar ook aan de linkerkant van een assignment. 10

11 { Vector a(10), b(5); a.elem(1) = 17; b.elem(1) = a.elem(1) + 9; Helemaal mooi wordt het als we de functie elem als operator definiëren, en wel de operator []. int & Vector::operator [](int i) { if (i<0 i>=size) printf("bound error"); return p[i]; Daarna lijken vectoren voor de gebruiker echte arrays: { Vector a(10), b(5); a[1] = 17; b[1] = a[1] + 9; 4 Classes (vervolg) 4.1 Static members Het woord static krijgt er in C+ + een betekenis bij. In C wordt dit gebruikt voor variabelen die qua scope lokaal zijn voor een functie, maar waarvan slechts één instantie wordt gemaakt. Een static variabele overleeft dus een functieaanroep, en kan bijvoorbeeld gebruikt worden om te tellen hoe vaak de functie is aangeroepen: void f(void) { static int n=0; printf("ik ben %d keer aangeroepen", n++); Voor de implementatie is het alsof de variabele n buiten de functie was gedeclareerd; het enige verschil is dat het niet toegestaan is om de variabele buiten de functie te gebruiken. Op dezelfde manier kunnen in C+ + member-variabelen static worden gedeclareerd. Ook nu wordt er slechts één instantie van die variabele gemaakt, die door alle instanties van de class wordt gedeeld: class c { static int n; int x; int y; void f() { n++; void g() { n++; void h() { printf ("%d keer memberfuncie gebruikt", n); ; Ook dit is eigenlijk een globale variabele, met de restrictie dat hij alleen in de memberfuncties van een bepaalde klasse mag worden gebruikt. Naast membervariabelen kunnen ook memberfuncties static worden gedeclareerd. Static memberfuncties mogen geen gebruik maken van de membervariabelen. Daarom hoeven ze in een implementatie dus geen verborgen parameter mee te krijgen. Het zijn eigenlijk gewone functies, die ook buiten de klasse gedeclareerd hadden kunnen worden. Het enige verschil is dat de functies buiten de klasse niet aangeroepen mogen worden. 11

12 4.2 Objecten als members Inmiddels is er een probleempje ontstaan, vanwege twee nieuwe mogelijkheden: constructorfuncties kunnen parameters hebben, en membervariabelen mogen zelf ook objecten zijn. Het probleem is: welke parameter moet meegegeven worden bij constructie van de deel-objecten? Bekijk het voorbeeld van een klasse waarin twee vectoren, zoals gedefinieerd in sectie 3.3, worden gecombineerd: class Twee { Vector heen; Vector terug; Twee(int n) { ; Je kun bij declaratie van de vectoren niet n meegeven, want diens scope is beperkt tot de body van de constructorfunctie Twee. Maar je kunt heen en terug ook niet declareren in de body van de constructorfunctie Twee, want dan zouden ze weer worden opgeruimd aan het eind van de constructorfunctie. De oplossing is een speciale syntax voor dit geval: class Twee { Vector heen; Vector terug; Twee(int n) : heen(n), terug(n) { Tussen de header en de body van een constructorfunctie mogen dus de deel-objecten van parameters worden voorzien. 4.3 this Memberfuncties zijn bedoeld om op objecten te werken zonder dat het object steeds expliciet als parameter meegegeven hoeft te worden (achter de schermen gebeurt dat natuurlijk wel). Maar soms wil je een object ook wel meegeven aan een andere functie dan de memberfuncties van zijn eigen klasse. In dat geval moet je de parameter expliciet noteren. Bekijk bijvoorbeeld een klasse, en een functie die een pointer naar een object uit die klasse meekrijgt als parameter: class klasse; void f(klasse *obj); Als je in het hoofdprogramma een object declareert, kun je dat object moeiteloos meegeven als parameter: { klasse a, *p; f(&a); p = new klasse; f(p); Anders wordt het als de functie f aangeroepen moet worden vanuit één van de memberfuncties van de klasse. Die memberfuncties hebben toegang tot een object van hun klasse, want memberfuncties hebben achter de schermen een extra parameter. Maar hoe moeten ze deze extra parameter aan f doorspelen? Het is immers een extra parameter, die niet expliciet een naam heeft. De oplossing hiervoor is het keyword this dat in C+ + beschikbaar is. Memberfuncties kunnen hiermee de pointer naar hun object aanduiden. 12

13 class klasse { int x; void g(void); void h(void) { // impliciete parameter gebruikt voor toegang tot andere members print(x); g(); // moet expliciet genoemd om dit object // door te geven aan niet-member functies f(this); ; 4.4 Operatoren als members Omdat memberfuncties impliciet een extra parameter hebben, krijgen operatoren die als member worden gedefinieerd een parameter minder dan je zou verwachten. Een binaire operator wordt gedeclareerd met één parameter: class Polynoom { Polynoom operator + (Polynoom *y); ; De andere parameter is de impliciete this parameter. 4.5 Subklassen Het leuke van object-georiënteerd programmeren is dat je classes eenvoudig kunt uitbreiden met een paar extra members. Je kunt dus voortborduren op werk van anderen, en hoeft voor de nieuwe classes niet opnieuw alle oude members op te sommen. Stel bijvoorbeeld dat er een klasse Persoon is, met allerlei interessante persoonsgegevens, en de nodige memberfuncties: class Persoon { char naam[20]; int gebjaar; int leeftijd(void); void print(void); ; Je kunt dan zelf een klasse Student maken, die aan de persoonsgegevens een membervariabele toevoegt voor de studie. Daartoe moet je achter de naam van de klasse specificeren dat het een derived class is van de oorspronkelijke klasse: class Student : public Persoon { char studie[10]; void print(void); ; In dit voorbeeld hebben we niet alleen een extra membervariabele toegevoegd, maar ook een memberfunctie. Die heeft toevallig dezelfde naam als een memberfunctie in de oorspronkelijke klasse, maar dat is geen probleem: functies mogen immers overloaded worden. Als je in het programma een variabele van het type Student declareert, dan mag je daarvan de nieuwe members gebruiken (s.studie), maar ook de oude (s.naam). Die laatste worden zogezegd geëerfd van de oorspronkelijke klasse. { Student s; 13

14 ... s.naam s.studie... s.print(); Waar in het hoofdprogramma de functie print wordt aangeroepen, is dat de functie print zoals die in de klasse Student is gespecificeerd. 4.6 Hergedefinieerde memberfuncties Als tweede voorbeeld schrijven we een klasse die voortborduurt op de klasse Vector uit sectie 3.3. Die luidde: class Vector { int *p, size; Vector(int); ~Vector(void) int &elem(int); ; We maken nu een subklasse BndVector voor een array die niet alleen een bovengrens heeft, maar ook een ondergrens (bij de oorspronkelijke vectoren moest die ondergrens 0 zijn). In de nieuwe klasse wordt, naast de geërfde members, een nieuwe variabele toegevoegd: class BndVector : public Vector { int eerste; In de constructorfunctie van BndVector moet de constructorfunctie van Vector worden aangeroepen. Omdat die een parameter heeft, moeten we ons weer van speciale syntax bedienen: BndVector(int lo, int hi) : Vector(hi-lo) { eerste = lo; Let op het verschil met sectie 4.2: daar stond achter de dubbele punt de naam van een member, die zelf een object was; nu staat er achter de dubbele punt de naam van de superklasse. Een ander probleem treedt op in de definitie van elem. Hierbij willen we de originele elem aanroepen, echter met een voor de ondergrens gecorrigeerde parameter. Zou je echter in de memberfunctie elem de functie elem aanroepen, dan resulteert dit in een recursieve aanroep. Daarom moeten we de naam elem qualificeren voor de juiste klasse. Dat gebeurt door de naam van de klasse waaruit we de functie willen hebben voor d enaam te schrijven: ; int &elem(int i) { return Vector::elem(i-eerste); Die klasse moet natuurlijk wel een superklasse zijn van de klasse waarin de aanroep gebeurt, of een superklasse van die superklasse, enz. 4.7 Statische en dynamische binding Binding van functienamen aan functies gebeurt statisch. Dat wil zeggen dat de compiler, op grond van de beschikbare type-informatie, beslist welke functie gebruikt wordt bij een bepaalde naam. Bekijk bijvoorbeeld een klasse A, en een subklasse B daarvan, die beide een functie f als member hebben: class A { int f(void){ return 1; ; class B : public A { 14

15 int f(void){ return 2; ; Als in het hoofdprogramma een functie met de naam f wordt aangeroepen, dan kijkt de compiler naar het type van het ontvangende object: { A a; B b; a.f(); // levert 1 b.f(); // levert 2 Iets lastiger wordt het als we pointers naar objecten gebruiken. Bekijk het volgende programma: { A a, *pa; B b; pa = &a; // dit mag pa->f(); // levert 1 pa = &b; // dit mag ook! pa->f(); // wat levert dit? We declareren een pointer die naar objecten van type A kan wijzen. In het eerste statement laten we de pointer naar a van type A wijzen. Aanroep van de functie f levert dan natuurlijk 1. We mogen de pointer echter ook laten wijzen naar objecten met als type een subklasse van A. Een subklasse is immers een bijzonder geval van de klasse, dus een pointer die naar objecten van type A kan wijzen, kan zeker naar objecten van type B wijzen. Dus pa = &b is toegestaan. Maar wat levert nu de aanroep pa->f()? Omdat de binding statisch is, moet de compiler beslissen. En omdat de voorgeschiedenis van de aanroep pa->f() erg ingewikkeld kan zijn, kan de compiler niet in alle gevallen nagaan wat het type is van het object waar pa naar wijst. Zeker is echter, dat dit het type A is of een subtype van A. Veiligheidshalve wordt daarom de functie f van A gebruikt. De aanroep pa->f() levert dus 1, ongeacht het type van het object waar pa toevallig naar wijst. Het is in C+ + echter mogelijk om te kiezen voor dynamische binding van functies. Dat moet dan gespecificeerd worden bij de declaratie van de functie in de superklasse, met behulp van het woord virtual. class A { virtual int f(void){ return 1; ; class B : public A { int f(void){ return 2; // type moet hetzelfde zijn als A::f ; Een restrictie is nu dat het type van de in de subklasse opnieuw gedefinieerde functie hetzelfde moet zijn als het origineel. Als we nu weer hetzelfde hoofdprogramma schrijven: { A a, *pa; B b; pa = &a; pa->f(); // levert 1 pa = &b; pa->f(); // levert nu 2! Dan wordt run-time nagegaan naar welk type object de pointer wijst. Afhankelijk daarvan wordt de juiste functie f gekozen. De aanroep p->f() levert nu dus 2 op, op het moment dat de pointer naar een object van type B wijst. Voor klassen waarin virtual memberfuncties worden gebruikt, zal dus het type van een object in dat object moeten worden opgeslagen. Dat kan, want bij creatie van een object is het type ervan 15

16 bekend. In de meeste implementaties gebeurt dit in de vorm van een pointer naar een tabelletje waarin de implementatie van de functies behorend bij deze klasse staan. Run-time kan in dit tabelletje de juiste waarde worden opgezocht. Virtuele functies kosten dus iets meer tijd (een extra indirectie bij de aanroep) en ruimte (één pointer per object). Daar staat tegenover dat ze een groot gemak bieden voor de programmeur: die kan nu immers een pointer laten lopen door een lijst met zowel personen als studenten, voor elke waarde de functie print aanroepen, en toch steeds de goede versie daarvan krijgen. 5 Input/output 5.1 Streams Dankzij de nieuwe taalconstructies die in C+ + beschikbaar zijn, konden er nieuwe faciliteiten voor input/output gemaakt worden. Deze zijn gemakkelijker te gebruiken dan printf en dergelijke. De vertrouwde <stdio.h> blijft natuurlijk beschikbaar, maar is eigenlijk overbodig geworden. De nieuwe I/O-bibliotheek heet <iostream.h>. In <iostream.h> wordt een klasse stream gedefinieerd. Twee streams die alvast beschikbaar zijn, zijn cin en cout, corresponderend met de standaard-input en standaard-output. Op deze streams zijn de operaties <<, respectievelijk >> gedefinieerd. (Die operatoren bestonden al in C, met de betekenis shift left en shift right ; ze zijn nu overloaded, zodat ze ook op streams kunnen werken). Deze operaties werken zo, dat het transport van data in de richting van de pijltjes plaatsvindt: #include <iostream.h> { int n; cin >> n; // lezen cout << 2*n; // schrijven Door middel van overloading zijn deze operatoren gedefinieerd voor alle standaardtypen. Afhankelijk van het type van de rechter parameter krijg je de goede versie. Het is dus niet meer nodig om met "%d" of "%s" en dergelijke het type aan te geven, zoals dat bij printf en scanf nodig was. (Het is ook niet meer mogelijk om daar fouten bij te maken.) Wat betreft het type van de I/O-operatoren: de linker parameter is altijd een stream. De rechter parameter kan van elk standaardtype zijn. In het geval van << is dat een value parameter, maar bij >> is het een reference parameter. Het is dus geen pointer-parameter, zoals dat bij scanf het geval was, en je kunt dus ook bij aanroep de &-operator niet meer vergeten op te schrijven. Als resultaat leveren << en >> hun linker parameter weer op. Dat is handig, want zo kun je meerdere dingen na elkaar lezen of schrijven: cin >> a >> b >> c; cout << "de som is " << a+b+c; Blijkbaar associëren << en >> naar links. Om een nieuwe regel te schrijven, kun je de string "\n" naar een stream sturen, maar beter is het om de speciale constante endl te gebruiken: cout << "\n"; cout << endl; // dit mag // dit is beter Het voordeel van de laatste is dat naast het schrijven van de newline de stream geflushd wordt, zodat de uitvoer niet gebufferd wordt. Als lezen niet mogelijk is (bijvoorbeeld omdat het einde van de file bereikt is) levert cin een null-stream op. Daarmee kun je dus eenvoudig testen of het einde van de invoer bereikt is: while (cin >> n) cout << n; De klasse stream kent een aantal memberfuncties, waarmee extra aanwijzingen over de te gebrui- 16

17 ken lay-out van uitvoer gespecificeerd kunnen worden. (Bij printf gebeurde dat in de formatstring ). Zo is er bijvoorbeeld de memberfunctie width, waarmee het aantal te gebruiken posities gespecificeerd wordt, en precision waarmee de precisie van uit te voeren floating-point getallen wordt aangegeven: cout.width(10); cout.precision(7); cout << pi; Verder is er een memberfunctie get, waarmee één character gelezen kan worden. Deze is nodig omdat << alvorens een karakter te lezen spaties en newlines overslaat. Een kopieer-programma is dus: #include <iostream.h> { char c; while (cin.get(c)) cout << c; 5.2 Files In feite is er niet één klasse stream. Deze klasse heeft twee subklassen: istream en ostream. Memberfuncties die alleen relevant zijn voor outputstreams zijn gedefinieerd in ostream. Deze klassen hebben op hun beurt weer subklassen voor streams die gekoppeld zijn aan een file: ifstream respectievelijk ofstream. (De naam ifstream is een afkorting van input file stream en heeft dus niets met if-statements te maken.) De constructorfunctie van deze streams heeft een filenaam als parameter. Daarmee is het mechanisme uit sectie 3.2 gerealiseerd: #include <fstream.h> { ofstream f("aap"); f << "deze tekst wordt in een file gezet" << endl; De file hoeft niet expliciet gesloten te worden: dat gebeurt in de destructorfunctie. 6 Slot 6.1 Andere constructies In dit korte bestek konden niet alle details van C+ + behandeld worden. Een aantal dingen die niet genoemd zijn, en die je in het wild kunt tegenkomen zijn: Access control. Naast public en private is er ook nog protected: members die alleen toegankelijk zijn voor subklassen. Friends. Bepaalde klassen en/of functies kunnen aangewezen worden als friend, die tòch gebruik mogen maken van de private members. Multiple inheritance. Klassen kunnen gelijktijdig subklasse zijn van meerdere klassen. De overervings-hiërarchie is dus niet een boomstructuur, maar een gerichte graaf. Templates. Klassen kunnen worden geparametriseerd met een type, zodat polymorfe datastructuren kunnen worden gedefinieerd. Container classes. In de praktijk kan het nuttig zijn om enkele libraries te kennen waarin een aantaal veelgebruikte datastructuren als klasse beschikbaar zijn. Vooral container classes, waarin dingen als lijsten en verzamelingen zijn geïmplementeerd, zijn populair. Voor dit 17

18 soort klassen worden vaak speciale iterator classes gedefinieerd, waarmee ze gemakkelijk langsgelopen kunnen worden. Op objecten van zo n iterator class is typisch de operator ++ gedefinieerd, zodat het langslopen van bijvoorbeeld een lijst erg gaat lijken op het langslopen van een array. Waar je op moet letten bij container classes is of bij destructie van de containers ook de objecten die daar in zitten worden opgeruimd of juist niet. 6.2 Andere talen Veel van de in deze tekst genoemde onderwerpen, in het bijzonder de classes, kom je ook tegen bij het bestuderen van andere object-georiënteerde talen. Deze talen kunnen afwijken van C+ + op grond van de keuzen die erin gemaakt zijn. Bijvoorbeeld: Classes en typen. In sommige talen zijn er geen gewone typen meer, maar is alles een class. Ale functies zijn dan ook memberfuncties. Binding van memberfuncties. In C+ + is de binding van memberfuncties alleen bij virtual members dynamisch. In sommige talen is de binding altijd dynamisch. Type van her-definities. In C+ + moet het type van her-definities van virtual functies in subklassen precies hetzelfde zijn als in de oorspronkelijke klasse. Deze eis is in sommige talen minder streng. In een taal kan de keuze vallen op contravariante herdefinities of covariante herdefinities, elk met hun eigen problematiek. Literatuur Stroustrup, Bjarne. The C++ programming Language, second edition. Reading: Addison-Wesley, Ellis, Margaret and Bjarne Stroustrup. Reading: Addison-Wesley, The annotated C++ reference manual. 18

C++ C++ als een verbetering van C. Abstracte datatypen met classes. Constructoren en destructoren. Subklassen. binding van functies

C++ C++ als een verbetering van C. Abstracte datatypen met classes. Constructoren en destructoren. Subklassen. binding van functies C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1 Commentaar In C: /* Deze functie berekent de omtrek van een cirkel */ float

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: stapels, rijen en binaire bomen Programmeermethoden Datastructuren: stapels, rijen en binaire bomen week 12: 23 27 november 2015 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Inleiding In de informatica worden Abstracte DataTypen (ADT s)

Nadere informatie

Datastructuren Werkcollege Intro

Datastructuren Werkcollege Intro Bart Hijmans, Universiteit Leiden. Universiteit Leiden The Netherlands Focus 1 19 ˆ Ervaring in gebruik en implementatie van datastructuren ˆ Kennis van mogelijkheden ˆ Programmeren voor andere programmeurs

Nadere informatie

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces. Hoofdstuk 1: Inleiding Objectoriëntatie: 1. Objecten & klassen: samenwerking van componenten om bepaald doel te bereiken; herbruikbaarheid. 2. Encapsulation: afschermen gedragingen en kenmerken van de

Nadere informatie

Introductie in C++ Jan van Rijn. September 2013

Introductie in C++ Jan van Rijn. September 2013 Introductie in C++ Jan van Rijn September 2013 Inhoud Classes Overerving Const correctness Standard C++ library Templates Classes Voordelen van classes: Modelleren Modulariteit Informatie afschermen Makkelijk(er)

Nadere informatie

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf

Nadere informatie

9 Meer over datatypen

9 Meer over datatypen 9 Meer over datatypen We hebben al gezien dat het gebruik van symbolische constanten de leesbaarheid van een programma kan verbeteren. Door een geschikte naam (identifier) voor een constante te definiëren,

Nadere informatie

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

Een typisch programma in C en C++ bestaat uit een aantal onderdelen: Eerste stappen in C. Een typisch programma in C en C++ bestaat uit een aantal onderdelen: /* Alles wat op meerdere lijnen staat zoals hier is commentaar. */ // Dit is commentaar op 1 lijn. Geldig tot einde

Nadere informatie

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double. Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort

Nadere informatie

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10 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

Nadere informatie

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, 13.00-15.00 uur 1. De situatie die ontstaat door class A : B C D; kan beschreven worden door (a) B is een A (b)

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: stapels, rijen en binaire bomen Programmeermethoden : stapels, rijen en binaire bomen Walter Kosters week 12: 26 30 november 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 en Vierde programmeeropgave Othello programmeren we als volgt:

Nadere informatie

Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/

Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/ Programmeermethoden Pointers Walter Kosters week 10: 13 17 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Introductie Een pointer is in feite gewoon een geheugenadres. Het geheugen kun

Nadere informatie

Modeleren. Modelleren. Together UML. Waarvan maken we een model? overzicht les 14 t/m 18. ControlCenter 6.2

Modeleren. Modelleren. Together UML. Waarvan maken we een model? overzicht les 14 t/m 18. ControlCenter 6.2 Modelleren Werkelijkheid Modelleren Modeleren Waarvan maken we een model?!analyse " Maak een model van de te automatiseren werkelijkheid of van het op te lossen probleem! Domeinkennis = structuur! Functionele

Nadere informatie

Lineaire data structuren. Doorlopen van een lijst

Lineaire data structuren. Doorlopen van een lijst Lineaire data structuren array: vast aantal data items die aaneensluitend gestockeerd zijn de elementen zijn bereikbaar via een index lijst: een aantal individuele elementen die met elkaar gelinkt zijn

Nadere informatie

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Een korte samenvatting van enkele FORTRAN opdrachten

Een korte samenvatting van enkele FORTRAN opdrachten Een korte samenvatting van enkele FORTRAN opdrachten Inhoud 1 Introductie 3 2 De structuur van een FORTRAN programma 3 3 Datatypen, variabelen en declaraties 3 4 Expressies-volgorde van uitwerking 4 5

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 13 december 2013 Terugblik Fibonacci public class Fibonacci { public static void main(string[] args) { // Print het vijfde Fibonaccigetal System.out.println(fib(5));

Nadere informatie

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. week 11: november kosterswa/pm/ Programmeermethoden Recursie week 11: 21 25 november 2016 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Derde programmeeropgave 1 Het spel Gomoku programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, 13.30-15.30 uur Naam: Studentnummer: Het tentamen bestaat uit 4 opgaven. Opgaven 1 levert 8 punten op, opgave 2 levert 12 punten

Nadere informatie

Zelftest Programmeren in Java

Zelftest Programmeren in Java Zelftest Programmeren in Java Document: n0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST PROGRAMMEREN IN JAVA Deze test

Nadere informatie

1 Inleiding in Functioneel Programmeren

1 Inleiding in Functioneel Programmeren 1 Inleiding in Functioneel Programmeren door Elroy Jumpertz 1.1 Inleiding Aangezien Informatica een populaire minor is voor wiskundestudenten, leek het mij nuttig om een stukje te schrijven over een onderwerp

Nadere informatie

Programmeren in C++ (deel 1)

Programmeren in C++ (deel 1) FHT&L MODULE BESCHRIJVING Programmeren in C++ (deel 1) PRO4 Samenstelling: Cees van Tilborg, Thijs Dorssers Datum: september 2011 Versie: 1h Titel: Programmeren in C++ Identificatie Progresscode: PRO4

Nadere informatie

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 7 november 2014, uur

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 7 november 2014, uur Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 7 november 2014, 8.30-10.30 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int

Nadere informatie

Klassen. Hoofdstuk Klassen

Klassen. Hoofdstuk Klassen 212 Hoofdstuk 12 Klassen blz. 213 blz. 214 12.1 Klassen Een klasse is een groepje methoden. Dat hebben we in de programma s tot nu toe wel gezien: we definieerden steeds een of meerdere klassen (in ieder

Nadere informatie

Een eenvoudig algoritme om permutaties te genereren

Een eenvoudig algoritme om permutaties te genereren Een eenvoudig algoritme om permutaties te genereren Daniel von Asmuth Inleiding Er zijn in de vakliteratuur verschillende manieren beschreven om alle permutaties van een verzameling te generen. De methoden

Nadere informatie

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies 17 Operaties op bits In hoofdstuk 1 is gezegd dat C oorspronkelijk bedoeld was als systeemprogrammeertaal om het besturingssysteem UNIX te implementeren. Bij dit soort toepassingen komt het voor dat afzonderlijke

Nadere informatie

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet

Nadere informatie

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/ Programmeermethoden Functies vervolg Walter Kosters week 5: 1 5 oktober 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Files manipuleren 1 Deze void-functie telt niet-lege regels in een file invoer: void

Nadere informatie

Kleine cursus PHP5. Auteur: Raymond Moesker

Kleine cursus PHP5. Auteur: Raymond Moesker Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 3 feb. 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd

Nadere informatie

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk. HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een

Nadere informatie

Online c++ leren programmeren:

Online c++ leren programmeren: Online c++ leren programmeren: Inhoud 1)Waar vind ik een c++ compiler?... 2 2)Hoe start ik een programma in c++?... 2 3)Een eerste c++ programma:... 3 Een eerste programma schrijven:... 3 Mijn eerste programma

Nadere informatie

Gertjan Laan Aan de slag met C++ Vijfde editie

Gertjan Laan Aan de slag met C++ Vijfde editie Hoofdstuk 1 Paragraaf 1.8 Vragen 1. Wat is de functie van een compiler? Een compiler vertaalt een programma dat geschreven is in een hogere programmeertaal zoals C++ (de broncode) naar een code die begrepen

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 5 april 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code

Nadere informatie

IMP Uitwerking week 13

IMP Uitwerking week 13 IMP Uitwerking week 13 Opgave 1 Nee. Anders moet bijvoorbeeld een venster applicatie een subklasse zijn van zowel Frame en WindowListener. Als de applicatie ook een button of een menu heeft, dan moet het

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 6 december 2013 Terugblik Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in

Nadere informatie

De standaard programmeertaal

De standaard programmeertaal C De standaard programmeertaal Oorsprong CPL stond voor Combined Programming Language of Cambridge Programming Language. Ze stamt uit 1963, maar de eerste compiler arriveerde pas rond 1970. De taal was

Nadere informatie

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Digitale

Nadere informatie

EE1400: Programmeren in C BSc. EE, 1e jaar, , 3e college

EE1400: Programmeren in C BSc. EE, 1e jaar, , 3e college EE1400: Programmeren in C BSc. EE, 1e jaar, 2012-201, e college Arjan van Genderen, Computer Engineering 4-12-2012 Delft University of Technology Challenge the future Hoorcollege Arrays, Pointers en Strings

Nadere informatie

http://www.liacs.nl/home/kosters/java/

http://www.liacs.nl/home/kosters/java/ sheets Programmeren 1 Java college 2, Walter Kosters De sheets zijn gebaseerd op de hoofdstukken 2 tot en met 6 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/

Nadere informatie

Dynamisch geheugen beheer

Dynamisch geheugen beheer Dynamisch geheugen beheer + Normaal wordt laats in het werkgeheugen gereserveerd tijdens de comilatie aan de hand van de declaraties van de variabelen. + Deze geheugenreservering is statisch: in het bronbestand

Nadere informatie

Modulewijzer Tirdat01

Modulewijzer Tirdat01 Modulewijzer Tirdat01 W. Oele 25 augustus 2008 1 Inhoudsopgave 1 Inleiding en leerdoelen 3 2 Voorkennis 3 2.1 tirprg01 en tirprg02........................ 3 2.2 tirprg03.............................. 4

Nadere informatie

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/ Programmeermethoden Recursie Walter Kosters week 11: 20 24 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Vierde programmeeropgave 1 De Grote getallen programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 13 november 2015 Expressies Functies Ingebouwde functies Variabelenbereik Inleveropgave 1 Terugblik Programma is een lijst van opdrachten Terugblik Programma is

Nadere informatie

Programmeren in Java les 3

Programmeren in Java les 3 4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een

Nadere informatie

DOMjudge teamhandleiding

DOMjudge teamhandleiding judge DOMjudge teamhandleiding Samenvatting /\ DOM DOM judge Hieronder staat de belangrijkste informatie kort samengevat. Dit is bedoeld om snel aan de slag te kunnen. We raden echter ten zeerste aan dat

Nadere informatie

Datastructuren en algoritmen

Datastructuren en algoritmen Datastructuren en algoritmen Doelstelling Datastructures + algorithms = programs Boek van Niklaus Wirth: bedenker Pascal en Modula Datastructuur: structuur om informatie op te slaan Algoritme: voorschrift

Nadere informatie

Omschrijf bij ieder onderdeel van de methode de betekenis ervan. Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing.

Omschrijf bij ieder onderdeel van de methode de betekenis ervan. Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing. irkel (met Jpanel) ij de onderstaande opdracht behoort het bestand Panels: JPanels_1.java (map Panel) in de map irkel. pplicaties in Java hebben altijd een publieke klasse waarin een methode main voorkomt.

Nadere informatie

Hoofdstuk 9. Hashing

Hoofdstuk 9. Hashing Hoofdstuk 9 Hashing Het zoeken in een verzameling van één object is in deze cursus al verschillende malen aan bod gekomen. In hoofdstuk 2 werd uitgelegd hoe men een object kan zoeken in een array die veel

Nadere informatie

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn. Eerste deeltentamen Gameprogrammeren Vrijdag 26 september 2014, 8.30-10.30 uur Naam: Studentnummer: Het tentamen bestaat uit 4 opgaven. Elke opgave levert 10 punten op. Je cijfer is het totaal aantal punten

Nadere informatie

10 Meer over functies

10 Meer over functies 10 Meer over functies In hoofdstuk 5 hebben we functies uitgebreid bestudeerd. In dit hoofdstuk bekijken we drie andere aspecten van functies: recursieve functies dat wil zeggen, functies die zichzelf

Nadere informatie

Deeltentamen Grammatica s en ontleden 22 december 2005

Deeltentamen Grammatica s en ontleden 22 december 2005 Tentamen Grammatica s en ontleden 22 december 2005 1 Deeltentamen Grammatica s en ontleden 22 december 2005 Let op: opgave 1 t/m 4 tellen voor (slechts) 5 punten mee, opgave 5 voor maar liefst 50 punten,

Nadere informatie

Inleiding C++ Coding Conventions

Inleiding C++ Coding Conventions Inleiding C++ Coding Conventions Opleiding Bachelor of Science in Informatica, van de Faculteit Wetenschappen, Universiteit Antwerpen. Nota s bij de cursus voor academiejaar 2012-2013. Ruben Van den Bossche,

Nadere informatie

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur 1. (2 punten per deelvraag) Deze opgave bestaat uit een aantal tekstvragen. Houd het antwoord kort: een

Nadere informatie

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar 2006-2007 23 Januari, 2007 **BELANGRIJK** : Schrijf je naam onderaan dit blad Leg volgende 3 begrippen kort en bondig uit : a. Concurrent

Nadere informatie

Inhoud leereenheid 7c. JavaScript: Objecten en functies. Introductie 59. Leerkern 60. Samenvatting 82. Opdrachten 83. Zelftoets 89.

Inhoud leereenheid 7c. JavaScript: Objecten en functies. Introductie 59. Leerkern 60. Samenvatting 82. Opdrachten 83. Zelftoets 89. Inhoud leereenheid 7c JavaScript: Objecten en functies Introductie 59 Leerkern 60 1 Functies 60 1.1 Syntax - samenvatting 60 1.2 Functies definiëren 61 1.3 Functie als parameter (facultatief) 64 1.4 Functie

Nadere informatie

Versie 2: B C D D A C D A C C. Versie 3: C D A A B D A B D D. Versie 4: A D C C B D C B D D. Versie 5: B A D D C A D C A A

Versie 2: B C D D A C D A C C. Versie 3: C D A A B D A B D D. Versie 4: A D C C B D C B D D. Versie 5: B A D D C A D C A A Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 1 februari 2019, 11.00 13.00 uur Voor de meerkeuzevragen hebben we verschillende versies. Dit zijn de juiste antwoorden per versie.

Nadere informatie

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Syntax- (compile), runtime- en logische fouten Binaire operatoren Inhoud Syntax- (compile), runtime- en logische fouten Binaire operatoren Operaties op numerieke datatypen Evaluatie van expressies, bindingssterkte Assignment operaties en short-cut operatoren Controle

Nadere informatie

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax, Deel 1: Arduino kennismaking Wat is een microcontroller, structuur van een programma, syntax, Wat is een microcontroller Wat is een microcontroller? Microcontroller = kleine dedicated computer. - Beperkt

Nadere informatie

EE1400: Programmeren in C BSc. EE, 1e jaar, , 2e college

EE1400: Programmeren in C BSc. EE, 1e jaar, , 2e college EE1400: Programmeren in C BSc. EE, 1e jaar, 2012-2013, 2e college Arjan van Genderen, Computer Engineering 20-11-2012 Delft University of Technology Challenge the future Agenda A.s. woensdagmiddag 14.00

Nadere informatie

Variabelen en statements in ActionScript

Variabelen en statements in ActionScript Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer

Nadere informatie

Vakgroep CW KAHO Sint-Lieven

Vakgroep CW KAHO Sint-Lieven Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be

Nadere informatie

Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, uur

Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, uur Naam: Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, 11.00-13.00 uur Studentnummer: Het tentamen bestaat uit 3 opgaven. Opgaven 1 levert 20 punten op, opgave 2 levert 10 punten op, en opgave

Nadere informatie

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS Laatste aanpassing: 15 oktober 2003 Inhoudsopgave 1 Bestandsnamen 3 2 Organizatie Bestanden 3 3 Indentatie

Nadere informatie

Inleiding... 3. Een terugblik op C... 3

Inleiding... 3. Een terugblik op C... 3 1 Inhoudsopgave. Inleiding.... 3 Een terugblik op C.... 3 1 Inleiding van C naar C++.... 6 1.1 Commentaar met //.... 6 1.2 Plaats van variabelen definities.... 6 1.3 Constante waarden met const.... 7 1.4

Nadere informatie

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten

Nadere informatie

Stacks and queues. Hoofdstuk 6

Stacks and queues. Hoofdstuk 6 Hoofdstuk 6 Stacks and queues I N T R O D U C T I E In dit hoofdstuk worden drie datastructuren stack, queue en deque behandeld. Om deze datastructuren te implementeren, worden onder andere arrays en linked

Nadere informatie

Week 2 : Hoofdstukken 2 en 6; extra stof: inleiding pointers

Week 2 : Hoofdstukken 2 en 6; extra stof: inleiding pointers Week 2 : Hoofdstukken 2 en 6; extra stof: inleiding pointers Hoofdstuk 6: Beslissingen: if-statement en switch-statement. Inleiding: Condities zijn waar (true) of onwaar (false) In C staat het int-getal

Nadere informatie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk

Nadere informatie

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, 8.30-10.30 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

int getaantalpassagiers{): void setaantalpassagiers(int aantalpassagiers);

int getaantalpassagiers{): void setaantalpassagiers(int aantalpassagiers); bestand voertuig.h biz. 1 van 2 #ifndef VOERTUIG H #define VOERTUIG H #include using std::string; class Voertuig { public: Voertuig(); Voertuig(const string& inschrijvingsnumrner, const string&

Nadere informatie

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010 Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2009-2010 16 juni, 2010 **BELANGRIJK** 1. Schrijf je naam onderaan op elk blad. 2.

Nadere informatie

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Vrijdag 22 januari 2010 Toelichting Dit is een open boek tentamen. Communicatie en het gebruik van hulpmiddelen zijn niet toegestaan.

Nadere informatie

4EE11 Project Programmeren voor W. College 2, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e

4EE11 Project Programmeren voor W. College 2, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e 4EE11 Project Programmeren voor W College 2, 2008 2009, Blok D Tom Verhoeff, Software Engineering & Technology, TU/e 1 Onderwerpen Terugblik Functies Organisatie (architectuur) van programma s Arrays Structuren

Nadere informatie

Objectgeoriënteerd programmeren in Java 1

Objectgeoriënteerd programmeren in Java 1 Objectgeoriënteerd programmeren in Java 1 CPP Javaprogrammeur Bijeenkomst 3 Leereenheden 7, 8, 9 De Java API Java bevat een grote bibliotheek standaardklassen: de Java API Voorbeelden java.lang basisklassen

Nadere informatie

Programmeren in C++ Efficiënte zoekfunctie in een boek

Programmeren in C++ Efficiënte zoekfunctie in een boek Examen Software Ontwikkeling I 2e Bachelor Informatica Faculteit Wetenschappen Academiejaar 2010-2011 21 januari, 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief de hints/opmerkingen)!

Nadere informatie

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010 Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2009-2010 16 juni, 2010 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief

Nadere informatie

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49 Stacks and queues Introductie 45 Leerkern 45 6.1 Stacks 45 6.2 Queues 47 6.3 Double-ended queues 48 Terugkoppeling 49 Uitwerking van de opgaven 49 Bijlage: Diagrammen belangrijkste interfaces en klassen

Nadere informatie

Zelftest Inleiding Programmeren

Zelftest Inleiding Programmeren Zelftest Inleiding Programmeren Document: n0824test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST INLEIDING PROGRAMMEREN Deze

Nadere informatie

Ontwerp van Informatiesystemen

Ontwerp van Informatiesystemen 1ste bach HIB Ontwerp van Informatiesystemen Prof. Verelst Q www.quickprinter.be uickprinter Koningstraat 13 2000 Antwerpen 112 2,50 Online samenvattingen kopen via www.quickprintershop.be Table of Contents

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Functies Vorige week bekeken we functies: def bereken(a, x): return a * (x

Nadere informatie

Een gelinkte lijst in C#

Een gelinkte lijst in C# Een gelinkte lijst in C# In deze tutorial ga demonstreren hoe je een gelinkte lijst kan opstellen in C#. We gaan een klasse schrijven, die een gelijkaardige functionaliteit heeft als een ArrayList, namelijk

Nadere informatie

Dit document bevat informatie over make bij het eerstejaars college Programmeermethoden, Universiteit Leiden, najaar 2010, zie

Dit document bevat informatie over make bij het eerstejaars college Programmeermethoden, Universiteit Leiden, najaar 2010, zie Dit document bevat informatie over make bij het eerstejaars college Programmeermethoden, Universiteit Leiden, najaar 2010, zie www.liacs.nl/home/kosters/pm/ Met dank aan allen die aan deze tekst hebben

Nadere informatie

Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft

Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit

Nadere informatie

VI. Klassen en objecten

VI. Klassen en objecten VI. Klassen en objecten Klassen en objecten vormen het fundament van OOP. We zullen dus uitgebreid aandacht besteden aan klassen en objecten. U kunt Java niet begrijpen zonder goed met klassen en objecten

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Functies Vorige week bekeken we functies: def

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 27 november 2015 Recursie Objecten Constructors Aanpassen variabelen this keyword Recursie Recursie Recursieve functie roept zichzelf (direct of indirect) aan

Nadere informatie

Programmeren in C ++ les 4

Programmeren in C ++ les 4 Elektrotechniek/Embedded Systems engineering inf2d Programmeren in C ++ les 4 cursus 2010-2011 ir drs E.J Boks Les 4 Voortzetting van C ++ verschillen met C Statische klassevariabelen Constante klassevariabelen

Nadere informatie

Scala. Korte introductie. Sylvia Stuurman

Scala. Korte introductie. Sylvia Stuurman Korte introductie Sylvia Stuurman Wat is er zo bijzonder aan? Schaalbaar Objectgeoriënteerd (handiger dan Java!) Functioneel Scripts schrijven Gecompileerd: Java bytecode Pagina 2 voor scripts Pagina 3

Nadere informatie

Inleiding Programmeren in C (onder labwindows)

Inleiding Programmeren in C (onder labwindows) Inleiding Programmeren in C (onder labwindows) Contact: Ivo van Vulpen & Marcel Vreeswijk versie 0 op www: www.nikhef.nl/ h73 1 Contents 1 Inleiding 4 1.1 Materiaal.................................. 4

Nadere informatie

Modulewijzer tirprog02/infprg01, programmeren in Java 2

Modulewijzer tirprog02/infprg01, programmeren in Java 2 Modulewijzer tirprog02/infprg01, programmeren in Java 2 W. Oele 17 november 2009 1 Inhoudsopgave 1 Inleiding 3 2 Studiehouding 3 3 Voorkennis 4 4 Inhoud van deze module 5 5 Leermiddelen 5 6 Theorie en

Nadere informatie

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn. Eerste deeltentamen Gameprogrammeren Vrijdag 27 september 2013, 8.30-10.30 uur Naam: Studentnummer: Het tentamen bestaat uit 4 opgaven. Elke opgave levert 10 punten op. Je cijfer is het totaal aantal punten

Nadere informatie

Objectgeoriënteerd Programmeren in C++

Objectgeoriënteerd Programmeren in C++ Objectgeoriënteerd Programmeren in C++ Woef, woef! Harry Broeders De Haagse Hogeschool Opleiding Elektrotechniek 27 april 2015 J.Z.M.Broeders@hhs.nl Objectgeoriënteerd Programmeren in C++ van Harry Broeders

Nadere informatie

Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 19 oktober 2012, uur

Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 19 oktober 2012, uur Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 19 oktober 2012, 11.00-13.00 uur 1. Deze opgave bestaat uit een aantal tekstvragen. Houd het antwoord kort: een of twee zinnen per onderdeel

Nadere informatie

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 9 november 2018, uur

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 9 november 2018, uur Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 9 november 2018, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Om de libraries te kunnen gebruiken, moet de programmeur (een deel van) zijn programma in C/C++ schrijven.

Om de libraries te kunnen gebruiken, moet de programmeur (een deel van) zijn programma in C/C++ schrijven. 1 Inleiding tot.net Software werd en wordt meestal geschreven in C of C++. De broncode van een C/C++ programma wordt dan gecompileerd naar machine code, die eventueel nog gelinkt wordt met machine code

Nadere informatie

Programmeren in Java 3

Programmeren in Java 3 2 september 2007 voor deeltijdstudenten Kop van Zuid Rotterdam, 3 juni 2007 Even voorstellen Naam: Wessel Oele(31) Docent bij opleiding technische informatica Kamer: I210 (tweede verdieping, links de gang

Nadere informatie

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, 17 20 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie