1. Modul Praktikum Dasar Pemrograman C++ 2010
MODUL 13
CLASS
a. Konsep Class
Dalam pemrograman berorientasi objek (OOP) class merupakan bangunan
yang menjadi cetak biru untukpembuatan objek dari class. Dalam pemrograman
terstruktur class direpresentasikan sebagai struct. Bedanya, jika struct dapat
didefinisikan di dalam atau di luar fungsi dan dipanggil secara langsung dengan
menyebutkan nama struct dan field anggotanya maka pada class pengaksesan dan
hak akses terhadap anggota-anggota classnya bergantung pada mode pengaksesan
yang diberikan terhadap class tersebut.
Class didefinisikan tepat di bawah header sebelum semua fungsi dibuat.
Secara default mode akses class bersifat private, kecuali jika didefinisikan sendiri oleh
pemrogram.
Class memiliki tiga mode pengaksesan:
1. Public
Class dengan mode pengaksesan public mengijinkan object untuk
mengakses anggota class dari luar.
Untuk lebih jelasnya perhatikan contoh class di bawah ini:
#include <cstdlib>
#include <iostream>
using namespace std;
class person //penulisan class = struct
{
public: //anggota yang bersifat public definisikan disini
char nama[15];
int usia;
void tambah_data(); //anggota class dapat berupa var dan fungsi
};
void tampilkan (person orang); //prototipe fungsi global
int main()
{
person orang; //pemanggilan class di main() = pemanggilan struct
orang.tambah_data(); //pemanggilan fungsi class di main
tampilkan(orang); //pemanggilan fungsi di luar class
system("PAUSE");
return EXIT_SUCCESS;
}
86 AndanSperrow. – UNP KEDIRI
2. Modul Praktikum Dasar Pemrograman C++ 2010
void person::tambah_data() // pemanggilan fungsi anggota class
{
printf ("Nama: "); gets (nama);
printf ("Usia: "); scanf ("%d", &usia);
}
void tampilkan (person orang) //fungsi global tanpa nilai pengembalian
{
printf ("Nama yang diinputkan: %s n", orang.nama);
printf ("Usia %s : %d tahun n", orang.nama, orang.usia);
}
Analisis:
Pada contoh program di atas class person memiliki anggota class yang dapat
diakses secara public. Anggota class person terdiri dari variabel nama dan usia
dengan tipe data char[15] dan int. Selain dua anggota class yang berupa variabel,
class person juga memiliki anggota class yang berupa fungsi, yaitu fungsi
tambah_data. Karena fungsi tambah_data bersifat public juga maka dia dapat
langsung mengakses semua variabel anggota class person yang bersifat public juga
(lihat void person::tambah_data()).
Berikutnya seperti biasa jika kita menuliskan listing program menggunakan
beberapa fungsi hal yang harus dilakukan adalah mendefinisikan prototipe fungsi
yang ada di dalam program pada baris sebelum main (lihat void tampilkan (person
orang);), namun pendefinisian prototipe tidak berlaku pada fungsi yang menjadi
anggota dari class karena prototipe fungsi telah didefinisikan di dalam class (lihat
void tambah_data(); yang berada di dalam class person).
Untuk pemanggilan fungsi yang berada di luar fungsi main() seperti biasa
kita tinggal memanggil nama fungsi dan parameternya. Perbedaan baru akan terjadi
jika kita mengakses fungsi yang merupakan fungsi anggota, karena pengaksesan
fungsi akan diperlakukan seperti field/anggota class meskipun bentuknya adalah
fungsi (lihatorang.tambah_data(); pada fungsi main()).
Untuk pendefinisian kerja fungsi yang menjadi fungsi anggota suatu class
digunakan operator skop (tanda ::). Operator skop yang terletak sebelum nama
fungsi berarti fungsi tambah_data merupakan milik dari class person sehingga
memiliki hak untuk mengakses semua anggota class person yang bersifat sama.
87 AndanSperrow. – UNP KEDIRI
3. Modul Praktikum Dasar Pemrograman C++ 2010
2. Private
Anggota class hanya dapat diakses dari anggota yang lain yang berada di
dalam class yang sama maupun friend-nya.
Perhatikan contoh program di bawah ini:
#include <cstdlib>
#include <iostream>
#include <string.h>
using namespace std;
class person
{
private:
char nama[15];
int usia;
public:
void tambah(char a[15], int &b);
void input (char *name, int age) //fungsi untuk mengakses var private
{
strcpy (nama, name);
usia=age;
}
void output();
};
int main(int argc, char *argv[])
{ person orang; char *A;
char a[15];
int b;
A=&a[0];
orang.tambah(a, b);
orang.input (A, b);
orang.output();
system("PAUSE");
return EXIT_SUCCESS;
}
void person::tambah(char a[15], int &b)
{ person orang;
printf ("Nama: "); gets (a);
printf ("Umur: "); scanf ("%d", &b);
}
void person::output()
{
printf ("Info Data Personalia n");
printf ("Nama: %s n", nama);
printf ("Usia: %d n", usia);
}
88 AndanSperrow. – UNP KEDIRI
4. Modul Praktikum Dasar Pemrograman C++ 2010
3. Protected
Anggota class dapat diakses dari anggota lain yang berada di dalam class
yang sama, friend, dan turunannya.
b. Constructor Destructor
Constructor merupakan type khusus dari suatu subroutine yang dipanggil
pada saat penciptaan objek dari suatu class. Selain bertugas mempersiapkan objek
baru constructor juga menerima parameter untuk menginisialisasi setiap anggota
variabel ketika objek baru dari sebuah class diciptakan. Nama constructor harus sama
dengan nama classnya.
Kebalikan dari constructor adalah destructor. Jika constructor dipanggil pada
saat penciptaan objek dari suatu class, destuctor dipanggil pada saat objek dari suatu
class akan dihancurkan. Pendeklarasian destructor diawali dengan tanda tilde ~
diikuti oleh nama objek yang telah di-construct.
Constructor dan destructor akan otomatis dijlnkan pada saat objek class
diciptakan. Tidak bertipe walaupun void sekalipun dan tdk punya return value.
Contoh penggunaan constructor dan destructor dalam class dapat dilihat
pada contoh program di bawah ini:
Contoh program menghitung luas persegi panjang menggunakan
constructor class:
#include <cstdlib>
#include <iostream>
using namespace std;
class Persegi_Panjang
{
private:
int pjg, lbr;
public:
Persegi_Panjang (int a,int b); //constructor class
int area ()
{
return (pjg*lbr);
}
};
89 AndanSperrow. – UNP KEDIRI
5. Modul Praktikum Dasar Pemrograman C++ 2010
Persegi_Panjang::Persegi_Panjang (int a, int b)
{
printf ("Input panjang: "); scanf ("%d", &a);
printf ("Input lebar: "); scanf ("%d", &b);
pjg = a;
lbr = b;
}
int main ()
{ int a; int b;
Persegi_Panjang luas (a,b);
printf("luas persegi: %d n" , luas.area());
system("PAUSE");
return EXIT_SUCCESS;
}
Analisis:
Pada program penghitung luas persegi panjang di atas class Persegi_Panjang
memiliki constructor class yang berfungsi menginisialisasi data input ke dalam
variabel pjg dan lbr yang memiliki hak akses private. Oleh fungsi area data yang
diinputkan user akan dihitung luasnya dan nilai hasilnya akan dikembalikan ke dalam
fungsi area dengan nilai return bertipe integer.Pada fungsi main() kegiatan yang
dijalankan berupa pemanggilan constructor class dan meminta hasil perhitungan luas
untuk ditampilkan.
Contoh program menghitung luas persegi panjang menggunakan
constructor dan destructor class:
#include <cstdlib>
#include <iostream>
#include <conio.h>
using namespace std;
class Persegi_Panjang
{
private:
int *width, *height; //jika variabel akan di-destroy pada akhir program
//maka var dilewatkan sebagai var pointer
public:
Persegi_Panjang (int a,int b);
~Persegi_Panjang();
int area ()
{ return (*width * *height); } //jika pake destructor
};
90 AndanSperrow. – UNP KEDIRI
6. Modul Praktikum Dasar Pemrograman C++ 2010
Persegi_Panjang::Persegi_Panjang (int a, int b)
{
printf ("Input panjang: "); scanf ("%d", &a);
printf ("Input lebar: "); scanf ("%d", &b);
//jika pake constructor dan destructor
//width dan height dilewatkan sebagai pointer
//sehingga perlu dibuat inisialisasi memory dinamic dengan new
width=new int;
height=new int;
*width=a;
*height=b;
}
//destructor akan otomatis dijalankan tanpa harus dipanggil
//oleh fungsi main()
Persegi_Panjang::~Persegi_Panjang()
{
//proses penghancuran variabel pointer width dan height
delete width;
delete height;
printf ("variabel panjang dan lebar telah dihancurkan n");
//lihat isi variabel panjang dan lebar setelah proses destruct
printf ("Isi panjang: %d n Isi lebar: %d n", width, height);
getch();
}
int main ()
{ int a; int b;
Persegi_Panjang rect (a,b);
printf("luas persegi: %d n" , rect.area());
}
Analisis:
Listing program diatas sebenarnya sama dengan contoh program
sebelumnya, perbedaannya hanya pada penggunaan destructor yang digunakan
untuk menghapus space memory yang digunakan untuk menyimpan data width dan
height. Constructor dan destructor class didefinisikan di dalam class Persegi_Panjang
dan bersifat public.
91 AndanSperrow. – UNP KEDIRI
7. Modul Praktikum Dasar Pemrograman C++ 2010
Jika pada contoh program sebelumnya variabel pjg dan lbr didefinisikan
sebagai tipe data dasar maka berbeda dengan contoh program diatas pendefinisian
variabel private width dan height menggunakan variabel pointer. Hal ini dilakukan
karena variabel yang dapat di-destroy hanya variabel yang bersifat dinamis semisal
pointer sehingga pada saat penciptaan class yang di dalamnya berisi proses input
data, alamat variabel a dan b akan ditangkap oleh pointer width dan height setelah
pengalokasian memory dilakukan.
Proses destructor class akan dijalankan secara otomatis oleh program untuk
membebaskan kembali memory yang dipakai untuk menyimpan nilai width dan
height ke dalam heap sehingga memory kosong dapat digunakan untuk kegiatan
komputasi yang lain.
Pada program di atas, perintah: printf ("Isi panjang: %d n Isi lebar: %d n",
width, height);hanya untuk menguji nilai width dan height setelah isi variabel width
dan height dibebaskan sehingga hasil outputnya dapat berupa alamat acak di
memory dan akan menghasilkan nilai yang berbeda pada tiap PC tergantung ruang
kosong yang diakses variabel di memory.
TUGAS:
1. Bagaimana listing program pada contoh 1 diatas jika proses input dilakukan pada
saat class diciptakan? (clue: gunakan constructor class untuk inisialisasi dan input
data)
2. Modifikasi listing program no.1 sehingga pada saat akhir proses dilakukan
pembebasan memory.
3. Tambahkan fungsi untuk menghitung masa produktif user jika masa produktif
seseorang mulai menurun pada usia 40 tahun. Tampilkan pesan “Usia produktif
Anda telah berakhir n tahun yang lalu ” jika usia yang diinputkan >40 tahun, dan
minta user untuk mengulang input usia jika usia yang diinputkan <5 atau >99.
92 AndanSperrow. – UNP KEDIRI