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

Slides:



Advertisements
Verwante presentaties
Zelf objecten maken in VBA Ynte Jan Kuindersma, BIRD Automation Nationale Officedag 2009 EDE, 14 Oktober 2009.
Advertisements

Algoritmen en Datastructuren

Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
Ronde (Sport & Spel) Quiz Night !
Programmeren in Java met BlueJ
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.
Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.
PROS2 Les 11 Programmeren en Software Engineering 2.
Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding –Meerdere manieren te.

Computervaardigheden en Programmatie Universiteit AntwerpenObjecten 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Server side scripting 1 Webtechnologie Lennart Herlaar.
Algoritmiek Arrays: wat zijn dat en wat kun je ermee? Loops: hoe hou je ze in bedwang? Hoorcollege 6 - Ma. 9 okt L.M. Bosveld-de Smet.
Algoritmen en Datastructuren (ALDAT) EVMINX4 Dagdeel 2.
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
GESPRG Les 8 Gestructureerd programmeren in C. 101 Array Meerdere variabelen van hetzelfde type kun je samennemen in één array variabele. Stel in een.
Real-Time Systems (RTSYST) Week IPC inter process communication Shared variabele based (H5) Message based (H6) Kan ook gebruikt worden in systemen.
GESPRG Les 12 Gestructureerd programmeren in C. 152 Huiswerk Uitwerking void reverse(int a[], int n) { int first = 0, last = n - 1; while (first < last)
Opgave 1a: afronden int n=5; double a, b, c, d; a = n * 1.5; b = n * 3 / 2; c = n / 2 * 3; d = 3 / 2 * n; a b c d
Hoorcollege 8 Game object structuren. Arrays in games Grid-gebaseerd speelveld (zoals Tetris) Lijst van spelers Lijst van inventory items Lijst van alle.
Hoorcollege 14 Vijanden, excepties. Wat zit allemaal in een level? Startpositie van de speler Waterdruppels Tiles Vijanden Einde van het level Achtergronden.
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
CONTROLESTRUCTUREN (DEEL 2)
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Werken aan Intergenerationele Samenwerking en Expertise.
2009 Tevredenheidsenquête Resultaten Opleidingsinstellingen.
PLAYBOY Kalender 2006 Dit is wat mannen boeit!.
Algoritmiek Object-georiënteerd Programmeren
Algoritmiek Strings & Stringmanipulaties; Controle Structuren; Floating-point notation. Hoorcollege 4 - Ma. 25 sept L.M. Bosveld-de Smet.
DB&SQL8- 1 VBA Visual Basics for Applications: eigen Office versie vanaf Office2000 gelijk voor alle applicaties Programmeren onder meer nodig voor Het.
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
Hoofdstuk 5 – Object Based Programmeren
1 Hoofdstuk 11: Strings en karakters Inleiding In dit hoofdstuk bespreken we de mogelijkheden van de klassen : String StringBuffer Character StringTokenizer.
1 HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1. INTRODUCTIE  Vervolg discussie omtrent gestructureerd programmeren  Introductie van de overblijvende controlestructuren.
Deel I: Programmeertaal C 6. Arrays en Pointers
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 3 - onderwerpen Het.
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 1 Wat gaan we doen:  Een (vaste) melodie.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 3 - onderwerpen Instruction timing Shadow.
DU2PRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Beginselen van C opgaves… volgende week: ARM.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag GUI  command line redirection.
Hoofdstuk 2 Java. Soorten Java-programma’s nJava Applet programma “leeft” op een WWW-pagina nJava Application programma heeft een eigen window nJavascript.
Hoofdstuk 9 Objecten en klassen.
ECHT ONGELOOFLIJK. Lees alle getallen. langzaam en rij voor rij
TOPIC O: Pointers | pag. 1 Pointer = adres in het geheugen, is zelf geen geheugen! Expliciet geheugen aanvragen vóór gebruik.
Hoofdstuk 10.1 Toepassing: Bitmap-editor. nKlik punten op scherm nPlaatje verschuiven left, right, up, down nPlaatje bewerken clear, invert, bold, outline.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
De financiële functie: Integrale bedrijfsanalyse©
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 7 onze.
The beast has been released! 4 arcade-style games Interviews with famous people in the game industry Develop browsers games for any device (phone, tablet,
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
ZijActief Koningslust
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
Objectgeoriënteerd Programmeren (2)
Gameprogrammeren: Objecten en geheugen
C++ • C++ als een verbetering van C • Abstracte datatypen met classes • Constructoren en destructoren • Subklassen • binding van functies 1.
Tinpro015b-les4 Klassen.
Gameprogrammeren: Arrays
Transcript van de presentatie:

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 omtrek(float r) { /* r is de straal */ return (2*pi*r); } In C++: // Deze functie berekent // de omtrek van een cirkel float omtrek(float r) { // r is de straal return (2*pi*r); }2

Vermijd #define In C: #define pi #define false 0 #define als if In C++: const float pi = ; const int false = 0; const int *pf = &false; Ander gebruik van const: char *const s = "hallo"; 3

Vermijd #define In C: #define sq(x) x*x sq(1+2) Lapmiddel: #define sq(x) ((x)*(x)) In C++ functie-syntax: inline int sq(int x) { return x*x; }4

Declaraties In C: aan het begin van een functie In ANSI-C: aan het begin van een blok In C++: overal in het blok (dichtbij het gebruik) 5

Typedeclaraties In C: struct punt { int x,int y; } void f(struct punt p); Lapmiddel: typedef struct punt { int x, int y; } PUNT; void f(PUNT p); In C++: struct punt { int x, int y; } void f(punt p); 6

Call by reference In C: void wissel( int *x, int *y) { int h; h = *x; *x = y; *y = h; } main() { int a, b; wissel( &a, &b ); } In C++: void wissel( int &x, int &y) { int h; h = x; x = y; y = h; } main() { int a, b; wissel( a, b ); }7

Overloading In C: int iabs(int x) { return (x<0 ? -x : x); } float fabs(float x) { return (x<0.0 ? -x : x); } main() {... iabs(3) + fabs(-2.7)...} In C++: int abs(int x) { return (x<0 ? -x : x); } float abs(float x) { return (x<0.0 ? -x : x);} main() {... abs(3) + abs(-2.7)...}8

Default-parameters Overloading is handig: float macht(float x, int n) { r = 1; for (i=0; i<n; i++) r *= x; return r; } float macht(float x) { return macht(x,2); } Maar nog handiger is: float macht(float x, int n=2) { r = 1; for (i=0; i<n; i++) r *= x; return r;}9

Dynamische allocatie In C: int *data; data = (int*) malloc( n * sizeof(int) ); f(data[4]); free(data); In C++: int *data; data = new int[n]; f(data[4]); delete data;10

Abstracte datatypes in C struct stack { char info[100]; int top; }; 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]; } main() { struct stack s; /* bedoeld gebruik */ reset(s); push(s,’a’); /* onbedoeld gebruik */ s.info[73] = ’x’; }11

