Descriere: Un tutorial folositor pentru cei care lucreaza in limbajul de programare C++
Download: -
Autor: Nu este specificat
Sursa (Link-ul oficial): -
Propria parere: Folositor
Tutorialul: Mai jos.
Redefinirea operatorului "apel de functie" ne aduce in situatia de a crea un operator binar de forma:
expresie(lista_de_expresii).
Utilizarea functiei-operator "( )" are doua mari avantaje:
a. Evaluarea si verificarea listei de argumente se face intocmai ca la o functie obisnuita.
b. Modul de functionare al mecanismului de apel. Desi operatorul este binar, functia-operator poate avea oricati parametri (cel de al doilea operand fiind o lista de argumente). Deoarece lista de parametri poate fi vida, inseamna ca al doilea operand poate lipsi cu totul.
In exemplul de mai jos, am folosit operatorul "( )" pentru implementarea unui iterator (functie de parcurgere a unei liste intr-o ordine prestabilita).
Exemplu:
Code: Select all
#include <iostream.h>
#include <process.h>
struct elem {
int nr;
struct elem * urm;
elem(int n, struct elem * p) : nr(n), urm(p) {}
};
// acesta clase este destinata pastrarii si
// manipularii de liste simplu inlantuite de
// elemente de tipul "elem"
class list {
struct elem * cap, *curent;
// "cap" pastreaza un pointer la primul element al
// listei, iar "curent" pozitia la care s-a ajuns
// in cadrul operatiei de iterare
public:
list(void) {
cap=NULL;
}
void init(int);
// prototipul celor doi iteratori
struct elem * operator() (void);
struct elem * operator() (int);
};
// creaza o lista cu "n" elemente
void list::init(int n) {
if(n<1) {
cout<<"Initializare eronata !!!\n\n";
exit(1);
}
for(int i=0; i < n; i++) {
struct elem * p;
p=new elem(i, cap);
cap=p;
}
// asigura o parcurgere ciclica a listei (in urma terminarii
// unei parcurgeri, se va incepe din nou cu primul
// element)
struct elem * list::operator() (void) {
struct elem * p=curent;
curent=curent->urm!=NULL ? curent->urm : cap;
return p;
}
// forteaza inceperea iterarii cu elementul avand
// numarul de ordine "pozitie"
struct elem * list::operator() (int pozitie) {
curent=cap;
// parcurge lista (eventual de mai multe ori,
// caci "pozitie" poate fi mai mare decat numarul
// de elemente din lista) si se pozitioneaza pe
// elementul dorit
for(int i=0; i nr<<" ";
cout<<"\n" << l1(l2)->nr<<"\n";
for(int j=0; j < 13; j++)
cout<<l1()->nr<<" ";
}
In urma executiei, pe ecran se vor afisa rezultatele:
3 2 1 0 3 2 1 0 3 2 1 0 3
0
3 2 1 0 3 2 1 0 3 2 1 0 3