Struktur dan kelas OPERASI FILE

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 2008 | Direktorat Pembinaan SMK 481 { 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 di compile, ternyata error muncul. Error tersebut muncul karena class tidak dikenal dalam main. Kesalahan ini sekaligus menunjukkan perbedaan dengan struktur. Agar program di atas dapat dicompile, ditambahkan perintah public diikuti dengan tkita titik dua :, sehingga programnya menjadi: Program 14.6 include conio.h include iostream include string.h using namespace std; class siswaSMK { char nis[ 12 ]; char nama[ 25 ]; int umur; }; void main { siswaSMK siswakls3; strcpysiswakls3.nis, 95514060 ; strcpysiswakls3.nama, suprapto ; siswakls3.umur = 20 ; 482 Direktorat Pembinaan SMK | 2008 cout siswakls3.nis endl; cout siswakls3.nama endl; cout siswakls3.umur endl; getch; return ; } Perintah PUBLIC menyatakan bahwa perintah-perintah yang ada di bawahnya dapat diakses diluar class. Perintah PUBLIC merupakan termasuk access specifier penentu akses. Selain PUBLIC, terdapat perintah lain yang termasuk access specifier, yaitu PRIVATE. Program 14.7 include iostream include conio.h include string.h using namespace std; class siswaSMK { private: char nis[ 12 ]; char nama[ 25 ]; int umur; }; int 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 dicompile, error yang sama dengan sebelumnya muncul yaitu class tidak dapat diakses di main. Perintah PRIVATE memberi pengertian bahwa perintah yang ada dibawahnya hanya dapat diakses dalam class tersebut, yang dalam hal ini adalah class siswaSMK. variabel 2008 | Direktorat Pembinaan SMK 483 nis, nama, dan umur dalam class siswaSMK disebut data anggota. Selain data anggota, kita juga dapat menambahkan fungsi anggota. Program 14.7 include iostream include conio.h include string.h using namespace std; class siswaSMK { private : char nis[ 12 ]; char nama[ 25 ]; int umur; public : void inisialisasichar NISSIS, char NAMASIS, int UMURSIS { strcpynis, NISSIS; strcpynama, NAMASIS; umur = UMURSIS; } void tampilkan { cout nis endl; cout nama endl; cout umur endl; } }; void main { siswaSMK siswakls3; siswakls3.inisialisasi 95514060 , Suprapto , 20 ; siswakls3.tampilkan; } Pada program di atas, fungsi inisialisasi dan tampilkan merupakan fungsi anggota dari class siswaSMK. Keduanya dibuat public karena akan diakses dari luar class, sedangkan data anggotanya nis, 484 Direktorat Pembinaan SMK | 2008 nama, umur dibuat private. Mungkin Kita berpikir mengapa program terakhir terlalu panjang, padahal akan diperoleh hasil yang sama dengan program sebelumnya. Program 14.8 include iostream.h include conio.h include string.h class sis { private : char nis[12]; char nama[25]; int umur; public : void inisialisasichar NISSIS,char NAMASIS,int UMURSIS; void tampilkan; }; void main { sis siswakls3; siswakls3.inisialisasi95514060,Suprapto,20; siswakls3.tampilkan; } void sis::inisialisasichar NISSIS, char NAMASIS, int UMURSIS { strcpynis, NISSIS; strcpynama, NAMASIS; umur = UMURSIS; } void sis::tampilkan { cout nis endl; cout nama endl; cout umur endl; } 2008 | Direktorat Pembinaan SMK 485 Cara kedua inilah yang sering dipilih oleh para programmer C++. Berikut ini contoh-contoh program yang memanfaatkan class Program 14.9. Menyimpan data n siswaSMK kemudian menampilkannya. include iostream.h include conio.h include stdlib.h class siswaSMK { public: char nis[20]; char nama[50]; int umur; void tampilkanchar NISSIS, char NAMASIS, int UMURSIS { cout NIS SIS : NISSIS endl; cout NAMA SIS : NAMASIS endl; cout UMUR : UMURSIS endl; } }; void main { siswaSMK siswakls3[50]; tipe data array char temp[10]; int n, i; clrscr; cout ENTRI DATA SISWASMK D3 endl; cout endl; cout Jumlah siswaSMK : ; cin.getlinetemp, sizeoftemp; n = atoitemp; for i=0;i=n‐1;i++ { cout DATA ‐ i+1 endl; cout NIS SISWASMK : ; cin.getlinesiswakls3[i].nis, sizeofsiswakls3[i].nis; cout NAMA SISWASMK : ; cin.getlinesiswakls3[i].nama, sizeofsiswakls3[i].nama; cout UMUR : ; cin.getlinetemp, sizeoftemp; 486 Direktorat Pembinaan SMK | 2008 siswakls3[i].umur = atoitemp; cout endl; } tampilkan semua data cout ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ endl; cout DATA YANG MASUK endl; cout ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ endl; for i=0;i=n‐1;i++ { cout DATA SISWASMK i+1 endl; siswakls3[i].tampilkansiswakls3[i].nis, siswakls3[i].nama, siswakls3[i].umur; cout endl; } getch; }

14.5. Constructor dan destructor

Objek biasanya memerlukan inisialisasi variabel atau menentukan memori dinamik selama proses untuk mencapai hasil akhie yang diharapkan dan menghindari pengembalian nilai yang tidak diharapkan. Untuk mengatasinya dapat digunakan fungsi spesial: constructor, yang dapat dideklarasikan dengan pemberian nama fungsi dengan nama yang sama untuk class. Fungsi dari constructor ini akan dipanggil secara otomatis ketika instance baru dari sebuah class dibuat. Pehatikan contoh program dibawah ini: Program 14.10 include iostream class CRectangle { int width, height; public: CRectangle int,int; int area void {return widthheight;} }; CRectangle::CRectangle int a, int b { width = a; height = b; } 2008 | Direktorat Pembinaan SMK 487 int main { CRectangle rect 3,4; CRectangle rectb 5,6; cout rect area: rect.area endl; cout rectb area: rectb.area endl; } Keluaran program diatas adalah sebagai berikut: rect area: 12 rectb area: 30 Hasil dari contoh diatas sama seperti contoh sebelumnya. Dalam hal ini, hanya menggantikan fungsi set_values, yang sudah tidak ada dengan class constructor. Perhatikan cara parameter diberikan ke constructor pada saat instance class dibuat: CRectangle rect 3,4; CRectangle rectb 5,6; Destructor berfungsi kebalikan dari construktor. Secara otomatis akan dipanggil jika objek di keluarkan dari memory, ataupun karena keberadaannya telah selesai misalnya: jika didefinisikan sebuah objek local dalam function dan function tersebut selesai atau karena merupakan objek yang secara dinamis ditetapkan dan dikeluarkan dengan menggunakan operator delete. Destuctor harus mempunyai nama yang sama dengan class, diberi awalan tile ~ dan tidak mengembalikan nilai. Untuk lebih jelasnya perhatikan contoh dibawah ini: Program 14.11 include iostream.h class CRectangle { int width, height; public: CRectangle int,int; ~CRectangle ; int area void {return width height;} }; CRectangle::CRectangle int a, int b { width = new int; height = new int; width = a; height = b; } CRectangle::~CRectangle { delete width;