[Tutorial C/C++/C#] Redefinirea operatorului ( )

Locked
User avatar
LaUR SNG
Fondator
Fondator
Posts: 9038
Joined: 8 years ago
Location: SNAGOV
Has thanked: 11 times
Been thanked: 6 times
Zodiac:
Age: 21
Contact:
Status: Offline
Romania

8 years ago

Nume Tutorial: Redefinirea operatorului ( )
Descriere: Un tutorial folositor pentru cei care lucreaza in limbajul de programare C++
Download: -
Autor: Nu este specificat
Sursa (Link-ul oficial): -
tutorialeprogramare.ro


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
[/b]
„Iubiti totul cu toată inima ... căci viața se termină când vrea ea si pe nepusă masă !” – LaUR SNG

https://photos.app.goo.gl/WbQsF4C9QfvDvWSo6

Curios ? Nu il deschide :13:

[spoiler]Image[/spoiler]
[spoiler]Image[/spoiler]

https://www.facebook.com/10043517804227 ... 039605115/
Locked

Return to “C / C++ / C#”