[Tutorial C/C++/C#] Membrii unei clase

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: Membrii unei clase
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 .

Numele unei proceduri este prefixat de "::". Acest simbol poarta numele englezesc de "scope resolution operator" sau "scope access operator", si este utilizat in operatii de modificare a domeniului de vizibilitate implicit. Un exemplu tipic de utilizare ar fi urmatorul:

Exemplu:

Code: Select all

int i;

void f1( void ) {
int i;
// ...
i++; // se va incrementa "i"-ul local
// ...
}

void f2( void ) {
int i;
// ...
:: i++; // se va incrementa "i"-ul global
// operatorul "::" a facilitat accesarea variabilei cu numele "i"
// aflata intr-un domeniu de vizibilitate mai inalt, si,
// in consecinta, mascata de catre variabila locala "i"
// ...
}
In stanga lui "::" nu poate fi decat un nume de clasa sau nimic. In al doilea caz, variabila prefixata trebuie sa fie globala!

Exemplu:

Code: Select all

class ex {
int contor;
public:
void fct (void);
} ob1;

void ex::fct(void)
// variabila locala diferita de membrul "contor"
int contor;
ex::contor=100; // variabila-membru
for(contor=0; contor < 10; contor++)
// "contor" - ul lui "for" este cel local
ex::contor+=2; .. variabila - membru!!!
}
Cuvantul cheie "this" in C++ desemneaza pointerul transmis ca parametru ascuns. Acest cuvant cheie "this" este un nume de variabila (locala functiilor membru), accesibila programatorului, continand un pointer la obiectul care a apelat metoda.
De fapt, rolul lui "this" nu se margineste la identificarea membrilor unui obiect. Dupa cum vom vedea in capitolele ce urmeaza, exista situatii de implementare in care utilizarea lui "this" este salvatoare. Sa consideram urmatorul exemplu: intentionam sa cream o clasa "lista dublu inlantuita". Daca dorim sa asiguram inserarea unui element in capul listei, clasa poate arata astfel:

Code: Select all

#define NULL 0

class lista {
int numar;
lista *urm, *prec;
static lista *capLista;
public:
void init(int i) {
numar = i;
}

// inserare in capul listei dublu inlantuite

void insert(void) {
urm=capLista;
prec=NULL;
if(capLista)
caplLista->prec=this;
capLista=this;
}

// pentru a se putea face initializarea de mai jos este necesara declararea 
// lui *cap_lista ca fiind "STATIC";

lista * lista::capLista=NULL;

void main(void) {
lista l1;
lista l2;
lista l3;

l1.init(1); // obiectul "l1" apeleaza functia membru "init"
l2.init(2);
l3.init(3);

l1.insert(); // obiectul "l1" va fi inserat in lista
l2.insert(); // obiectul "l2" va fi inserat in lista
l3.insert(); // obiectul "l3" va fi inserat in lista
}
Domeniul de existenta al unui nume de clasa incepe in momentul declararii ei si se termina la sfarsitul blocului in care a fost declarata. Unicul caz mai ciudat este cel prezentat in exemplul anterior cand numele clasei este identic cu cel al unui alt identificator (in cazul nostru, un nume de functie). In astfel de situatii, e necesara prefixarea lui "numere" cu "class", pentru a se putea face deosebirea intre claasa si functia cu acelasi nume.
[/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#”