Class Private , Class Public, dan Class Protected
2008 | Direktorat Pembinaan SMK
535 Program 16.8
include cstdlib
include iostream
using namespace std;
class
Titik {
public: int X;
int Y; };
int mainint argc, char argv[]
{ Titik A;
A.X = 4
; A.Y =
6 ;
cout Absis
titik A = A.
X \n
; cout
Ordinat titik A =
A.Y \n
; system
PAUSE ;
return EXIT_SUCCESS; }
Program di atas jikalau dijalankan tidak akan terjadi
kesalahan, karena variabel X dan Y public jadi tidak ada penyembunyian
informasi information hiding. Keluaran dari program tersebut
seperti berikut: Absis
titik A = 4 Ordinat
titik A = 6 Tapi kalau bisa diubah dari luar
maka data itu terlalu berisiko ibarat sebuah rumah bisa dimasuki orang
sekehendak hati, hal ini tidak boleh terjadi. Oleh karena itu variabel
tersebut harus tetap private tetapi diberi jalan masuk apabila diperlukan
untuk diganti atau diubah nilainya. Program secara lengkapnya menjadi
include cstdlib
Program 16.9 include
iostream
using namespace std;
class
Titik {
536
Direktorat Pembinaan SMK | 2008
private: int X;
int Y; public:
void SetAbsisint x; void SetOrdinatint y;
int AmbilAbsis; int AmbilOrdinat;
};
void Titik::SetAbsisint x
{ X = x;
}
void Titik::SetOrdinatint y
{ Y = y;
}
int
Titik::AmbilAbsis {
return X; }
int
Titik::AmbilOrdinat {
return Y; }
int mainint argc, char argv[]
{ Titik A;
A.SetAbsis 4
; A.SetOrdinat
6 ;
cout Absis
titik A = A.AmbilAbsis
\n ;
cout Ordinat
titik A = A.AmbilOrdinat
\n ;
system PAUSE
;
return EXIT_SUCCESS; }
2008 | Direktorat Pembinaan SMK
537 Jadi ada dua pasang method
yang ditambahkan, satu untuk memasukkan data baik X maupun Y
yaitu lewat SetAbsis maupun SetOrdinat. Yang kedua untuk
menampilkan atau melihat variabel X ataupun Y melalui perintah
AmbilAbsis dan AmbilOrdinat. Disini terlihat bahwa pintu masuk dan
keluar melalui jalur tertentu tidak bisa langsung seperti apabila variabel di
set public. Ibarat super market disitu ada pintu masuk dan pintu keluar,
untuk mengambil barang-barang yang ada harus melalui prosedur
tidak bisa begitu saja. Dapat disimpulkan untuk mengakses data
dalam suatu class yang bersifat private bisa dengan membuat
method yang bersifat public sehingga bisa memanipulasi datavariabel yang
ada didalamnya. Contoh lain sebagai berikut:
Program 16.10 include
cstdlib include
iostream
using namespace std;
class
A {
private: int privat;
public: int umum;
int AmbilPrivat { return privat; };
void SetPrivatint data { privat = data; };
void TesA; };
void
A::TesA {
cout Keluaran
dari TesA endl;
cout Umum
= umumendl;
cout Private
= privatendl;
}
class B: public A
{
public: void TesB;
538
Direktorat Pembinaan SMK | 2008
};
void
B::TesB {
cout Keluaran
dari TesB endl;
cout Umum
= umumendl;
cout Private
= AmbilPrivatendl;
}
int mainint argc, char argv[]
{ A ContohA;
ContohA.SetPrivat 4
; ContohA.umum =
20 ;
ContohA.TesA; coutendl
Keluaran dari Main
endl; cout
Umum =
ContohA.umumendl; cout
Private =
ContohA.AmbilPrivatendlendl; B ContohB;
ContohB.SetPrivat
40 ;
ContohB.umum = 200
; ContohB.TesB;
coutendl Keluaran
dari Main endl;
cout Umum
= ContohB.umumendl;
cout Private
= ContohB.AmbilPrivatendlendl;
system PAUSE
;
return EXIT_SUCCESS; }
Dari contoh di atas dapat dilihat perbedaan pemakaian public dan
private dalam memanipulasi data di dalam class, baik dari class itu sendiri
maupun dari class turunannya. Dari class sendiri yaitu class A semua
variabel maupun method bisa diakses lansung, contoh method
TesA. Tetapi pemanggilan dari class
turunannya yaitu class B harus melalui method public-nya,
contohnya pada method TesB untuk menampilkan data harus pakai
AmbilPrivat tidak langsung variabel privat seperti TesA. Tetapi untuk
variabel umum bisa dipanggil langsung karena sifatnya public, jadi
2008 | Direktorat Pembinaan SMK
539 tidak ada beda cara pemanggilan
baik TesA maupun TesB. Sedangkan untuk pemanggilan
di main baik ContohA yang merupakan class baru dari class A,
dan Contoh B yang merupakan class baru dari class B tidak ada
perbedaan cara pemanggilan. Bisa dimengerti karena class B merupaka
turunan public dari class A. Sebenarnya masih ada satu lagi yaitu
sifat protected. Suatu class yang memproteksi data-datanya dengan
sifat protected hanya bisa diakses dari dirinya sendiri atau dari class
turunannya. Lihat contoh berikut dan bandingkan dengan sifat private yang
telah dibahas sebelumnya.
Program 16.11 include
cstdlib include
iostream
using namespace std;
class
A {
protected: int proteksi;
public: int umum;
int AmbilProteksi { return proteksi; };
void SetProteksiint data { proteksi = data; };
void TesA; };
void
A::TesA {
cout Keluaran
dari TesA endl;
cout Umum
= umumendl;
cout Private
= proteksiendl;
}
class B: public A
{
public: void TesB;
};
540
Direktorat Pembinaan SMK | 2008
void
B::TesB {
cout Keluaran
dari TesB endl;
cout Umum
= umumendl;
cout Protected
= proteksiendl;
}
int mainint argc, char argv[]
{ A ContohA;
ContohA.SetProteksi 4
; ContohA.umum =
20 ;
ContohA.TesA; coutendl
Keluaran dari Main
endl; cout
Umum =
ContohA.umumendl; cout
Private =
ContohA.AmbilProteksiendlendl; B ContohB;
ContohB.SetProteksi
40 ;
ContohB.umum = 200
; ContohB.TesB;
coutendl Keluaran
dari Main endl;
cout Umum
= ContohB.umumendl;
cout Private
= ContohB.AmbilProteksiendlendl;
system PAUSE
;
return EXIT_SUCCESS; }
Coba lihat method TesA dan TesB cara mengakses data class
sama persis variabel maupun method contoh variabel umum dan
variabel proteksi. Jadi class yang bersifat protected bisa diakses
langsung persis seperti class tersebut melalui turunannya. Bandingkan
dengan contoh sebelumnya yaitu class yang bersifat private tidak dapat
diakses langsung dari turunannya. Tetapi harus melalui method yang
bersifat public. Namun perlu dicermati cara macam ini mempunyai
kelemahan karena data tersebut seolah-olah menjadi bersifat public
meskipun dideklarasikan secara private atau protected; Untuk
mengatasi masalah semacam itu, C++ menyediakan satu keyword,
2008 | Direktorat Pembinaan SMK
541 yaitu friend. Sebuah fungsi atau class
yang dideklarasikan dengan sifat friend dapat mengakses semua
anggota class lain, baik bersifat private, protected, maupun public.