Penjelasan Static Member Variable
Static Member Variabel adalah member variabel yang menggunakan keyword static
membuat member variabel tersebut bersifat dimiliki oleh semua object.
Berbeda seperti member variabel biasa, setiap object di buat dengan class tersebut maka member variabel akan berdiri sendiri di setiap object. karena itu, jika salah satu member variabel dari sebuah object diubah nilainya maka tidak akan mempengaruhi object lainnya yang menggunakan class yang sama.
Tapi di saat suatu member variabel menggunakan keyword static
, dengan hal itu akan membuat member variabel tidak berdiri sendiri di setiap object. member variabel tersebut hanya akan ada satu dan akan dimiliki oleh class dan semua object yang menggunakan class tersebut. jadi jika melakukan perubahan nilai pada member variabel statis melalui class atau salah satu object maka akan mempengaruhi semua object yang menggunakan class tersebut.
Bentuk umum penulisan
static tipe_data identifier;
Contoh penulisan
class siswa { public: static int s_id ; };
Di atas adalah contoh penulisan dari deklarasi static member variable di dalam public akses.
Deklarasi static member variable di atas masih belum sepenuhnya bisa digunakan, deklarasi static member variable di atas hanya menyatakan kepada compiler bahwa member variable s_id
tersebut adalah static member variable.
Kita masih membutuhkan definisi dari static member variable untuk deklarasi yang kita telah didirikan di dalam class.
Contoh penulisan
int siswa :: s_id = 1 //Definisi dan Inisialisasi Static Member Variable
Di atas adalah contoh penulisan dari definsi dan inisialisasi static member variable, dilakukan dengan cukup menulis tipe data yang dipakai tanpa menggunakan static
keyword di depan tipe data, selanjutnya menggunakan scope operator di antara nama class dan member variable.
Definisi dan inisialisasi static member variable biasanya diletakan di luar class seperti halnya deklarasi global variable. definisi pada contoh di atas, kita juga dapat untuk tidak menyertakan inisialisasi, sifat static sebagai member variable masih sama seperti sifat static yang sebelumnya pernah penulis jelaskan di artikel sebelumnya. Static akan otomatis di inisialisasi menjadi 0
ketika tidak kita inisialisasi secara manual.
Contoh penulisan
int siswa::s_id; //Definisi tanpa inisialisasi
Kita juga dapat menginisialisasi static member variable di saat deklarasi static member variable di dalam class dan juga kita tidak membutuhkan untuk mendefinisi static member variable di luar class. Hal ini hanya akan terjadi jika static member variable merupakan konstanta.
Contoh penulisan
class siswa{ public: static const int s_id = 0; };
Cara mengakses Static Member Variable
Static member variable hanya ada satu dan itu berlaku ke pada semua object yang menggunakan class tersebut, dan juga static member variable akan ada walaupun belum ada object yang dibuat dari class tersebut. static member variable dapat di akses menggunakan dua cara yaitu melalui object yang menggunakan class tersebut dan dapat melalui class langsung.
Untuk mengakses Static Member Variable melalui object adalah dengan menyertakan Member Access Operator .
di antara nama object dan nama member variable.
Contoh penulisan Akses melalui Object
nama_object.s_id
Kita juga dapat mengakses langsung melalui class meskipun belum terjadinya <>instantiation. Untuk melakukanya kita membutuhkan Scope Resolution Operator ::
di antara nama class dan nama member variable.
Contoh penulisan akses melalui class
nama_class::s_id
Saat deklarasi static member variable di dalam class kita juga dapat mengikut sertakan static member variable di dalam akses specifier private atau protected. Jika kita melakukan itu kita juga akan tetap membutuhkan definisi dari static di luar class dan tidak ada yang berbeda dalam melakukan definisi static member variable. hal yang berbeda hanya kita tidak bisa mengakses static member variable melalui object maupun class).
Contoh program
#include <iostream> #include <string> using namespace std; class siswa{ public: static int s_id; int id; string nama; void setID(); void printAll(); siswa(string pnama):nama(pnama){setID();} }; int siswa::s_id=0; void siswa::setID(){ id = ++s_id; } void siswa::printAll(){ cout<<"ID = "<<id<<endl; cout<<"Nama = "<<nama<<endl; cout<<endl; } int main(){ siswa dadi("Dadi family"); siswa budi("Budi Dudi Dodi"); siswa andi("Andi Dadi Loro"); siswa william("Joko Will"); dadi.printAll(); budi.printAll(); andi.printAll(); william.printAll(); return 0; }
hmmm sebenernya lebih menarik lagi jiga di kasih lihat hasil outputnya, tapi terima kasih ilmunya 😊
hmmm sebenernya lebih menarik lagi jika di kasih lihat hasil outputnya, tapi terima kasih ilmunya 😊