Bagikan melalui


Anggota Statis (C++)

Kelas dapat berisi data anggota statis dan fungsi anggota. Ketika anggota data dinyatakan sebagai static, hanya satu salinan data yang dipertahankan untuk semua objek kelas.

Anggota data statis bukan bagian dari objek dari jenis kelas tertentu. Akibatnya, deklarasi anggota data statis tidak dianggap sebagai definisi. Anggota data dideklarasikan dalam cakupan kelas, tetapi definisi dilakukan pada cakupan file. Anggota statis ini memiliki tautan eksternal. Contoh berikut mengilustrasikan langkah-langkah ini:

// static_data_members.cpp
class BufferedOutput
{
public:
   // Return number of bytes written by any object of this class.
   short BytesWritten()
   {
      return bytecount;
   }

   // Reset the counter.
   static void ResetCount()
   {
      bytecount = 0;
   }

   // Static member declaration.
   static long bytecount;
};

// Define bytecount in file scope.
long BufferedOutput::bytecount;

int main()
{
}

Dalam kode sebelumnya, anggota bytecount dideklarasikan di kelas BufferedOutput, tetapi harus didefinisikan di luar deklarasi kelas.

Anggota data statis dapat dirujuk tanpa mengacu pada objek jenis kelas. Jumlah byte yang ditulis menggunakan BufferedOutput objek dapat diperoleh sebagai berikut:

long nBytes = BufferedOutput::bytecount;

Agar anggota statis ada, tidak perlu objek apa pun dari jenis kelas ada. Anggota statis juga dapat diakses menggunakan operator pemilihan anggota (. dan ->). Contohnya:

BufferedOutput Console;

long nBytes = Console.bytecount;

Dalam kasus sebelumnya, referensi ke objek (Console) tidak dievaluasi; nilai yang dikembalikan adalah dari objek bytecountstatis .

Anggota data statis tunduk pada aturan akses anggota kelas, sehingga akses privat ke anggota data statis hanya diizinkan untuk fungsi anggota kelas dan teman. Aturan ini dijelaskan dalam Kontrol Akses Anggota. Pengecualiannya adalah bahwa anggota data statis harus didefinisikan dalam cakupan file terlepas dari pembatasan akses mereka. Jika anggota data akan diinisialisasi secara eksplisit, penginisialisasi harus diberikan definisi.

Jenis anggota statis tidak memenuhi syarat dengan nama kelasnya. Oleh karena itu, jenisnya BufferedOutput::bytecount adalah long.

Baca juga

Kelas dan Struktur