Static Member pada C++

Cukup lama nggak posting tentang programming. Artikel kali ini akan menilik tentang konsep static member  pada konsep OOP di C++.

Pengertian

Dalam C++, sebuah objek dapat memiliki data statik. Apa itu data statik? Data statik adalah data / variabel anggota yang dideklarasikan / diciptakan dalam lingkup kelas namun tak terikat oleh setiap objek yang diciptakan dari kelas tersebut. Dengan kata lain data tersebut dapat dipakai bersama oleh seluruh objek yang diciptakan dari kelas yang sama.

Karena karakteristik tersebut, sebuah data statik haruslah diperlakukan khusus. Untuk menggunakan data statik, kita harus menyediakan lokasi terlebih dahulu di stack (lihat artikel tentang stack dan heap) sebelum menciptakan objek apapun. Kita dapat melakukannya dengan melakukan deklarasi variabel seperti biasa di luar lingkup kelas yang bersangkutan. Contoh:

class Kelas {

public:

static int data_statik;

};

int Kelas::data_statik = 10;

Perhatikan bahwa meskipun kita mendefinisikan anggota di luar kelas, kita harus tetap memberitahu kepada compiler tentang lingkup dari variabel tersebut. Pada contoh di atas, lingkup kelas yang dimaksud adalah kelas:: yang artinya variabel statik data_statik merupakan anggota Kelas.

Setiap objek yang tercipta dapat memanipulasi data_statik seperti halnya memanipulasi data anggota kelas lainnya. Tak ada perlakuan khusus untuk manipulasi.

Ketika sebuah objek dari Kelas diciptakan, secara otomatis ia akan dapat mengakses data_statik. Karena variabel data_statik dipakai bersama, objek kedua yang diciptakan akan merasakan dampak jika objek pertama melakukan manipulasi terhadap data_statik.

Contoh:

Kelas A;

A.data_statik = 15;

Kelas B;

cout<<B.data_statik<,endl; // mencetak data_statik, seharusnya bernilai 15

Sedikit berbeda dengan data anggota kelas lainnya, variabel statik tidak dapat diinisialisasi di dalam konstruktor. Jika diinginkan inisialisasi, proses inisialisasi harus dilakukan saat variabel dideklarasikan (di luar kelas) seperti pada contoh.

Bagaimana jika datanya berupa tipe struktur?

Ada beberapa pendekatan yang dapat dilakukan. Pertama adalah inisialisasi seluruh field secara langsung. Contoh:

class Objek {

public:

struct titik {

int x, y;

};

static titik T;

};

Object::titik Object::T = {1,2};

Jangan pusing dengan deklarasi variabel statik di atas 😀

Kita mendeklarasikan struktur bernama titik di dalam kelas Object, karena itu untuk mengacu ke tipe tersebut kita harus menyertakan lingkup yang membungkusnya. Object::titik. Dengan demikian kita dapat memberitahu compiler bahwa kita menginginkan tipe yang didefinisikan di dalam kelas Object. Hal yang sama juga terjadi pada variabel T. Variabel tersebut berada di dalam lingkup Object sehingga kita perlu menyebutkan nama kelas Object.

Nah, inisialisasi dapat dilakukan dengan cara membuat sebuah tuple. Di dalam C++ dan juga C, data jamak seperti struct sebenarnya adalah peletakan data-data ke lokasi memori yang berdekatan. Dengan menuliskan data ke dalam { } berarti kita telah membentuk data jamak. Di contoh disebutkan bahwa data jamak yang kita letakkan adalah 1 dan 2. Nah coba lihat deklarasi dari struct sebelumnya. Field yang ada di dalam adalah dua buah integer yaitu x dan y. Urutan pendeklarasian adalah x kemudian y. Dengan cara seperti di atas, kita dapat menyalin nilai 1 ke variabel x dan nilai 2 ke variabel y. Semua sesuai urutan yang telah didefinisikan di dalam struktur. Tentu saja jika definisi struktur kita adalah

struct sesuatu {

char C; int i; float f;

};

Kita dapat melakukan inisialisasi dengan cara memberikan nilai {‘A’,10, 3.14}.

Catatan, cara ini juga dapat digunakan untuk melakukan menginisialisasi tipe data struktur secara umum.

Konstanta Statis

Data statik selain berupa variabel dapat juga berupa konstanta. Deklarasi konstanta statis dapat dilakukan pada C++. Efek ini tentu saja kita memiliki suatu konstanta did alam kelas yang dapat dipakai bersama oleh setiap objek.

Salah satu keistimewaaan konstanta statis, selain ia dapat dideklarasikan dengan cara yang sama seperti mendeklarasikan variabel statis ia juga dapat diinisialisasi di dalam kelas. Benar, teman-teman tak salah membaca. Sebuah konstanta statis dapat diinisialisasi di dalam kelas. Inilah salah satu karakteristik khusus konstanta. Lalu bagaimana penulisannya? Simak aja kode berikut:

class Object {

public:

static const int X = 10;

};

Dan tentu saja kita dapat mendeklarasikannya di luar lingkup kelas. Contohnya:

class Object {

public:

static const int X;

};

const int Object::X = 10;;

Leave a comment