Setiap objek dari suatu kelas memiliki sendiri salinan anggota data
dari kelas tersebut. Namun, hanya ada satu salinan anggota fungsi untuk
objek-objek dari kelas tersebut. Dengan kata lain, jika ada dua objek dari
suatu kelas yang memanggil salah satu fungsi anggota kelas tersebut maka kedua
objek akan menjalankan rangkaian instruksi yang terletak pada lokasi memori
yang sama, tetapi anggota data yang diakses oleh fungsi anggota tersebut terletak
pada dua lokasi memori yang berbeda.
Untuk menangani hal di atas, setiap function member secara implisit
memperoleh argument (parameter aktual) tersembunyi berupa pointer ke objek (implicit
this pointer). Jika pointer this ini akan digunakan di dalam fungsi anggota Push
di atas, setiap pengaksesan terhadap data anggota (maupun fungsi anggota) kelas
Stack dapat diawali dengan `this->'.
void Stack::Push
(int item) {
// . . .
this->data
[this->topStack] = item;
this->topStack++;
// . . .
}
Dalam contoh berikut di atas, perhatikanlah bahwa parameter formal item
tidak dapat dituliskan sebagai this->item karena bukan merupakan anggota
kelas Stack.
Pointer this merupakan sebuah rvalue sehingga ekspresi assignment
terhadap this dalam
contoh berikut tidak
diijinkan:
this
= ...; // ruas kanan diisi
suatu ekpresi
Mengapa ada this
pointer?
·
Pointer
implisit this untuk kelas X, dideklarasikan sebagai X* this, dan digunakan untuk
mengakses member di dalam kelas tersebut
·
Pointer this
dapat juga digunakan memberikan return value yang berjenis kelas tersebut (misalnya
fungsi operator).
0 komentar:
Posting Komentar