Rabu, 23 September 2009

Static

Sebuah class dapat mempunyai anggota berupa data atau fungsi static. Tidak seperti
obyek static pada scope file maupun blok, static dalam scope class mempunyai arti
linkage eksternal. Selain operator . dan operator ->, anggota class berupa data dan fungsi static dapat diakses dengan operator ::.

Anggota class berupa data static harus dinisialisasi sekali saja, diluar scope class,
yaitu dalam scope file tetapi tidak dalam file .h (header). Data static dalam scope class bukan merupakan bagian dari obyek class tersebut. Data static berlaku seperti halnya sebuah data global sebuah class, artinya hanya ada satu data static untuk semua obyek class tersebut.

Anggota class berupa fungsi static tidak mempunyai pointer this, karena hanya ada
satu fungsi static untuk semua obyek class tersebut. Tanpa pointer this, fungsi static tidak dapat mengakses anggota class lainnya yang non-static. Dengan demikian fungsi statik umumnya digunakan untuk manipulasi anggota class berupa data statik. Salah satu contoh pemakaian fungsi static adalah pola desain (design pattern) Singleton.
Sebuah class dapat menempatkan data static dalam member function maupun sebagai
anggota class seperti data member lainnya. Sebagai contoh,
class Base
{
public:
int countCalls()
{
static int count=0; //definisi static dalam member function
return ++count;
}
};
Semua class yang mewarisi (inherit) class Base tersebut juga mewarisi data static
tersebut, sehingga count akan bertambah jika countCalls() dipanggil melalui obyek
Base maupun Derived.
class Derived1 : public Base { };
class Derived2 : public Base { };
int main()
{
Derived1 d1;
Derived2 d2;
int d1_count=d1.countCalls(); //d1_count=1
int d2_count=d2.countCalls(); //d2_count=2
}

Referensi

[1]. Chuck Allison, “Code Capsules: Visibility in C”, C Users Journal vol. 12 no. 4.
[2]. Chuck Allison, “Code Capsules: Visibility in C++”, C Users Journal vol. 12 no. 4.
[3]. Bobby Schmidt, “Completing the Foundation”, C/C++ Users Journal vol. 13 no. 12
[4]. Dan Saks, “Storage Classes and Linkage”, C/C++ Users Journal vol 15 no.11
[5]. Dan Saks, “Storage Classes and Language Linkage”, C/C++ Users Journal vol 15
no.12
[6]. MSDN, Q243241 INFO: C++ Standard Noncompliance Issues with Visual C++ 6.0
[7]. MSDN, Q167748 PRB: Variable Scope in for-statement Extends Beyond Loop
[8]. G. Bowden Wise, “Statics: Schizophrenia for C++ Programmers”, ACM
[9]. Andrei Alexandrescu and Petru Marginean, “Generic: Simplify
Your Exception Safe Code”, C/C++ Users Journal C++ Experts Forum, December
1999.
[10].Bjarne Stroustrup, “The C++ Programming Language”, 3rd Edition, Addison-
Wesley, 1997

Tidak ada komentar:

Posting Komentar