2008 | Direktorat Pembinaan SMK
475
1. private , anggota class dapat
diakses dari danggota lain pada kelas yang sama atau dari class
friend.
2. protected , anggota dapat
diakses dari anggota class yang sama atau class friend , dan juga
dari anggota class turunannyaderived.
3. public , anggota dapat diakses
dari class manapun.
Default permission label : private Contoh :
class
CRectangle {
int
x, y;
public: void
set_values int,int; int
area void;
} rect;
Deklarasi class CRectangle dan object bernama rect. Class ini berisi
empat anggota: dua variable bertipe int x and y pada bagian private
karena private adalah default permission dan dua fungsi pada
bagian public : set_values dan area, dimana hanya dideklarasikan
propotype_nya.
Perhatikan perbedaan antara nama classdan nama object. Pada
contoh sebelumnya CRectangle adalah nama classcontoh, user-
defined type, dan rect adalah object dari tipe CRectangle. Sama halnya
dengan deklarasi berikut :
int a;
int adalah nama class type dan a adalah nama
objectvariable.
Program 14.1 include
conio.h include
iostream
using namespace std;
class
CRectangle { int
x, y;
public: void
set_values int,int; int
area void {return xy;}
}; void
CRectangle::set_values int a, int b {
x = a;
y = b;
}
int
main { CRectangle
rect; rect.set_values
3 ,
4 ;
cout area:
rect.area; getch;
476
Direktorat Pembinaan SMK | 2008
return ;
} Keluaran program diatas adalah sebagai berikut:
area: 12
Hal baru dari contoh diatas
adalah operator :: dari lingkup yang disertakan dalam pendefinisian
set_values. Digunakan untuk mendeklarasikan anggota dari class
diluar class tersebut. Scope operator :: menspesifikasikan class dimana
anggota yang dideklarasikan berada, memberikan scope properties yang
sama seperti jika dideklarasikan secara langsung dalam class.
Program 14.2 include
conio.h include
iostream
using namespace std;
class
CRectangle { int
x, y;
public: void
set_values int,int; int
area void {return xy;}
};
void CRectangle::set_values int a, int b {
x = a;
y = b;
}
int
main { CRectangle
rect, rectb; rect.set_values
3 ,
4 ;
rectb.set_values 5
, 6
; cout
rect area:
rect.area endl; cout
rectb area:
rectb.area endl; getch;
return ;
} Keluaran program diatas adalah sebagai berikut:
rect
area: 12 rectb area: 30
2008 | Direktorat Pembinaan SMK
477 Perhatikan pemanggilan
rect.area tidak memberikan hasil yang sama dengan pemanggilan
rectb.area. Ini disebabkan karena objek dari class CRectangle
mempunyai variable sendiri, x dan y, dan fungsi set_value dan area.
Class terdiri dari dua bagian, yaitu: Class head yaitu kata kunci
class diikuti oleh nama kelas dan Class body yaitu class yang diapit
kurung kurawal { }, diikuti tkita titik koma atau daftar deklarasi. Misalnya:
class
screen ………. ; class
screen ………. s1 , s2 ; Dalam class body ditentukan
data members, member function dan tingkat-tingkat dari information
hidding. Deklarasi untuk data members sama dengan deklarasi
untuk variabel, kecuali bahwa inisialisasi eksplisit tidak
diperbolehkan.
Perhatikan contoh dibawah ini:
class
screen { height dan width menyatakan jumlah
kolom crusor
menunjukkan posisi screen sekarang
scr menunjuk ke array heightwidth
short
height, width ; menyatakan jumlah kolom
char
crusor ; posisi screen saat ini
char
scr ; menunjuk ke array heightwidth
}; Class dapat mendefinisikan data
member berupa reference ke tipe dirinya, perhatikan contoh dibawah
ini: class
linkScreen { screen
window ; linkScreen
next ; linkScreen
prev ; };
Member functions dari suatu kelas tidak dideklarasikan di dalam class
body. perhatikan contoh dibawah ini: class
Screen { Public
:
void
home { cursor = scr ; }
void move int, int ;
char get { return cusor ;}
char get int , int ;
void checkRange int , int ;
……… };
Member function yang didefinisikan di dalam class-body secara otomatis
dianggap inline, dan member function yang lebih dari satu atau dua baris
sebaiknya didefinisikan di luar class- body. perhatikan contoh dibawah ini
478
Direktorat Pembinaan SMK | 2008
Program 14.3 include
screen.h include
iostream.h include
stdlib.h
using namespace std;
void screen :: checkRange int row , int col
validasi koordinat {
if row
1 || row height || col
1 || col width
{ cerr
Koordinat screen
row ,
col keluar batas \n
; exit ‐ 1
; }
} Member function yang didefinisikan di
luar class body, jika ingin dibuat inline harus secara eksplisit. perhatikan
contoh dibawah ini: inline
void screen :: move int r , int c
memindahkan cursor ke posisi r,c {
clockRange r,c ; koordinat sah ?
int row = r‐
1 width ;
cursor = ser + row + c‐ 1
; }
inline void screen :: move int r , int c
memindahkan cursor ke posisi r,c {
clockRange r,c ; koordinat sah ?
int row = r‐
1 width ;
cursor = ser + row + c‐ 1
; }
Member function dibedakan dari fungsi-fungsi biasa dalam hal-hal:
Member function punya hak akses
penuh ke anggota-anggota kelas yang bersifat public maupun
private. Pada umumnya, fungsi- fungsi biasa dapat di akses hanya
oleh anggota-anggota kelas yang public. Tentu saja pada umumnya
member functions suatu kelas tidak mempunyai hak akses ke
anggota-anggota non public dari kelas-kelas lainnya.
Member function didefinisikan dalam scope dari kelasnya, fungsi-
fungsi biasa didefinisikan dalam scope file.
2008 | Direktorat Pembinaan SMK
479
14.4. Struktur dan kelas
Dalam C++, tipe data struktur yang dideklarasikan dengan kata
kunci struct, dapat mempunyai komponen dengan sembarang tipe
data, baik tipe data dasar maupun tipe data turunan, termasuk fungsi.
Dengan kemampuan ini, tipe data struktur menjadi sangat berdaya
guna.
Misalnya, pada masalah ketika kita ingin membentuk tipe data
struktur yang namanya kotak. Maka dapat dideklarasikan sebagai berikut:
struct
tkotak {
double panjang;
double lebar;
}; tkotak
kotak; Untuk memberi nilai ukuran kotak
tersebut, kita dapat menggunakan perintah-perintah ini:
kotak.panjang
= 10; kotak.lebar
= 7; Untuk memberi nilai panjang dan
lebar kotak, salah satu caranya adalah seperti diatas. Cara lain untuk
memberi nilai panjang dan lebar adalah dengan membentuk suatu
fungsi. Karena fungsi ini hanya digunakan untuk memberi nilai data
panjang dan lebar suatu kotak, tentunya fungsi ini khusus milik objek
kotak, sehingga harus dianggap sebagai truktur kotak. C++ sebagai
bahasa pemrograman dapat mendefinisikan anggota tipe struktur
yang berupa fungsi. Dengan menambah fungsi tersebut, maka
struktur kotak menjadi lebih jelas bentuknya.
struct tkotak
{ double
panjang; double
lebar; void
SetUkurandouble pj, double lb {
panjang = pj;
lebar = lb;
}; };
tkotak kotak;
dengan tipe struktur kotak seperti itu, untuk memberi nilai panjang dan
lebar hanya dengan memanggil fungsi SetUkuran
kotak.SetUkuran10,7;
Selain punya ukuran panjang dan lebar, kotak juga mempunyai
keliling dan luas. Dengan demikian, kita dapat memasukkan fungsi untuk
menghitung keliling dan luas ke dalam struktur kotak. Sebagai
catatan, bahwa definisi fungsi yang menjadi anggota struktur dapat
ditempatkan di luar tubuh struktur.
Dengan cara ini maka deklarasi struktur kotak menjadi seperti berikut:
struct tkotak
{ double
panjang; double
lebar; void
SetUkurandouble pj, double lb; double
Keliling; double
Luas; };
tkotak kotak;
480
Direktorat Pembinaan SMK | 2008
Class merupakan struktur data dari obyek. Untuk menjelaskan
tentang class, lihat perbandingannya dengan struktur. Untuk lebih jelasnya
mengenai keduanya perhatikan contoh program di bawah ini:
Program 14.4 include
conio.h include
iostream include
string.h
using namespace std;
struct
siswaSMK {
char
nis[ 12
];
char
nama[ 25
];
int
umur; };
void
main {
siswaSMK siswakls3;
strcpysiswakls3.nis, 95514060
; strcpysiswakls3.nama,
Suprapto ;
siswakls3.umur =
20 ;
cout siswakls3.nis endl;
cout siswakls3.nama endl;
cout siswakls3.umur endl;
getch;
return ;
} Setelah program di atas dicompile,
error tidak ada. Berikutnya struktur di atas kita ganti dengan class,
sehingga program menjadi seperti berikut dibawah ini:
Program 14.5 include
conio.h include
iostream include
string.h
using namespace std;
class
siswaSMK