Abstracte datatypes in C++ struct stack { private: char info[100]; int top; public: void reset(void) { top = -1; } void push(char c){ top++; info[top]=c; } char top(void) { return info[top]; } }; main() { stack s; s.reset(); s.push(’a’); }12

structs in C++ Bevatten naast data ook functies (memberfuncties) Declaraties zijn private: alleen door memberfuncties te gebruiken public: bereikbaar met punt-notatie Implementatie: private/public beınvloedt alleen scope memberfuncties worden niet echt opgeslagen memberfuncties hebben stiekem extra parameter 13

classes in C++ Verschil alleen in default-protectie: in een struct declaraties zijn default public in een class declaraties zijn default private class stack { char info[100]; int top; public: void reset(void) { top = -1; } void push(char c){ top++; info[top]=c; } char top(void) { return info[top]; } };14

Object-georienteerd programmeren Instances van classes heten objecten. Imperatief programmeren: Functies (met objecten als parameter) Object-georienteerd programmeren: Objecten (met functies als member) Echt object-georieenteerd wordt het pas bij dynamische binding van memberfuncties. 15

Declaratie van memberfuncties Direct in de klasse-declaratie: class c { int x; public: int f(void) { return 2*x; } }; In de klasse-declaratie alleen prototype, functiedeclaratie apart: class c { int x; public: int f(void); }; int c::f(void) { return 2*x; } Notatie c::f heet scope-resolutie 16

static variabelen in C static lokale variabelen van functies worden gedeeld door alle aanroepen void f(void) { static int n=0; printf("ik ben %d keer\ aangeroepen", n++); } Implementatie: globale variabele met beperkte scope 17

