De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Tinpro015b-les4 Klassen.

Verwante presentaties


Presentatie over: "Tinpro015b-les4 Klassen."— Transcript van de presentatie:

1 tinpro015b-les4 Klassen

2 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; // s->top = (*s).top

3 Abstracte datatypes in C
char top(stack *s) { return s->info[s->top]; } main() { struct stack s; reset(s); push(s,’a’); /* bedoeld gebruik */ s.info[73] = ’x’; } /* onbedoeld gebruik */

4 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’); }

5 Structs in C++ Bevatten naast data ook functies
(memberfuncties) ( In java methodes) Declaraties zijn • private: alleen door memberfuncties te gebruiken • public: bereikbaar met punt-notatie

6 Classes in C++ Verschil alleen in default-protectie:
Struct declaraties zijn default public 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]; } };

7 Object-georienteerd programmeren
Instances van classes heten objecten. Imperatief programmeren: Functies (met objecten als parameter) Object-georiënteerd programmeren: Objecten (met functies als member) Echt objectgeoriënteerde wordt het pas bij dynamische binding van memberfuncties.

8 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: int f(void); }; int c::f(void) { return 2*x; } Notatie c::f heet scope-resolutie

9 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

10 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 scope

11 Constructor Initialisatie van een instance van een klasse door constructor functie. Heeft dezelfde naam als de klasse, en geen resultaattype De lidfunctie wordt automatisch aangeroepen als een nieuw klasseobject wordt aangemaakt. De lidfunctie heet constructor. 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; }

12 Constructor 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); }

13 Constructor met this Het is mogelijk de parameters van de data-leden te gebruiken. Binnen de constructor this-> toevoegen class punt { int x; int y; public: punt(int x , int y ) { this->x =x ; this->y =y ; } }; main() { punt hier(12,5), *p; ... p = new punt(2,6); }

14 Operatoren definiëren (overloading)
class vec { int x; int y; public: vec(int x , int y ) { this->x =x ; this->y =y ; } int getx() const { return x;} int gety() const { return y;} private: int x,y; }; vec operator+(const vec &u, const vec &v) { return vec(u.getx() + v.getx(), u.gety() + v.gety()); main() { vec a(12,5), b(3,2) ,s ; s= a+b; cout << s ; }

15 Friend functies De operator+ krijgt de status van friend-functie, dwz de functie krijgt toegang tot de private leden x en y class vec { int x; int y; public: vec(int x , int y ) { this->x =x ; this->y =y ; } friend vec operator+(const vec &u, const vec &v) private: int x,y; }; vec operator+(const vec &u, const vec &v) { return vec(u.x + v.x, u.y + v.y); main() { vec a (12,5), b(3,2) ,s ; s= a+b; cout << s ; }

16 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 verdwijnt. De naam van de klasse met een ~ (tilde) ervoor

17 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 verdwijnt. De naam van de klasse met een ~ (tilde) ervoor

18 Huiswerk les 4 Maak de opgaven 7.1, 7.2, 7.4 uit C++ boek
Bestudeer Hfdst 8 uit C++-boek


Download ppt "Tinpro015b-les4 Klassen."

Verwante presentaties


Ads door Google