DARI STRUKTUR KE KELAS Kelas merupakan struktur data dari objek. Perbedaan utama dengan struktur terletak pada kata kunci pendeklarasian yaitu struct untuk struktur dan class untuk kelas. Untuk lebih jelasnya kita bandingkan program berikut ini : Program struktur StrukturMhs.cpp struct Mhs ; data.nim = 123; strcpy(data.nama, "Nanang"); strcpy(data.alamat, "Jogja"); cout <<"Nim = " << data.nim << endl; cout <<"Nama = " << data.nama << endl; cout <<"Alamat = " << data.alamat << endl; Out put : Nim = 123 Nama = Nanang Alamat = Jogja Program kelas ClassMhs.cpp ; // Pendefinisian obyek data.nim = 123; strcpy(data.nama, "Nanang"); strcpy(data.alamat, "Jogja"); cout <<"Nim = " << data.nim << endl; cout <<"Nama = " << data.nama << endl; cout <<"Alamat = " << data.alamat << endl; Out put : 1
Nim = 123 Nama = Nanang Alamat = Jogja Pendeklarasian Kelas Bentuk : Kata kunci mengawali pendeklarasian kelas ; Nama kelas Nama anggota kelas Deklarasi kelas diakhiri titik koma (;) Pendefinisian obyek Obyek Penggunaan Public Penggunaan kata public pada pendeklarasian kelas menunjukkan bahwa yang ada dibawahnya bisa diakses diluar kelas. Kata kunci pada kelas Mhs diatas disebut dengan penentu akses. Penggunaan Private Penentu akses private biasa digunakan dalam kelas untuk memproteksi anggota-anggota tertentu pada kelas, agar tidak dapat diakses diluar kelas secara langsung. Menambah Fungsi Anggota Konsep obyek pada C++ sebenarnya digunakan untuk menyatukan data dan fungsi yang mengakses data dalam suatu wadah. Selanjutnya data yang terletak dalam kelas disebut anggota data dan fungsi yang terletak dalam kelas disebut anggota fungsi. Pada pemrograman berorientasi objek data dan fungsi harus dirancang secara bersamaan. Misalkan terdapat data : Nomor induk mahasiswa Nama mahasiswa Alamat mahasiswa Diawal perancangan harus dipikirkan fungsi-fungsi dasar yang digunakan untuk mengakses ketiga data tersebut. Fungsi-fungsi anggota yang dimaksud dapat berupa : Mengisikan data Menampilkan data Kemudian juga perlu direncanakan data atau fungsi mana saja yang boleh diakses diluar obyek dan yang hanya digunakan secara internal oleh obyek itu sendiri. Dalam hal ini penentu akses public atau private yang menetukannya. 2
; void inisialisasi ( int Nim, char *Nama, char *Alamat) void info () //Fungsi utama Getch(); Pada program diatas kelas Mhs memiliki tiga buah anggota data (nim, nama, alamat) dan dua buah fungsi anggota (inisialisasi(), info()). Ketiga data anggota dinyatakan private, sehingga tidak dapat diakses diluar kelas. Namun anggota data tersebut dapat diakses oleh kedua fungsi anggota, dan semua fungsi anggota dapat diakses diluar kelas, mengingat dinyatakan dalam public. Pendefinisian anggota kelas mempunyai aturan seperti halnya fungsi biasa. void inisialisasi ( int Nim, char *Nama, char *Alamat) fungsi anggota seperti diatas dapat mengenali variabel seperi nim, nama, alamat, yang tidak lain adalah anggota data dari kelas Mhs. Mendefinisikan Beberapa Obyek Beberapa obyek dengna kelas yang sama dapat didefinisikan sebagimana pendefinisian variabel biasa. Mhs data, biodata; Contoh program : void inisialisasi ( int Nim, char *Nama, char *Alamat) void info () 3
; //Fungsi utama Mhs data,biodata; Biodata.inisialisasi(124,"Budi","Jakarta"); biodata.info(); output : Nim = 123 Nama = Nanang Alamat = Jogja Nim = 124 Nama = Budi Alamat = Jakarta Hasil diatas menunjukkan bahwa data yang terkandung pada masing-masing obyek (data dan biodata) berbeda. Alternatif Penulisan Fungsi Anggota Penulisan fungsi anggota ada dua macam, cara pertama seperti diatas, kemudian cara kedua pada kelas hanya terdapat deklarasi fungsi anggota (prototipe) dan definisi fungsi anggota ditempatkan diluar kelas. void inisialisasi ( int Nim, char *Nama, char *Alamat); void info (); ; void Mhs::inisialisasi ( int Nim, char *Nama, char *Alamat) void Mhs::info () //Fungsi utama 4
Nama Parameter dan Anggota Data Sama Pada contoh pendefinisian fungsi anggota inisisalisasi() pada kelas Mhs void Mhs::inisialisasi ( int Nim, char *Nama, char *Alamat) nama parameter (argumen) dan data yang digunakan berbeda (terletak pada huruf awalnya). Hal ini tidak akan menimbulkan kerancuan. Berbeda halnya kalau nama parameter fungsi dan nama anggota data kelas ternyata sama, seperti contoh berikut : void Mhs::inisialisasi ( int nim, char *nama, char *alamat) nim = nim; strcpy(nama,nama); strcpy(alamat,alamat); Pada penulisan diatas kompiler tidak dapat membedakan antara parameter dan anggota data kelas. Tetapi jika kode dikompilasi ternyata kompiler tidak melaporkan adanya kesalahan. Mengapa? Tidak lain adalah dengan sendirinya kompiler menganggap semua data pada fungsi anggota diatas sebagai parameter. Sehingga nama anggota data kelas menjadi tersembunyi. Perlu ditekankan disini, bahwa kalau nama anggota data kelas teryata sama dengan nama parameter, nama anggota data tetap dapat diakses. pengaksessannya dengan menggunakan operator resolusi lingkup (::), dengan format : nama_kelas::nama_anggota_data; sehingga fungsi inisialisasi() dapat ditulis : void Mhs::inisialisasi ( int nim, char *nama, char *alamat) Mhs::nim = nim; strcpy(mhs::nama,nama); strcpy(mhs::alamat,alamat); Contoh program : void inisialisasi ( int nim, char *nama, char *alamat); void info (); ; void Mhs::inisialisasi ( int nim, char *nama, char *alamat) Mhs::nim = nim; strcpy(mhs::nama,nama); strcpy(mhs::alamat,alamat); void Mhs::info () 5
//Fungsi utama Nilai Balik Fungsi Anggota Fungsi anggota juga bisa mempunyai nilai balik : #include <iomanip.h> class Tanggal int tanggal; int bulan; int tahun; void beri_tanggal(int tanggal, int bulan, int tahun); void info(); int info_tanggal() return tanggal; ; int info_bulan() return bulan;; int info_tahun() return tahun;; ; Tanggal tanggal_lahir; tanggal_lahir.beri_tanggal(25,6,1991); tanggal_lahir.info(); cout << endl; cout <<"Tanggal : " << tanggal_lahir.info_tanggal() << '-' << tanggal_lahir.info_bulan() << '-' << tanggal_lahir.info_tahun(); void Tanggal::beri_tanggal(int tanggal, int bulan, int tahun) Tanggal::tanggal = tanggal; Tanggal::bulan = bulan; Tanggal::tahun = tahun; void Tanggal::info() cout << setfill('0'); cout << "Tanggal : " << setw(2) << tanggal << '/' << setw(2) << bulan << '/' << tahun << endl; cout << setfill(' '); Contoh lain : 6
private: int angka; public: void init(int Nim, char *Nama, int angka); void tampil(); char hrf(); ; Mhs data,biodata; int nomhs; char nmmhs[30];int nilangka; cin>>nomhs;cin>>nmmhs;cin>>nilangka; data.init(nomhs,nmmhs,nilangka); biodata=data; biodata.tampil(); void Mhs::init(int nim, char *nama, int angka) Mhs::nim=nim; strcpy(mhs::nama, nama); Mhs::angka=angka; void Mhs::tampil() cout<<"nim : "<<nim<<endl; cout<<"nama : "<<nama<<endl; cout<<"nilai : "<<angka<<endl; cout<<"huruf : "<<hrf()<<endl; char Mhs::hrf() if(angka>80) return('a'); else if(angka>70) return('b'); else if(angka>60) return('c'); else if(angka>50) return('d'); else return('e'); 7