static members in C++ static members van classes worden gedeeld door alle instanties class c { static int n; int x; int y; public: void f() { n++; } void g() { n++; } void h() { printf ("%d keer memberfuncie\gebruikt", n); } }; Implementatie alweer: globale variabele met beperkte scope18

Constructors Initialisatie van een instance van een klasse door constructor functie. Heeft dezelfde naam als de klasse, en geen resultaattype class stack { char info[100]; int top; public: stack(void) { top = -1; } }; Constructorfunctie wordt automatisch aangeroepen bij creatie van de variabele main() { stack s, *p;... p = new stack; }19

Constructors met parameters Handig voor initialisatie Parameters worden meegegeven bij declaratie of dynamische creatie class punt { int x; int y; public: punt(int x0, int y0) { x=x0; y=y0; } }; main() { punt hier(12,5), *p;... p = new punt(2,6); } 20

Dynamisch geheugen als members Allocatie in constructorfunctie De-allocatie in destructorfunctie class stack { char *info; int top; public: stack(int n) { info = new char[n]; top = -1; } ~stack(void) { delete info;} }; Destructor wordt automatisch aangeroepen als het object verdwijnt21

Classes voor open/sluit-constructies In C: File f; f = open("aap"); seek(f,pos); read(f,data); close(f); Met classes in C++: { File f("aap"); f.seek(pos); f.read(data); }22

Nog een open/sluit-constructie In C: data = GlobalLock(handle);... data->x... GlobalUnlock(handle); Met classes in C++ zou dit zo kunnen: { Lock data(handle)... data.x... } met in de constructor GlobalLock en in de destructor GlobalUnlock23

Toepassing: veilige arrays class Vector { int *p; int size; public: Vector(int n=10) { size=n; p=new int[n]; } ~Vector(void) { delete p; } int &elem(int); }; int & Vector::elem(int i) { if (i =size) printf("bound error"); return p[i]; } main() { Vector a(10), b(5); a.elem(1) = 17; b.elem(1) = a.elem(1) + 9; }24

Members die zelf objecten zijn Probleem: class Twee { Vector heen; Vector terug; public: Twee(int i) { } }; Wat is de parameter van de constructoren van de members? Oplossing: speciale syntax hiervoor: Twee(int i) : heen(i), terug(i) { } 25

Pointer naar this object class klasse; void f(klasse *obj); Pointer naar object is impliciete parameter van member-functies: class klasse { int x; public: void g(void); void h(void) { // impliciete parameter gebruikt voor toegang tot andere members... x g()... // moet expliciet genoemd om ‘dit’ object door te geven aan externe functies... f(this)... } };26

classes Derived classes breiden een klasse uit met extra members. Memberfuncties mag je herdefinieren. class Persoon { public: char naam[20]; int gebJaar; int leeftijd(void); void print(void); }; class Student : Persoon { public: char studie[10]; void print(void); }; main() { Student s;... s.naam s.studie... s.print(); }27

Constructoren voor derived classes Voorbeeld: array met ondergrens class Vector { public: Vector(int); ~Vector(void) int &elem(int); }; class BndVector : Vector { int eerste; public: BndVector(int lo, int hi) : Vector(hi-lo) { eerste = lo; } int &elem(int i) { return Vector::elem(i-eerste); } }; 28

Binding van hergedefinieerde functies Binding van functies gebeurt statisch, dus op grond van het compile-time type: class A { public: int f(void){ return 1; } }; class B : A { public: int f(void){ return 2; } }; main() { A a; B b; a.f(); // levert 1 b.f(); // levert 2 } 29

Derived klassen zijn subtypen Binding blijft statisch main() { A a, *pa; B b; pa = &a; // dit mag pa->f(); // levert 1 pa = &b; // dit mag ook! pa->f(); // wat levert dit? }30

virtual functies Dynamische binding van member-functies kan met virtual functies: class A { public: virtual int f(void){ return 1; } }; class B : A { public: int f(void){ return 2; } // type moet hetzelfde zijn als A::f }; main() { A a, *pa; B b; pa = &a; pa->f(); // levert 1 pa = &b; pa->f(); // levert nu 2! }31

Implementatie van virtual Memberfuncties die virtual zijn, worden wel in de datastructuur opgeslagen. Bij creatie is het type, en dus de gewenste functie bekend. Bij aanroep wordt de gewenste functie in de datastructuur opgezocht. Kost iets meer tijd en ruimte, maar voor de programmeur erg makkelijk. 32