Tinpro015b-les6 Templates.

Slides:



Advertisements
Verwante presentaties

Advertisements



OOS Object geOrienteerd Software-ontwerp - 3
Gestructureerd programmeren in C
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.
Conditionele expressie
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 5.

Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
1 SOCS Hoofdstuk 1 Programmeertaal C. 2 Kenmerken van C Hogere programmeertaal  Grote verzameling types, strenge type controle  Zelf nieuwe types definiëren.
Les 2 Basisbouwstenen (deel 1)
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.
Numerieke Natuurkunde
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
GESPRG Les 9 Gestructureerd programmeren in C dimensionale array Array van array’s int i = 31; int a[4] = {7, 23, 6, 2}; int m[2][4] = { {1, 1,
GESPRG Les 7 Gestructureerd programmeren in C. 92 Verwisselen Schrijf een functie waarmee twee int variabelen verwisseld kunnen worden. void wissel(int.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Oefeningen Hoofdstuk 3.
Algoritmiek Object-georiënteerd Programmeren
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 3.
Deel I: Programmeertaal C 6. Arrays en Pointers
P. 1 Vakgroep Informatietechnologie Structuur Deel II C++ Classes Namespaces Type casting Reference types Constructors en Destructors Memory Management.
P. 1 Deel I: Programmeertaal C 4. Functies en Macro’s Prof.Dr.Ir. Filip De Turck.
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 2a nMet een InputStream lees je bytes uit een binare file nMet een Reader lees je characters uit een tekstfile.
OO Analyse in de praktijk OO Analyse in de praktijk IV OO basisregels.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Tircms03-p les 6 Templates. Functietemplates void verwissel(int &x, int &y); { int w=x;x=y;y=w;} Dezelfde functie voor meerdere types heet een functietemplate.
Tircms03-p les 7 Standaardfuncties. In header opnemen bijv: using namespace std // C++ // oude C.
Tircms03-p les 2 Hfdst 3,4 Meer operatoren Functies.
PEMSY1http:// 1  Herhaling: combineren van assembler en C  Herhaling: subroutine  Oefening: melodie Klas EV2B: week.
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;
Tircms02-p les 2 Meer operatoren Arrays en pointers Types en conversie.
tircms02-p les 1 Operating Systems practicum
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,
Tircms03-p les 1 C++ voor C-kenners Voor Technische Informatica.
Opgave 1a ncompiler: vertaalt broncode naar machine-uitvoerbare code ninterpreter: voert broncode direct uit.
Hoofdstuk 4 Nieuwe methoden. Tekenen g.drawRect(20,60,40,40); g.drawLine(20,60,40,40); g.drawLine(40,40,60,60); g.drawRect(70,60,40,40); g.drawLine(70,60,90,40);
Java Objectgeoriënteerd Programmeren in Java met BlueJ
De laatste essentiele dingen.  Classes ◦ Syntax ◦ Constructors & Destructors  Header & Source Files ◦ Waar gebruiken we dit voor  Compiler Theorie.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Loops en errors Array's Random try catch for loop while loop do while loop.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Objectgeoriënteerd Programmeren (2)
Aanroep van een methode voert opdrachten uit in de body daarvan
Pointers, arrays & dynamische geheugen
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Overerving
Hoofdstuk 9.2 Strings.
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Methoden
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Basis Gameprogrammeren
Tinpro015b-les5 Invoer en Uitvoer.
Tinpro015b-les3 Hfdst 3,4 Meer operatoren Functies.
C++ • C++ als een verbetering van C • Abstracte datatypen met classes • Constructoren en destructoren • Subklassen • binding van functies 1.
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Tinpro015b-les4 Klassen.
Aanroep van een methode voert opdrachten uit in de body daarvan
Unified Modeling Language
Gameprogrammeren: Klassen en objecten
Gameprogrammeren: Arrays
Transcript van de presentatie:

tinpro015b-les6 Templates

Functietemplates void verwissel(int &x , int &y); { int w=x;x=y;y=w;} Dezelfde functie voor meerdere types heet een functietemplate Er is een gegeneraliseerd type Voorbeeld: template <class T> void verwissel(T &x , T &y); { T w=x;x=y;y=w;}

Functietemplates int main() { int i= 1,j=2; float u=3.4 , v=5.6; verwissel(i,j); // verwissel 2 int objecten verwissel(u,v); // verwissel 2 float objecten cout << i << “ “<< j << endl ; cout << u << “ “<< v << endl ; return (0); }

Functietemplates In het programma worden 2 functies gegenereerd void verwissel(int &x , int &y); { int w=x;x=y;y=w;} void verwissel(float &x , int &y); { float w=x;x=y;y=w;} template <class T> Het woord class is opmerkelijk , omdat we met types werken

Meer dan 1 template-argument We willen uitrekenen: x = an Als a = double , n = integer  x = double (floating point) Als a = integer , n = integer  x = long ( integer) Een functietemplate MACHT voor deze 2 situaties 2 types: grondtaltype G (a) resultaattype R (x)

Meer dan 1 template-argument template <class G , class R> R macht(G a , int n , R &x) // x =an { x=1; for (int i=1; i <=n ; i++ ) x=x*a; return x; } int main() { double x1 ; macht(10.0 , 15, x1); cout << x1; // x1=10.015 long x2 ; macht(2 , 17, x2); cout << x2; // x2=217 long x3 ; cout << macht(2 , 20, x3 ); // x3=220 return 0; }

Meer dan 1 template-argument <class G , class R> Hier worden 2 template-argumenten gebruikt R macht(G a , int n , R &x) een template-argument kan ook gebruikt worden voor return-waarde

Klassetemplates Zelfde verhaal als bij functietemplates 2 classes verschillen alleen qua types class 1 float class 2 int Daarom 1 klassetemplate Voorbeeld met vectoren

Klassetemplates template <class T> class vec { public: vec(T xx =0, T yy =0 ) { x=xx ; y=yy; } void printvec() ; vec <T> operator+( vec <T> &a, vec <T> &b) { return vec <T> ( a.x+ b.x, a.y +b.y);} private: T x, y; };

Klassetemplates template <class T> void vec <T>:: printvec() ; { cout << x <<“ “ << y << endl;} main() { vec <int> iu(1,2), iv(3,4) ; isom; vec <float> fu(1.1,2.2), fv(3.3,4.4) ; fsom; isom=iu + iv; fsom=fu + fv; isom.printvec(); fsom.printvec(); return 0; }

Klassetemplates Resultaat 4 6 4.4 6.6

Klassetemplates Klasse-template: template < template-argument-list> Concreet: template <class T> vec is een geparametriseerd type met T als parameter Er zijn in dit voorbeeld 2 Template-class-names vec <int> ; vec <float> Er worden a.h.w. 2 klassen gebruikt bijv: vec_int en vec_float

Klassetemplates Argument list kan ook een identifier bevatten zoals bij een functiedeclaratie template <int n> class floatrij{ public : float r[n] …..}; rij a 100 float , rij b 200 float declaratie: floatrij<100>a; floatrij<200>b; aanroep: a.r[i]; // i max 99 ; b.r[j]; // j max 199 voordeel t.o.v. array: a en b behoren tot een klasse : lidfuncties mogelijk

Klassetemplates combineren met type- argumenten template <class T, int n, class S> class rij { ….;} voorbeeld template-class-name: rij <int,100,long>

Default-argumenten klassetemplates template <class T ,int n, class S=T> nu kun je het 3e argument weglaten rij<float,3,float> a_float(0.3F , 0.1F); vervangen door: rij<float ,3> a_float(0.3F,0.1F);

Huiswerk les 6 Maak de opgaven 9.1, 9.2 uit C++ boek Bestudeer Hfdst 11 uit C++boek