Penentu Akses C++


penentu akses

Sekarang, Anda cukup familiar dengan publickata kunci yang muncul di semua contoh kelas kami:

Contoh

class MyClass {  // The class
  public:        // Access specifier
    // class members goes here
};

Kata publickuncinya adalah penentu akses. Penentu akses menentukan bagaimana anggota (atribut dan metode) suatu kelas dapat diakses. Pada contoh di atas, anggotanya adalah public- yang artinya dapat diakses dan dimodifikasi dari luar kode.

Namun, bagaimana jika kita ingin anggota bersifat pribadi dan tersembunyi dari dunia luar?

Dalam C++, ada tiga penentu akses:

  • public- anggota dapat diakses dari luar kelas
  • private- anggota tidak dapat diakses (atau dilihat) dari luar kelas
  • protected- anggota tidak dapat diakses dari luar kelas, namun mereka dapat diakses di kelas yang diwariskan. Anda akan mempelajari lebih lanjut tentang Warisan nanti.

Dalam contoh berikut, kami menunjukkan perbedaan antara publicdan privateanggota:

Contoh

class MyClass {
  public:    // Public access specifier
    int x;   // Public attribute
  private:   // Private access specifier
    int y;   // Private attribute
};

int main() {
  MyClass myObj;
  myObj.x = 25;  // Allowed (public)
  myObj.y = 50;  // Not allowed (private)
  return 0;
}

Jika Anda mencoba mengakses anggota pribadi, terjadi kesalahan:

error: y is private

Catatan: Dimungkinkan untuk mengakses anggota pribadi suatu kelas menggunakan metode publik di dalam kelas yang sama. Lihat bab berikutnya ( Enkapsulasi ) tentang cara melakukan ini.

Tip: Merupakan praktik yang baik untuk mendeklarasikan atribut kelas Anda sebagai pribadi (sesering mungkin). Ini akan mengurangi kemungkinan Anda (atau orang lain) untuk mengacaukan kode. Ini juga merupakan bahan utama dari konsep Enkapsulasi , yang akan Anda pelajari lebih lanjut di bab berikutnya.

Catatan: Secara default, semua anggota kelas adalah privatejika Anda tidak menentukan penentu akses:

Contoh

class MyClass {
  int x;   // Private attribute
  int y;   // Private attribute
};