'šis' rādītājs programmā C++
Lai saprastu “šo” rādītāju, ir svarīgi zināt, kā objekti aplūko klases funkcijas un datu elementus.
- Katrs objekts iegūst savu datu dalībnieka kopiju.
- Pilnas piekļuves funkcija ir tāda pati kā koda segmentā.
Tas nozīmē, ka katrs objekts iegūst savu datu dalībnieku kopiju, un visiem objektiem ir viena dalībnieka funkciju kopija.
Tagad jautājums ir tāds, ka, ja eksistē tikai viena katras dalībnieka funkcijas kopija un to izmanto vairāki objekti, kā tiek piekļūti un atjaunināti pareizie datu dalībnieki?
Kompilators nodrošina netiešu rādītāju kopā ar funkciju nosaukumiem kā “this”.
Rādītājs “šis” tiek nodots kā slēpts arguments visiem nestatiskajiem dalībnieku funkciju izsaukumiem un ir pieejams kā lokāls mainīgais visu nestatisko funkciju pamattekstā. “šis” rādītājs nav pieejams statiskajās biedru funkcijās, jo statiskās biedru funkcijas var izsaukt bez objekta (ar klases nosaukumu).
X klasei šī rādītāja veids ir “X*”. Turklāt, ja X dalībnieka funkcija ir deklarēta kā const, tad šī rādītāja veids ir “const X *” (skatiet šo GFact )
C++ sākotnējā versijā ļautu mainīt “šo” rādītāju; to darot, programmētājs var mainīt objektu, pie kura metode strādāja. Šis līdzeklis galu galā tika noņemts, un tagad tas C++ ir r-vērtība.
C++ ļauj objektiem sevi iznīcināt, izsaucot šādu kodu:
delete> this> ;> |
Kā teica Stroustrups, “tas” varētu būt atsauce, nevis rādītājs, taču atsauces C++ agrīnajā versijā nebija. Ja “tas” tiek ieviests kā atsauce, no iepriekš minētās problēmas varētu izvairīties un tas varētu būt drošāks par rādītāju.
Tālāk ir norādītas situācijas, kurās tiek izmantots “šis” rādītājs:
1) Ja vietējā mainīgā nosaukums ir tāds pats kā dalībnieka nosaukums
#include> using> namespace> std;> > /* local variable is same as a member's name */> class> Test> {> private> :> > int> x;> public> :> > void> setX (> int> x)> > {> > // The 'this' pointer is used to retrieve the object's x> > // hidden by the local variable 'x'> > this> ->x = x;>> |