Ce face this
În interiorul unei metode, this este adresa obiectului pe care a fost apelată metoda. Când scrii sold_ într-o metodă, compilatorul înțelege de fapt this->sold_.
Îl scrii explicit în trei situații frecvente: când un parametru are același nume ca un membru (this->nume = nume;), când returnezi obiectul curent (return *this;) ca să înlănțuiești apeluri și când trimiți obiectul curent altei funcții. În metodele const, this este un pointer la obiect constant.
Metodele static nu au this, pentru că nu sunt apelate pe un obiect.
Exemple
Exemplul 1: Parametru cu același nume ca membrul
#include <print>
#include <string>
class Elev {
public:
void seteaza(const std::string& nume, int nota) {
this->nume = nume; // membrul = parametrul
this->nota = nota;
}
void afiseaza() const { std::println("{}: {}", nume, nota); }
private:
std::string nume;
int nota = 0;
};
int main() {
Elev e;
e.seteaza("Ioana", 10);
e.afiseaza();
}
Rezultat
Ioana: 10
Exemplul 2: Apeluri înlănțuite cu return *this
Fiecare metodă returnează o referință la același obiect, deci următoarea metodă se poate apela direct pe rezultat.
#include <print>
#include <string>
class Mesaj {
public:
Mesaj& catre(const std::string& d) { destinatar_ = d; return *this; }
Mesaj& subiect(const std::string& s) { subiect_ = s; return *this; }
void trimite() const { std::println("Către {}: {}", destinatar_, subiect_); }
private:
std::string destinatar_, subiect_;
};
int main() {
Mesaj().catre("ana@exemplu.ro").subiect("Ședința de luni").trimite();
}
Rezultat
Către ana@exemplu.ro: Ședința de luni
Greșeli frecvente
- Scrii
nume = nume;în metodă, unde parametrul și membrul au același nume. Parametrul este atribuit lui însuși, iar membrul rămâne neschimbat; scriethis->nume = nume;sau dă-le nume diferite (de exemplunume_pentru membru). - Returnezi
*thisprin valoare (Mesaj catre(...)) în loc de referință. Fiecare apel din lanț lucrează pe o copie nouă, iar modificările se pierd.
Comenzi înrudite
class: Definește un tip nou care grupează date (membri) și funcțiile care lucrează cu ele (metode); baza programării orientate pe obiecte.static: Are trei sensuri: variabilă locală care își păstrează valoarea între apeluri, membru comun al clasei sau nume vizibil doar în fișierul curent.operator: Definește ce face un operator (+, ==, <<, [], () etc.) pentru tipurile tale, ca obiectele să se folosească la fel de natural ca numerele.lambda ([](){}): O funcție fără nume, scrisă direct acolo unde e folosită; poate „captura” variabile din jur.