De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

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,

Verwante presentaties


Presentatie over: "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,"— Transcript van de presentatie:

1 tircms03-p les 4 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: class c { int x; public: 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 "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,"

Verwante presentaties


Ads door Google