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 #include
#include #include <string.h> struct Mhs { int nim; char nama[35]; char alamat[25]; }; void main() { clrscr(); Mhs data; // Pendefinisian variabel 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; getch(); } Out put : Nim = 123 Nama = Nanang Alamat = Jogja
Program kelas ClassMhs.cpp #include #include #include <string.h> class Mhs { public : int nim; char nama[35]; char alamat[25]; }; void main() { clrscr(); Mhs data; // 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; getch(); } Out put : 1
Nim = 123 Nama = Nanang Alamat = Jogja
Pendeklarasian Kelas
Bentuk :
Kata kunci mengawali pendeklarasian kelas
class Mhs { public : int nim; char nama[35]; char alamat[25]; };
Nama kelas
Nama anggota kelas
Deklarasi kelas diakhiri titik koma (;) Mhs data;
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. Contoh : #include #include #include <string.h> class Mhs { private : int nim; char nama[35]; char alamat[25]; public : 2
void inisialisasi ( int Nim, char *Nama, char *Alamat) { nim = Nim; strcpy(nama,Nama); strcpy(alamat,Alamat); } void info () { cout <<"Nim = " << nim << endl; cout <<"Nama = " << nama << endl; cout <<"Alamat = " << alamat << endl; } }; void main() //Fungsi utama { clrscr(); Mhs data; // Pendefinisian variabel Data.inisialisasi(123,"Nanang","Jogja"); Data.info(); 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. Contoh : void inisialisasi ( int Nim, char *Nama, char *Alamat) { nim = Nim; strcpy(nama,Nama); strcpy(alamat,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. Contoh : Mhs data, biodata; Contoh program : #include #include #include <string.h> class Mhs { private : int nim; char nama[35]; char alamat[25]; public : void inisialisasi ( int Nim, char *Nama, char *Alamat) { nim = Nim; strcpy(nama,Nama); strcpy(alamat,Alamat); } void info () { 3
cout <<"Nim = " << nim << endl; cout <<"Nama = " << nama << endl; cout <<"Alamat = " << alamat << endl; } }; void main() //Fungsi utama { clrscr(); Mhs data,biodata; // Pendefinisian variabel Data.inisialisasi(123,"Nanang","Jogja"); Biodata.inisialisasi(124,"Budi","Jakarta"); Data.info(); biodata.info(); getch(); } output : Nim Nama Alamat Nim Nama Alamat
= = = = = =
123 Nanang Jogja 124 Budi 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. Contoh : #include #include #include <string.h> class Mhs { private : int nim; char nama[35]; char alamat[25]; public : void inisialisasi ( int Nim, char *Nama, char *Alamat); void info (); }; void Mhs::inisialisasi ( int Nim, char *Nama, char *Alamat) { nim = Nim; strcpy(nama,Nama); strcpy(alamat,Alamat); } void Mhs::info () { cout <<"Nim = " << nim << endl; cout <<"Nama = " << nama << endl; cout <<"Alamat = " << alamat << endl; } void main()
//Fungsi utama 4
{ clrscr(); Mhs data; // Pendefinisian variabel Data.inisialisasi(123,"Nanang","Jogja"); Data.info(); getch(); } Nama Parameter dan Anggota Data Sama Pada contoh pendefinisian fungsi anggota inisisalisasi() pada kelas Mhs void Mhs::inisialisasi ( int Nim, char *Nama, char *Alamat) { nim = Nim; strcpy(nama,Nama); strcpy(alamat,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 : #include #include #include <string.h> class Mhs { private : int nim; char nama[35]; char alamat[25]; public : 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
cout <<"Nim = " << nim << endl; cout <<"Nama = " << nama << endl; cout <<"Alamat = " << alamat << endl; } void main() //Fungsi utama { clrscr(); Mhs data; // Pendefinisian variabel Data.inisialisasi(123,"Nanang","Jogja"); Data.info(); getch(); } Nilai Balik Fungsi Anggota
Fungsi anggota juga bisa mempunyai nilai balik : Contoh : #include #include #include class Tanggal { private : int tanggal; int bulan; int tahun; public : 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;}; }; void main() { clrscr(); 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(); getch(); } 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 : #include 6
#include #include <string.h> class Mhs { private: int nim; char nama[35]; int angka; public: void init(int Nim, char *Nama, int angka); void tampil(); char hrf(); }; void main() { clrscr(); 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(); getch(); } void Mhs::init(int nim, char *nama, int angka) { Mhs::nim=nim; strcpy(Mhs::nama, nama); Mhs::angka=angka; } void Mhs::tampil() { cout<<"Nim : "<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