Kamis, 17 September 2009

[ STATIC DATA MEMBER ]

STATIC DATA MEMBER

Sebuah class dapat mempunyai anggota berupa data atau fungsi static. Tidak seperti obyek static pada scope file maupun blok, static dalam scope class mempunyai artilinkage eksternal. Selain operator . dan operator ->, anggota class berupa data dan fungsi static dapat diakses dengan operator ::. Setiap objek di dalam kelas memiliki sendiri member datanya. Dalam keadaan tertentu diperlukan anggota data yang digunakan bersama oleh seluruh objek dari satu kelas objek tersebut. Hal ini misalnya dapat digunakan untuk menghitung jumlah objek yang sudah diciptakan.

class Stack {
public:
// … fungsi lain

private:
static int n_stack; // static data member!!
// … data & fungsi lain
};


Inisialisasi anggota statik tidak dapat dilakukan di dalam constructor, melainkan di luar deklarasi kelas dan di luar fungsi anggota. Inisialisasi anggota data yang statik dilakukan di file implementasi (X.cc), jangan di dalam file header.

// inisialisasi anggota data yang statik
// di dalam file Stack.cc
int Stack::n_stack = 0;

Anggota fungsi yang hanya mengakses anggota (data maupun fungsi) statik dapat dideklarasikan sebagai static function :

class Stack {
// …
public:
static int NumStackObj ();
};

int Stack::NumStackObj() {
// kode yang mengakses hanya data member statik
}

Untuk memahami anggota statik (fungsi maupun data) bandingkanlah dengan deklarasi variabel lokal statik berikut:

void SuatuFungsi ()
{
static int v = -1;

// … instruksi …
}
Jika atribut statik tidak digunakan, maka umur hidup dan keberadaan variabel v sepe-nuhnya bergantung pada umur hidup dan keberadaan fungsi SuatuFungsi. Dengan ditulis- kannya atribut static maka umur hidup dan keberadaan variabel v tidak lagi bergantung pada SuatuFungsi. Hanya visibility v yang ditentukan oleh SuatuFungsi. Demikian juga dengan anggota yang dideklarasikan dengan atribut static. Umur hidup dan keberadaan mereka tidak ditentukan oleh kelas yang melingkupinya. Sebagai akibatnya, pada anggota fungsi / data yang statik berlaku sifat-sifat berikut:

• Anggota fungsi statik dapat dipanggil tanpa melalui objek dari kelas tersebut, misal-nya:

if (Stack::NumStackObj() > 0) {
printf (”…..”);
}

• Anggota fungsi statik tidak memiliki pointer implisit this
• Data member yang statik diinisialisasi tanpa perlu adanya objek dari kelas tersebut

NB :

Referensi :
1.[Ellis and Stroustrup, 1990] Ellis, M. and Stroustrup, B. (1990). The Annotated C++ Re-ference Manual.
2.Addison-Wesley, Reading, MA. [Lippman, 1991] Lippman, S. (1991). C++ Primer. 2nd Edition. Addison-Welsy, Reading, MA.

Nama : Heldan Dwi S.
NPM : 0836010019
Kelas: TF - F [ Pindahan Ilmu Komputer ]

Tidak ada komentar: