O metoda a unei clase poate fi referita (apelata) si printr-un pointer la ea.
Definirea unui pointer la o metoda se poate face astfel:
Tip_functie (Nume_clasa *Nume_Pointer Lista_par_formali // sau cu typedef
Initializarea unui pointer la o metoda se poate realiza astfel:
Nume_Pointer & Nume_clasa Nume_Metoda // se pot realiza si la definire
Referirea unui pointer la o metoda (apelarea metodei)
(Nume_Obiect . *Nume_Pointer Lista_par_actuali .
De exemplu, pentru programul anterior, modificarile necesare pentru a putea apela cele doua metode Muta si Trag ale clase Punct pot fi urmatoarele:
Pointeri la metode
class Punct
void Atrib .
Punct (Punct& P)
void Muta ()
void Trag ()
~Punct ()
static Punct St_Sus, Dr_Jos;
static float MinX() // Metoda Statica
.
};
void main (void)
// Initializare
// sau:
void (Punct :: *Pm[2] // Def+Ini
(P[0].*Pm[0])(); setcolor(WHITE); // Apel Muta
for (i=1; i<=n; i++) (P[i].*Pm[1] // Apel Trag
Un alt exemplu, care utilizeaza pointeri la metode (Triun, Drept si Romb) este urmatorul:
Pointeri la *Metode
# include <math.h>
# include <conio.h>
# include <graphics.h>
# define Cale 'c:BorlandCBgi'
class Grafic
~Grafic( ) };
int u (float);
int v (float);
class Punct
void Atrib (float x,float y)
Punct (Punct& P)
void Muta ()
void Triun ()
void Drept ()
void Romb ()
~Punct ()
static Punct St_Sus, Dr_Jos; // Fereastra Reala
static float MinX()
static float MaxX()
static float MinY()
static float MaxY()
};
Punct Punct::St_Sus, Punct::Dr_Jos; // Fereastra Reala
int u1=110, v1=20, u2=500, v2=430; // Fereastra Ecran
int u (float x)
int v (float y)
float x0 (float t) // x(t)
float y0 (float t) // y(t)
float x1 (float t) // x(t)
float y1 (float t) // y(t)
float x2 (float t) // x(t)
float y2 (float t) // y(t)
void main (void)
,y[3]=;
for (j=0; j<=2; j++) P[j][0].Atrib((*x[j])(0),(*y[j])(0));
Punct::St_Sus=Punct::Dr_Jos=P[0][0];
for (j=0; j<=2; j++) for (i=0; i<=n; i++)
void (Punct::*Desen[3])()=;
for (j=0; j<=2; j++) for (i=0; i<=n; i++) (P[j][i].*Desen[j])();
// Mummers Dance
|