Pemrograman C++ BAGIAN II PEMROGRAMAN BERORIENTASI OBJEK

dokumen-dokumen yang mirip
KELAS DAN OBJEK KELAS

PEMROGRAMAN BERORIENTASI OBJEK KONSEP PBO

PEMROGRAMAN BERORIENTASI OBJEK STRUCTURE & CLASS

PEMROGRAMAN BERORIENTASI OBJEK OBJECT

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LABSHEET ALGORITMA DAN STRUKTUR DATA

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LABSHEET ALGORITMA DAN STRUKTUR DATA

Inheritance dan Polimorfisme

Inheritance dan Polimorfisme

Object Oriented Programming LOGO

MODUL PEMOGRAMAN WEB II STMIK IM BANDUNG MODUL PEMOGRAMAN WEB II. Oleh: CHALIFA CHAZAR. Chalifa Chazar edu.script.id

MODUL PEMOGRAMAN WEB II STMIK IM BANDUNG MODUL PEMOGRAMAN WEB II. Oleh: CHALIFA CHAZAR. Chalifa Chazar edu.script.id

Pointer dan Referensi

Pemrograman Berorientasi Objek / Object Oriented Programming / (OOP) Nur Hasanah, M.Cs

Pertemuan 11 Object Oriented Program

PEMROGRAMAN BERORIENTASI OBJEK

Pemrograman Berorientasi Obyek (C++) Departemen Ilmu Komputer FMIPA IPB 2013

Michael Lionardi

KARAKTERISTIK PEMROGRAMAN BERORIENTASI OBJEK (OOP) Pemrograman berorientasi Objek mempunyai karakterisitik sebagai berikut:

BAB VI OBYEK DAN KELAS

BAB VI OBYEK DAN KELAS

MINGGU VI : PBO (LANJUTAN)

STRUKTUR DENGAN ARRAY DAN FUNCTION

Object Oriented Programming (Class, Inheritance, Encapsulation dan Interface)

Praktikum Minggu VI 1 dan 2 Dasar-dasar Object Oriented Programming PHP

TAMBAHAN MATERI BAB 15 BUKU DIKLAT PEMROGRAMAN KOMPUTER 2

BAB X. Struct Dalam C++, kita dapat membuat sebuah tipe data baru. Maka penulisan variabel baru kita akan menjadi:

Paradigma Pemrograman Berorientasi Objek

PERTEMUAN 2 PEMOGRAMAN BERORIENTASI OBJEK L/O/G/O

PEWARISAN D E W I S A R T I K A, M. K O M

Konsep Pemrograman Berbasis Obyek

Kurikulum Qt. Chapter 4 Function. Fungsi

Pemrograman I Bab III Tipe Data, Variabel, dan Operasi Perhitungan. Adam Mukharil Bachtiar, S.Kom. Universitas Komputer Indonesia

Konsep Array dalam PBO

OBJECT ORIENTED PROGRAMMING DENGAN PHP. Janitra Panji

SEKOLAH TINGGI MANAJEMEN INFORMATIKA & KOMPUTER JAKARTA STI&K SATUAN ACARA PERKULIAHAN

PEWARISAN SIFAT OBYEK

Komentar, Identifier, Konstanta dan Variabel

BAB 12 PEWARISAN SIFAT OBJEK

MODUL 1. CLASS, OBJECT, CONSTRUCTOR DAN METHOD

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LABSHEET ALGORITMA DAN STRUKTUR DATA

Encapsulation (Encapsulasi) Minggu 5 Pemrograman Berorientasi Objek Alfa Faridh Suni

KONSEP Pemrograman Berorientasi Objek KARMILASARI

SEKOLAH TINGGI MANAJEMEN INFORMATIKA & KOMPUTER JAKARTA STI&K SATUAN ACARA PERKULIAHAN

Kurikulum Qt. { Basic OOP } Chapter 4. Function

BAHASA PEMROGRAMAN. Untuk SMK. Kadarisman Tejo Yuwono Totok Sukardiyono Adi Dewanto. : Ratu Amilia Avianti. Perancang Kulit

Pemograman Berorientasi Objek. Week 3 Abstrak dan Interface dalam suatu kelas

Class. Object. Object Oriented Programming (OOP) Object Oriented Programming (OOP)

C#, Programming, Object-oriented. Pengenalan C# Erick Pranata. Edisi I

PERTEMUAN III OBJEK DAN CLASS TUJUAN PRAKTIKUM

Bab 8. Dasar-Dasar OOP

Pemrograman Berorientasi Objek Dengan PHP5

MODUL 1. Class, Object, Constructor dan Method

PEMROGRAMAN JAVA. Yoannita, S.Kom. Class & Method sederhana Konsep Pemrograman Berorientasi Objek. Company LOGO

MINGGU IV : PEMROGRAMAN BERORIENTASI OBJEK

ALGORITMA DAN PEMROGRAMAN 2. 3 SKS By : Sri Rezeki Candra Nursari

ABSTRACTION, ENCAPSULATION, INHERITANCE & POLYMORPHISM

Kurikulum Qt. Chapter 8 - Polymorphism. Polimorfisme. Problema Pewarisan Tunggal (Single Inheritance)

Pewarisan Sifat Objek. Nur Hasanah, M.Cs

Modul II Object Oriented Programming

MODUL 1 PENGENALAN OOP

Sebagai contoh misalnya akan dibuat kelas turunan Silinder dari kelas dasar Lingkaran, maka dapat dituliskan :

Program pendek dan simple = mudah dihandle. Program besar, banyak dan kompleks = tidak

BAB IV HASIL PENELITIAN DAN PENERAPAN

Object OrientedProgramming

PRAKTIKUM 12 POINTER 2

Modul I Mengenal Pemrograman Delphi

int fungsi_2() { int main() { fungsi_1(); fungsi_2(); return 0;

Sekilas C DAN C++ DISUSUN OLEH. Sebuah bahasa, yaitu: 1. Bahasaa tingkat tinggi. High. dapat. lunak

Algoritma Pemrograman 2B (Pemrograman C++)

Konsep Dasar Pemrograman Dan Pengenalan C++

PEMROGRAMAN TERSTRUKTUR II

Pemograman Berorientasi Objek. Week 4 Initialization dan Instance dalam Kelas

Praktikum. PBO (Kelas K) Oleh : MOHAMMAD SHOLIKIN

PEMROGRAMAN BERORIENTASI OBJEK. Pengulangan. Budhi Irawan, S.Si, M.T

Praktikum 4 Konsep Inheritance, Polymorphism, dan Encapsulation

BAB 1 PEMROGRAMAN BERORIENTASI OBJEK

FUNGSI II. Variabel Statis. Sifat variabel statis: Sintaks: static tipe_data nama_variabel; Contoh: static int angka;

OBJECT ORIENTED PROGRAMMINGS

Inheritance dan Kata Kunci static

Fungsi DASAR PEMROGRAMAN

ALGORITMA DAN STRUKTUR DATA POINTER DAN FUNCTION

Kurikulum Qt. Chapter 5 Pointer dan References. Agenda. Apa itu Pointer? Memory Komputer. Mengambil Alamat Memory dari Variabel

Tabel 1. Instruksi untuk menampilkan teks No. Bahasa Pemrograman Instruksi 1. Pascal WRITE ( Bahasa pemrograman itu mudah );

MODUL VI OBJECT ORIENTED PROGRAMMING (OOP)

Pengenalan OOP. Object-Oriented programming (OOP) Menitikberatkan pada konsep object sebagai elemen dasar dari program.

SL 1201 Materi tentang Fungsi

KONSEP DASAR. menyusunnya menjadi potongan-potongan mudah untuk ditangani dibanding. conquer.

Game Technology Design Course College of Multi Media Yogyakarta Spring Tri Anggraeni, S.Kom., M.Sc.

//PROGRAM 7-9. class A { A() { //PROGRAM System.out.println("Constructor dari kelas A"); // Mendefinisikan kelas abstract. abstract class A {

Bahasa Pemrograman I VB.Net. Oleh: Erik Perdana Ibrahim, S.Kom 2011

Dasar Pemrograman. Visual Studio Program C++ Sederhana. Yoannita, S.Kom.

BAB 14 OPERATOR OVERLOADING

BAB 6 POINTER DAN REFERENCE

MODUL 7 FUNGSI A. Tujuan. B. Petunjuk. C. Dasar Teori

BAB VIII SUB PROGRAM : Fungsi Tanpa Pengembalian Nilai

Class & Object 2. Imam Fahrur Rozi

E STRUKTUR DATA & E PRAKTIK STRUKTUR DATA. Pointer & Function. Alfa Faridh Suni, S.T., M.T. PTIK

Classes. class class_name { permission_label_1: member1; permission_label_2: member2;... } object_name;

IT234 ALGORITMA DAN STRUKTUR DATA FUNGSI

PENGENALAN DAN PENERAPAN OOP PADA C++

Transkripsi:

BAGIAN II PEMROGRAMAN BERORIENTASI OBJEK

BAB 10 KONSEP DASAR OOP 10.1 Pendahuluan Salah satu alasan Bjarne Stroustrup menciptakan bahasa C + + adalah untuk menambahkan kemampuan OOP (Object Oriented Programming) di dalam bahasa C, sehingga mula-mula dia menyebutnya sebagai bahasa "C dengan kelas". Mungkin dalam buku lain, Anda pernah membaca pembahasan mengenai-materi ini dengan istilah 'pemrograman berarah objek'. Namun di dalam buku ini istilah yang akan kita gunakan adalah 'OOP' dengan alasan istilah ini lebih lazim dipakai dan dikenali. OOP bukanlah sebuah bahasa pemrograman melainkan sebuah cara untuk menjadikan program yang kita buat menjadi lebih modular karena suatu permasalahan akan dikumpulkan dalam satu objek, yang selanjutnya akan disebut dengan kelas. Pembahasan lebih lanjut mengenai kelas dan objek ini baru akan diungkap pada bab selanjutnya dalam buku ini. Dengan kata lain, dalam bab ini hanya akan membahas pengenalan dan konsep dasar dari OOP sehingga Anda akan lebih mudah untuk memahami materi yang terdapat pada bab-bab selanjutnya. Bahasa C merupakan bahasa yang telah diakui keunggulannya dan penggunaannya sudah melebar di seluruh dunia. Maka dari itu, dengan kemampuan OOP yang terdapat di dalamnya, C++ tentu menjadi bahasa yang istimewa. Bab 10: Konsep-konsep Dasar OOP

Dalam C+ +, kita dapat membuat program yang bersifat modular dengan memasukkan unsur-unsur OOP, namun dibalik itu kita juga tidak meninggalkan kemampuan-kemampuan yang terdapat dalam bahasa C. Pembentukan C++ sendiri diinspirasi oleh bahasa pemrograman lain yang juga mendukung OOP, yaitu Simula67. 10.2 Pemrograman Prosedural dan OOP OOP merupakan bentuk penyederhanaan dari bahasa prosedural sehingga program akan lebih mudah dikembangkan. Dalam bahasa prosedural, untuk menyelesaikan salah satu masalah dalam program, kita harus membuat banyak fungsi yang tentunya akan memakan waktu dan konsentrasi kita. Dengan kata lain, dalam bahasa prosedural kita akan lebih difokuskan dengan 'Bagaimana cara membuat?', bukanlah 'Apa yang akan kita buat?'. Menurut sumber yang ada di buku lain, satu buah program yang ditulis menggunakan bahasa C rata-rata berisi 25.000 sampai 100.000 baris kode. Hal ini tentu akan menyebabkan program tersebut menjadi sangat kompleks dan susah untuk dipahami alurnya. Karena alasan inilah C++ diciptakan dengan tujuan dapat menyederhanakan program tersebut dengan cara memecahnya ke dalam sub-sub program yang dinamakan dengan kelas. Kelas itu sendiri kemudian dapat digunakan ulang dalam pembuatan program lain tanpa harus melakukan pengkodean ulang. Melalui cara ini, tentu kita dapat lebih berkonsentrasi ke arah pembentukan program sehingga waktu yang dibutuhkan juga akan lebih cepat. Untuk dapat lebih memahami perbedaan antara pemrograman prosedural dengan OOP, perhatikanlah gambar berikut. Datal Data2 DataN Fungsi 1Q Fungsi2Q Fungs in() Data A DataB Fungs ia() FungsiBQ Bahasa Prosedural Fungsi utamaq Objekl Objek2 OOP Fungsi utamaq Untuk mengilustrasikan hal tersebut, di bawah ini terdapat dua contoh program yang masing-masing ditulis dalam bahasa C dan bahasa C+ +. Hal ini dimaksudkan untuk melihat perbedaan yang ada pada bahasa prosedural dan OOP. a. Program yang ditulis dalam bahasa C #include <stdio.h> Kode Program 10-1 // Mendeklarasikan variabel-variabel global int A, B, C; // Membuat prototype fungsi yoid set_a(int AA); int get_a(); void set_b(int BB); int get_b{); void set_c{int CO; int get_c(); // Mendefinisikan fungsi utama int main(void) { // Melakukan pemanggilan fungsi set_a{10); set_b(20); Bab 10: Konsep-konsep Dasar OOP

set_c(30); // Menampilkan nilai printf("nilai A printf("nilai B : %d\n f printf("nilai C // Bagian implement as i dari fungsi // yang terdapat pada bagian prototype void set_a(int AA) { A = AA; int get_a{) { return A; void set_b(int BB) { B = BB; int get_b() { return B; void set_c(int CC) { C = CC; int get_c() return C;1 Hasil yang akan diberikan dari program di atas adalah sebagai Nilai A : 10 Nilai B : 20 Nilai C : 30 // Membuat kelas dengan nama class KELAS2 { int B; void set_b(int BB); int get_b(),- void show_b(); // Membuat kelas dengan nama KELAS3 class KELAS3 { int C; void set_c(int CC); int get_c(); void show_c(); // Implementasi dari fungsi yang terdapat pada KEL1 void KELAS1::set_A(int AA) { A = AA; int KELAS1::get_A() { return A; void KELAS1::show_A() { cout«"nilai A : n «A«endl; // Implementasi dari fungsi yang terdapat pada KELAS3 void KELAS2::set_B(int BB) { b. Program yang ditulis dalam bahasa C+ + #include <iostream> Kode Program 10-2 // Membuat kelas dengan nama KELAS1 class KELAS1 { int A; ; void set_a(int AA); int get_a(); void show_a(); Pemrograman int KELAS2 : : get_b ( ) { return B; void KELAS2 : : show_b ( ) { cout«"nilai B : w «B«endl; // Implementasi dari fungsi yang terdapat pada KELAS3 void KELAS3::set_C(int CC) { C = CC; int KELAS3::get_C() { return C; Bab 10: Konsep-konsep Dasar OOP

void KELAS3::show_C() cout«"nilai C : // Mendefinisikan fungsi utama // Mendeklarasikan objek OBI, OB2 dan OB3 KELAS1 OBI; // OBI bertipe KELAS1 KELAS2 OB2; // OB2 bertipe KELAS2 KELAS3 OB3; // OB3 bertipe KELAS3 // Melakukan pengesetan nilai OBl.set_A{10); OB2.set_B(20); OB3.set_C(30); // Menampilkan nilai OBI.show_A(}; OB2.show_B{); OB3.show_C(); Apabila Anda masih belum memahami program di atas karena terdapat kata kunci class, Anda tidak perlu khawatir karena semua itu akan kita bahas pad bab selanjutnya dalam buku ini. Adapun hasil yang akan diberikan dari program di atas adalah sama seperti program yang ditulis dalam bahasa C di atas, yaitu sebagai Nilai A : 10 Nilai B : 20 Nilai C : 30 Seperti yang kita lihat di atas bahwa pada bahasa C + +, kita dapat menciptakan sebuah kelas yang menyimpan data dan fungsi tertentu tanpa hams mendeklarasikan variabel global seperti yang terdapat pada program sebelumnya (dalam bahasa C). 10.3 Ciri Dasar dari OOP Semua bahasa pemrograman yang mendukung OOP haruslah mempunyai kemampuan untuk dilakukan abstraksi, pembungkusan, pewarisan sifat dan polimorfisme. Karena alasan itu, item-item di atas kemudian dijadikan sebagai ciri dari bahasa yang mendukung OOP. Adapun penjabaran dari masing-masing ciri di atas dapat Anda lihat di bawah ini. 10.3.1 Abstaksi (Abstraction) Abstraksi adalah proses pengabstrakan atau penyembunyian detail program yang sangat rumit sehingga kita tidak perlu untuk mempermasalahkan pembuatannya. Kita hanya perlu objek tersebut dapat kita gunakan sesuai fungsinya. Sebagai contoh, lihatlah sebuah objek di sekitar kita, misalnya mobil. Pembuat mobil tidak perlu mendefinisikan cara pembuatannya, di sini berarti dia telah mengabstraksikan proses yang terdapat di dalamnya. Yang penting bagi kita adalah mobil tersebut dapat kita gunakan sebagaimana mestinya. Hal ini tidaklah berbeda dengan pengabstrakan suatu fungsi yang terdapat pada sebuah kelas di dalam program. 10.3.2 Pembungkusan (Encapsulation) Pembungkusan yang dimaksud di sini adalah sebuah proses penggabungan antara data-data dan > Data Members fungsi-fungsi yang berkaitan ke dalam sebuah objek. Member Functions Dengan demikian, kita dapat membuat program yang terintegrasi, tanpa harus mendeklarasikan variabel-variabel yang bersifat eksternal. Adapun istilah yang digunakan untuk menyebut data-data yang terdapat dalam suatu objek adalah data members, sedangkan fungsi-fungsi yang terdapat di dalamnya dikenal dengan istilah member functions. Untuk lebih memahaminya, perhatikan gambar di samping ini. Bab 10: Konsep-konsep Dasar OOP

10.3.3 Pewarisan (Inheritance) Dalam OOP, kita dapat menciptakan objek bam yang diturunkan dari objek lain. Objek bam ini sering disebut dengan objek turunan (derived class) sedangkan objek induknya sering disebut dengan ancestor (base class). Sifat yang terkandung pada objek turunan adalah sifat hasil pewarisan dari sifat-sifat yang terdapat pada objek induk. Maka dari itu proses seperti ini sering dikenal dengan istilah pewarisan (inheritance). Dengan fitur seperti ini, kita dapat membuat objek bam yang memiliki kemampuan lebih dibanding objek induknya, yaitu dengan cara menambahkan sifat-sifat baru ke dalam objek tersebut. Materi pewarisan ini akan kita bahas pada bab tersendiri di dalam buku ini, yaitu bab mengenai pewarisan sifat objek. Dengan kata lain, di sini hanya mengungkap pengenalannya saja. 10.3.4 Polimorfisme (Polymorphism) Polimorfisme adalah proses kebanyakrupaan, artinya kita dapat mengimplementasikan sesuatu hal yang berbeda melalui satu cara yang sama. Untuk mengerti hal ini, coba Anda perhatikan suatu objek, misalnya penyanyi. Sebagai contoh terdapat 5 orang penyanyi (dj dalam program dianggap sebagai 5 buah objek), kemudian kelimanya kita perintahkan untuk bernyanyi, maka hasil atau implementasinya tentu akan berbeda sesuai dengan karakteristik suara dari masing-masing penyanyi tersebut. Dalam OOP, hal ini disebut dengan istilah polimorfisme. Bagian ini akan kita bahas lebih detil melalui bab tersendiri, yaitu bab tentang fungsi virtual dan polimorfisme. BAB 11 KELAS DAN OBJEK 11.1 Pendahuluan ^ov Kelas dibuat untuk merepresentasikan sebuah objek tertentu sehingga akan membantu dalam proses penyelesaian masalahmasalah kompleks. Apabila kita amati, pendefinisian sebuah kelas itu sebenarnya sama saja dengan pembuatan tipe data baru. Sebagai contoh, kita dapat membuat tipe-tipe yang berkaitan dengan suatu objek, seperti mobil, rumah, karyawan dan banyak lagi lainnya. Kita bisa saja menggunakan tipe data dasar seperti int dan char tanpa membuat sebuah kelas, namun hal itu tentu akan menyulitkan dalam proses penulisan kode program. C++ menawarkan sebuah metode baru yang tidak dimiliki oleh bahasa C, yaitu kemampuan untuk melakukan pembungkusan datadata dan fungsi-fungsi tertentu yang saling berkaitan dengan suatu objek ke dalam satu kelas khusus. Sebagai contoh, kita akan membuat kelas mobil, maka semua data dan kelakuan-kelakuan yang dimiliki oleh mobil akan dibungkus ke dalam kelas tersebut.

11.2 Apaltu Kelas? Seperti yang telah disinggung sebelumnya bahwa kelas adalah bentuk penyederhanaan dari suatu permasalahan yang berkaitan dengan objek. Maka dari itu kelas dapat didefinisikan sebagai sesuatu yang mempunyai data (sifat) dan fungsi (kelakuan). Apabila sebelumnya Anda pernah mempelajari bahasa pemrograman visual seperti C + +Builder, Delphi, Power Builder, Visual Basic dan yang lainnya, Anda tentu akan selalu berhubungan dengan kelas. Namun data-data yang terdapat di dalam kelas tersebut akan dinamakan property sedangkan fungsifungsinya akan dinamakan method. Anda tidak perlu bingung karena ini hanya masalah penamaan saja, namun konsep yang terdapat di dalamnya adalah sama. Kelas masih bersifat abstrak, maka dari itu kita harus melakukan instansiasi dari kelas tersebut, selanjutnya instance (contoh nyata atau perwujudan) dari kelas tersebut juga sering dinamakan dengan objek. Sebagai contoh, manusia adalah suatu kelas, maka instance atau objek dari kelas manusia adalah Udin, Dewi, Sandra dan yang lainnya. 11.3 Membuat Kelas Dalam C + +, kelas dibuat dengan menggunakan kata kunci class. Adapun bentuk umum pembuatannya adalah seperti tampak di bawah ini. class nama_kelas { access_specifieri * da t a_jmembers/ member functions; a.ccess specifier21 da ta_jtnembers / member_functions; Untuk mendefinisikan atau membuat implementasi fungsi-fungsi yang terdapat dalam sebuah kelas, kita menggunakan operator : :. Berikut ini bentuk umum dari pendefinisian fungsi tersebut. tipe_data nama_kelas::nama_fungsi(daftar_parameter) Statemen yang akan dllakukan; Sedangkan untuk mengakses data atau fungsi yang terdapat di dalam kelas tersebut, kita menggunakan tanda titik. Berikut ini bentuk umum dari proses pengaksesan data atau fungsi dari sebuah kelas. nama^instance.data '- -B^PppppH^ atau nama_instance.nama_ ungai Cda tar_parainete Untuk lebih memahaminya, berikut ini contoh program yang di dalamnya terdapat pembuatan sebuah kelas. firiclude <iostream> Kode Program 11-1 ; void set_x(int XX); // Mendeklarasikan fungsi set_x int get_x(); // Mendeklarasikan fungsi get_x // Bagian implementasi dari fungsi set X void CONTOH::set_X(int XX) { // Bagian implementasi dari fungsi get X int CONTOH: :get._x() { return X; // Fungsi utama // Membuat instance dari kelas CONTOH dengan nama ob CONTOH ob; // Mengakses fungsi set_x yang terdapat pada kelas CONTOH :ob.set_x(100) ; -// Mengakses fungsi get_x yang terdapat pada kelas CONTOH cout«ob. get_x () ;

100 11.4 Constructor dan Destructor Constructor adalah sebuah fungsi khusus yang otomatis akan dipanggil setiap kali melakukan instansiasi terhadap suatu kelas. Constructor digunakan untuk melakukan inisialisasi nilai dari datadata yang terdapat di dalam kelas bersangkutan. Sama halnya seperti fungsi biasa, pada contructor juga dapat ditambahkan parameter ataupun dilakukan overload. Namun perlu diperhatikan bahwa nama dari constructor haruslah sama dengan nama kelasnya dan tidak memiliki tipe kembalian (tidak juga void). Berikut ini contoh program yang di dalamnya terdapat pembuatan kelas dengan menggunakan sebuah constructor. #include <iostream> // Membuat kelas dengan nama. CONTOH // Membuat constructor CONTOH () { X = 10; // Melakukan inisialisasi nilai X dengan nilai H // Membuat member function void ShowXO { cout«"nilai X : n «X«endl; int main O { // Melakukan instansiasi terhadap kelas CONTOH // dengan nama instance O CONTOH.O; // Memanggil fungsi 0.ShowX() Program di atas akan merhberikan hasil seperti yang tampak di bawah ini. Nilai X : 10 Seperti yang telah dikemukakan sebelumnya bahwa4*%js8gfi&jlapat melakukan overload terhadap fungsi constructor?'- Eteip;^ ini program yang merupakan pengembangan dari program di atas dimana di dalamnya terdapat dua buah fungsi constructor. # i nc 1 ude < i o s t r eam> Kode Program 11-3 // Membuat kelas dengan nama CONTOH public : // Membuat constructor tanpa parameter CONTOH ( ) { X = 10; // Melakukan inisialisasi nilai X dengan nilai 10 // Membuat constructor dengan menggunakan satu parameter CONTOH(int XX) { X = XX?.// Membuat member function void ShowXO { cout«"nilai X : "«X«endl; Lnt main () { // Melakukan instansiasi terhadap kelas CONTOH s// dengan nama instance 0 CONTOH 0; // Melakukan instansiasi terhadap kelas CONTOH //dengan nama instance P CONTOH P(200);

I// Memanggil fungsi Sh O.ShowXO ; P.ShowX(); ) ^ i Nilai X : 10 Nilai X : 200 Cara lain yang banyak digunakan pada C + + standar untuk membuat constructor adalah dengan menggunakan bentuk seperti berikut. Class CONTOH { "irit.x; int Y;..// Inisialisasi X=10 dan Y-0 CONTOH() : X(10), Y(0) { } // Nilai inisialisasi X dan Y diambil dari parameter" CONTOH(int XX, int YY) : X(XX) Y(YY) { } // Deklarasi fungsi-fungsi lainnya... Untuk lebih memahaminya, coba Anda perhatikan contoh program di bawah ini yang merupakan modifikasi dari program sebelumnya. Di sini kita akan membuat constructor menggunakan bentuk kedua yang baru saja kita bahas. ttinclude <iostream> Kode Program 11-4 // Membuat kelas dengan nama CONTOH : // Membuat constructor tanpa parameter CONTOH() : X(10) { " ; // Membuat constructor dengan menggunakan satu parameter CONTOH(int XX) :;X(XX) { ' Pemrograman C+^ // Membuat member function void ShowX(} { COut«"Nilai X : "«X«end int main () { // Melakukan instansiasi terhadap kelas CONTOH // dengan nama instance O CONTOH 0; // Melakukan instansiasi terhadap kelas CONTOH // dengan nama instance P CONTOH P(200); // Memanggil fungsi ShowX 0.ShowX(); P.ShowX(); return Jika dijalankan, program di atas akan memberikan hasil yang sama seperti program sebelumnya. Setelah mengetahui pengertian constructor, sekajang kita akan membahas tentang destructor. Destructor sendiri adalah fungsi yang merupakan kebalikan dari constructor, yaitu berguna untuk menghancurkan atau membuang sebuah objek (kelas) dari memori. Fungsi ini juga akan dipanggil secara otomatis ketika program telah selesai dijalankan. Adapun nama dari destructor adalah sama seperti nama kelas maupun nama constructor, hanya di depannya ditambahkan tanda tilde (' '). Destructor juga tidak memiliki tipe kembalian (tidak juga void). Berikut ini contoh program yang menunjukkan penggunaan destructor. #include <iostream> Kode Program 11-5 // Membuat kelas dengan nama CONTOH int *X; // Membuat constructor CONTOH(int XX) {

// Membuat dest ~CONTOH() { delete X; void ShowX() { cout«"nilai X // Fungs! utama CONTOH 0(10); 0. ShowXO ; // Memesan ruang mernori r // Menghapus pointer X; «*X«endl; I ^VIMHMHHHHHHHHi Apabila dijalankan, program di atas akan memberikan hasil seperti Nilai X : 10 Tampak pada sintaks program di atas bahwa kita mengalokasikan sebuah pointer di dalam constructor dari kelas CONTOH. Maka dari itu, di dalam destructor kita harus melakukan dealokasi terhadap memori yang telah dipesan tersebut. 11.5 Tingkat Akses Sejauh ini kita telah banyak menggunakan kata kunci public dalam pendefinisian kelas-kelas di atas tanpa mengetahui apa arti yang terkandung di dalamnya. Sebenarnya kata kunci tersebut merupakan sebuah pemberian hak akses terhadap data-data di dalam suatu kelas sehingga disebut dengan access specifier. Artinya akan terdapat pembatasan akses terhadap data-data tersebut sehingga tidak semua kelas maupun lingkungan program dapat bebas mengaksesnya. Dalam C + +, terdapat tiga buah tingkat akses, yaitu private, public, dan protected yang masing-masing akan kita bahas di dalam bagiari ini. 11.5.1 Private Tingkat akses ini berguna untuk memberikan hak akses data hanya kepada kelas yang bersangkutan saja. Artinya kelas-kelas turunan ataupun lingkungan luar di dalam program tidak diizinkan untuk mengakses data tersebut. Dalam C+ +, untuk menentukan data tersebut bersifat private, maka kita harus menggunakan kata kunci private. Secara default, jika kita tidak menuliskan tingkat akses dalam pendeklarasian data dalam sebuah kelas, maka data-datanya akan dianggap sebagai data private. Berikut ini gambaran pendefinisian sebuah kelas yang menggunakan tingkat akses private. int Y; private: int Z; // Secara default, X akan bersifat // private // Y akan bersifat public // Z akan bersifat private Untuk lebih memahami konsepnya, perhatikanlah contoh program berikut ini. #include <iostream> // X bersifat private public : void SetXfint XX) {..} void ShowXO { cout«l 'Nilai X : "«X«endl; // Fungs i utama int maino {

CONTOH 0 O.SetXd 0.ShowX() berikut : Nilai X : 100 Seperti yang kita lihat di atas bahwa X bersifat private dan dia hanya dapat diakses oleh fungsi-fungsi yang terdapat di dalam kelas tersebut. Dengan kata lain, lingkungan luar maupim kelaskelas lain tidak diizinkan untuk mengakses X. Berikut ini contoh yang tidak dibenarkan. // Fungs! utama int main ( ) { oibl i c: void SetX(int XX) { int KuadratX() { return X * X; // Fungsi utama CONTOH 0; ' : int hasil; // Melakukan pemanggilan terhadap fungsi-fungsi di dal // kelas CONTOH O.SetX(lO); hasil = 0. KuadratX (},- cout«"hasil : u «hasil; return 0 ; // SALAH, karena mengakses bagian private // dari kelas CONTOH Hasil: 100 11.5.2 Public Tingkat akses ini berfungsi untuk memberikan hak akses secara umum (public] kepada kelas-kelas turunannya maupun terhadap lingkungan luar di dalam program. Bagian ini biasanya berisi fungsi-fungsi yang akan dijadikan sebagai penghubung (interface) dari bagian private suatu kelas dengan lingkungan luar. Berikut ini contoh program yang menggambarkan penggunaan kata kunci public dalam pendefinisian sebuah kelas. Mnclude <iostream> Seperti yang kita lihat bahwa kita dapat memanilupasi nilai X (yang bersifat private) dari lingkungan luar melalui fungsi-fungsi penghubung yang ditempatkan pada bagian public (yaitu fungsi SetX () dan KuadratX ()). 11.5.3 Protected Tingkat akses ini digunakan untuk memberikan hak akses terhadap data dalam suatu kelas sehingga data tersebut dapat diakses oleh kelas turunannya, namun lingkungan luar di dalam program masih tetap tidak diberi hak untuk mengaksesnya. Untuk membahas ini kita harus sedikit menyinggung tentang kelas turunan. Berikut ini contoh program yang menunjukkan penggunaan kata kunci protected.

tinclude <iostream; Kode Program 11-8 // Membuat kelas DASAR yang didalamnya terdapat data // dalam bagian protected class DASAR { protected: DASAR() { X = 10; } // Inisialisasi nilai X dengan nilai 10 II... // Membuat kelas TURUNAN sebagai hasil turunan dari kelas DASAR class TURUNAN: public DASAR { int Y, hasil; void SetYfint YY) { Y = YY; void KaliXY(} { hasil = X * Y; } int GetHasil(} { return hasil; // Fungsi utama DASAR A; TURUNAN B; return // Menggunakan nilai X dari kelas DA Hasil X kali Y : 50 Pemrograman 11.6 Hubungan Antara Struktur dan Kelas Dalam C + +, struktur dan kelas adalah dua hal yang sebenarnya saling memiliki hubungan. Artinya kita dapat membuat kelas dengan menggunakan kata kunci struct seperti halnya kita membuat sebuah struktur. Namun ini hanya sekedar pengetahuan saja bagi Anda. Dalam prakteknya, hampir semua programmer C++ menggunakan kata kunci class untuk membuat sebuah kelas. Apabila Anda merasa tidak begitu yakin akan pernyataan ini, perhatikan dan jalankan contoh-contoh program di bawah ini. 11.6.1 Membuat Kelas dengan Menggunakan Kata struct #include <iostream> // Membuat kelas MOTOR struct MOTOR { char* merk; long tahun; char* nopolisi; char* warna; void SetMotorO { rnerk = "Honda GL Pro"; tahun -- 1997; nopolisi = "G 5879 BF warna = "Hitam"; Kode Program 11-9 void ShowInfoMotor() { cout«"merk "«merk«endl; cout«" Tahun "«tahun«endl; cout«"no Polisi w «nopolisi«endl; cout«"warna u «warna«endl; // Fungsi utama // Melakukan instanslasi terhadap kelas MOTOR MOTOR M;

M.SetMotor( M.ShowInfoM 11.6.2 Membuat Kelas dengan Menggunakan Kata KunCJ class #include <iostream> // Membuat kelas MOTOR class MOTOR { char* merk; long tahun; char* nopolisi; char* warna; void SetMotorO { merk = "Honda GL Pro" tahun = 1997; nopolisi = U G 5879 BF warna = "Hitam"; Kode Program 11-10 void ShowInfoMotor() { cout«"merk : *«merk«endl ; cout«"tahun : ' A «tahun«endl; cout«"no Polisi : *«nopolisi«endl, cout«"warna : il «warna«endl; //. Fungsi utama I // Melakukan instansiasi terhadap kelas MOTOR IMOTOR M; M.SetMotor(); M.ShowInfoMotor{) ; return Apabila dijalankan, ternyata kedua program di atas akan memberikan hasil yang sama, yaitu sebagai berikut : Merk Tahun No Polisi Warna : Honda GL Pro : 1997 : G 5879 BF : Hitam Sampai di sini, mungkin bagi Anda yang berangkat dari bahasa Pascal atau C akan merasa bingung karena baik di dalam Pascal maupun C, sebuah struktur (record) hanya dapat berisi kelompok data dan tidak dapat berisi fungsi. Namun di dalam C+ +, pada saat kita mendefinisikan sebuah struktur, sebenarnya kita mendefinisikan sebuah kelas sehingga kita bebas untuk memasukkan fungsi-fungsi ke dalamnya. Walaupun demikian, para programmer C++ tetap menggunakan kata kunci class untuk membuat kelas dan menggunakan kata kunci struct untuk membuat struktur seperti yang terdapat pada Pascal maupun C. Perbedaan yang ada antara kata kunci struct dan class adalah dalam hal tingkat akses default dari data-datanya. Artinya, jika kita tidak menuliskan tingkat akses secara eksplisit pada saat mendeklarasikan data di dalam struktur, maka data di dalam struktur tersebut akan dianggap sebagai data public. Hal ini tentu berbeda dengan kelas, di dalam kelas apabila kita tidak menuliskan tingkat akses, maka data tersebut akan dianggap sebagai data private. Untuk lebih jelasnya, perhatikan potongan sintaks berikut ini. struct contoh { int x; // x her si fat public Di sini, secara default data x akan bersifat public. Jika kita ingin membuatnya menjadi private, maka kita harus secara eksplisit menuliskan tingkat akses private ke dalamnya sehingga kodenya akan tampak seperti di bawah ini. struct contoh { private: int x; // sekarang x bersifat private Pemrograman

Namun, jika kita menuliskannya dengan kata kunci claes, seperti di bawah ini. mmimtmiammmm :.^\int xr... "*^%ffc'< // maka secara default data x akan dianggap sebagai data private. 11.7 Anggota Kelas yang Bersifat Statis Di dalam C + +, anggota-anggota dari sebuah kelas (data dan fungsi) dapat dijadikan sebagai statis, yaitu dengan menambahkan kata kunci static di depan pendeklarasiannya. Bagian ini akan menjelaskan bagaimana cara membuatnya dan alasan apa yang mendasarinya. 11.7.1 Data Statis Normalnya, setiap data yang terdapat dalam kelas akan dialokasikan untuk setiap instance yang ada. Namun, jika dideklarasikan sebagai static, maka dalam memori hanya akan terdapat satu data yang dipakai untuk berapapun instance yang ada. Data statis ini akan diinisialisasi dengan nilai 0 sebelum instance pertama dibuat. Perlu diperhatikan bahwa ketika kita mendeklarasikan data statis, kita tidak mendefinisikannya. Ini berarti sebelumnya data tersebut tidak tersimpan dalam memori. Untuk itu kita harus menyediakan definisi global untuk data tersebut di manapun letaknya asalkan berada di luar kelas yang bersangkutan. Untuk lebih memahaminya, perhatikanlah contoh program berikut ini. #include <iostream> // Constructor kelas CONTOH CONTOH(int XX, int YY) { Y = YY; : } // Fungsi untuk menampilkan nilai X dan Y void ShowXYO { cout«"nilai X : "«X«endl; cout«"nilai Y : "«Y«endl; cout«endl / // Mendefinisikan X int CONTOHs ix; // Fungsi utama // Membuat instance A dengan X=10 dan Y=10 CONTOH A(10, 10); // Menampilkan nilai X dan Y dari instance A cout«"di dalam objek A"«endl; A.ShowXY(); // Membuat instance B dengan X=50 dan Y=50 CONTOH B(50, 50); // Menampilkan nilai X dan Y dari instance B cout«"di dalam objek B"«endl; B. ShowXYO; // Menampilkan kembali nilai X dan Y dari instance A cout«"di dalam objek A"«endl; A.ShowXY(); using namespace std static int Y; // variabel statik // variabel non-statik Di dalam objek A Nilai X : 10 Nilai Y : 10 Di dalam objek B

Nilai X : 50 Nilai Y : 50 Di dalam objek A Nilai X : 50 Nilai Y : 10 Seperti yang kita lihat pada hasil di atas, bahwa X yang dideklarasikan sebagai statis, maka ketika nilai X pada suatu objek (instance) berubah, maka itu berarti mengubah semua nilai X dari objek-objek lainnya. Pada kasus ini, ketika kita mengubah nilai X untuk objek B dengan nilai 50, nilai X yang terdapat pada objek A juga akan berubah menjadi 50. Sedangkan Y yang merupakan variabel biasa (non-statik), nilainya tidak akan berubah. Hal ini karena sebenarnya di dalam program tersebut terdapat dua buah variabel Y, yaitu Y milik objek A dan Y milik objek B. 11.7.2 Fungsi Statis Sama seperti halnya data atau variabel dari sebuah kelas, fungsifungsi yang terdapat di dalam sebuah kelas juga dapat dijadikan sebagai fungsi statis. Caranya sama, yaitu dengan menambahkan kata kunci static di depannya. Namun dalam melakukan hal ini kita perlu sekali untuk memperhatikan hal-hal Fungsi statis yang terdapat di dalam kelas tersebut tidak memiliki pointer this (akan dibahas pada sub bab berikutnya) Fungsi statis tidak boleh bersifat virtual Tidak boleh terdapat dua (atau lebih) fungsi yang sama, walaupun yang satu bersifat statik dan yang lainnya nonstatik. Untuk mengetahui cara kerjanya, perhatikan contoh program di bawah ini. «static void Inisialisasi (intixx) { void ShowXO { cout«"nilai X // Mendefinisikan X int CONTOH::X; // Fungsi utama int main{) { "«X«endl; // Memanggil fungsi Inisialisasi sebelum // sebuah objek/instance dibuat CONTOH::Inisialisasi(25); // Melakukan instansiasi terhadap kelas CONTOH // dengan nama instance A CONTOH A; //Memanggil fungsi ShowX kepunyaan kelas CONTOH A. ShowXO; Nilai X : 25 Seperti yang kita lihat bahwa dengan mendeklarasikan fungsi sebagai statis, kita dapat melakukan inisialisasi nilai pada data suatu kelas sebelum kita melakukan instansiasi terhadap kelas tersebut. 11.8 Pointer ke Objek #include <iostream> using namespace std static Seperti halnya pada tipe dasar maupun tipe data bentukan, pointer juga dapat menunjuk ke tipe kelas. Sama seperti pada pointer yang menunjuk ke tipe struktur, pointer ke objek juga akan mengakses data atau fungsi di dalam kelas dengan menggunakan operator ->, dan bukanlah menggunakan operator titik (.) seperti pada instance yang bukan merupakan pointer. Berikut ini contoh program yang

memperlihatkan bahwa pointer juga dapat menunjuk ke alamat objek yang bertipe kelas. flnclude <iostream> // Fungsi utama // Mehdeklarasikan pointer yang menunjuk ke kelas C CONTOH *P; // Mengalokasikan memon untuk kelas CONTOH P = new CONTOH; // P menunjuk ke alamat // yang baru dialokasikan // Memanggil fungsi-fungsi milik kelas CONTOH, // yaitu dengan operator -> P->SetX(100) ; // Ingat, bukan menggunakan titik, // karena P adalah pointer P->ShowX(); Nilai X : 100 11.9 Pointer this Satu hal yang cukup penting untuk dibahas pada saat kita membicarakan kelas adalah pointer this. Pointer ini adalah pointer otomatis yang dilewatkan setiap kali objek dibuat di dalam memori dan akan mewakili nama kelas yang bersangkutan. Sebagai contoh kita mempunyai kelas tertentu (misalnya dengan nama BALOK), dan kita akan menuliskan sintaks berikut. H^LOK::Tinggi = 4 Maka dapat kita tulis sebagai JHis-->Tinggi» 4 Untuk dapat lebih memahaminya, perhatikan kembak potongan sintaks di bawah mi void SetX(int XX) { Void ShowX () { cout«"nilai X : "«X«endl; Sebenarnya sama seperti jika void SetX(int XX) { this-> void ShowX() { cout«"nilai X : "«this->x«endl; iliskan seperti di bawah ini. Berikut ini contoh program lengkap yang akan menunjukkan hal tersebut. #include <iostream> Kode Program 11-14 class KUBUS { int S ;

iblic: lyoid Sets {int SS) void ShowVolume ( ) ; tinclude <iostream> Kode Program 11-15 void KUBUS::SetS(int SS) { this->s = SS; public : void SetX(int XX) { } int GetX() { return X; int Kuadrat{ CONTOH A, int N) { A.SetX(N) ; return (A.GetXO * A.GetXO) p CONTOH 0; Apabila dijalankan, program di atas akan memberikan hasil sebagai Volume Kubus : 125 // Memanggil fungsi Kuadrat cout«"kuadrat dari 10 adalah : "«Kuadrat (0, ro) Kuadrat dari 10 adalah : 100 11.10 Objek Sebagai Parameter dalam Sebuah Fungsi Dalam C + +, objek dapat juga berperan sebagai parameter dalam pendefinisian sebuah fungsi. Objek akan dilewatkan secara standar, yaitu dengan menggunakan metode pass by value (dikirimkan berdasarkan nilai). Hal ini sebenarnya bertujuan untuk mengakses suatu data (yang bersifat public) di dalam sebuah kelas dimana pemrosesannya dilakukan di dalam fungsi luar (bukan member function). Untuk lebih memahaminya, perhatikan contoh program di bawah ini. 11.11 Objek Sebagai Nilai Kembalian dalam Sebuah Fungsi Selain menjadi parameter, sebuah objek juga dapat digunakan sebagai nilai kembalian dari suatu fungsi. Di dalam fungsi akan tercipta satu objek temporary yang kemudian akan dibebaskan kembali sesaat setelah proses pengembalian nilai. Berikut ini contoh program yang menunjukkan hal tersebut.

^include <iostream> void SetX(int XX) { } int GetXO { return X; CONTOH MyFuncO { CONTOH A; A.SetX(30); return A; CONTOH 0; // Mengembalikan nilai yag berupa objek // Memanggil fungsi Kali2 dan nilainya dimasukkan // ke dalam objek 0 0 = MyFunc(); cout«"nilai X di dalahhtodalah ; "«0. GetXO; } ^ Nilai X di dalam O adalah : 30 11.12 Friend Function Dalam C + + kita diizinkan untuk membuat fungsi luar (bukan member function) yang dapat mengakses bagian private suatu kelas. Fungsi seperti ini dinamakan dengan friend function. Adapun cara untuk mendefinisikan fungsi tersebut sama seperti fungsi-fungsi biasa, hanya saja fungsi ini perlu dideklarasikan terlebih dahulu di dalam kelas yang bersangkutan, yaitu dengan menggunakan kata kunci friend. Untuk lebih memahami konsep yang terkandung di dalamnya, perhatikan contoh program berikut. Mnclude <iostream> int X, Y; public : void SetXY(int XX, int YY) { Y = YY; friend int KALI (CONTOH A) ; Kode Program 11-17 // Mendefinisikan fungsi KALI yang bukan termasuk member // function // dari kelas CONTOH int KALI(CONTOH A) { // Mengakses bagian private secara langsung dari kelas CON1 return (A.X * A.Y); // Fungsi utama jlnt main () { // Melakukan instansiasi kelas CONTOH ICONTOH 0; o.setxy(20, 3); // Mengeset nilai X^2Q dan Y=3 cout«"hasil kali : "«KALI(Oj ' berikut : Hasil kali: 60 Seperti yang kita lihat di atas bahwa fungsi KALI () bukan merupakan fungsi anggota (member function) dari kelas CONTOH, tapi fungsi tersebut dapat mengakses bagian private (dalam hal ini

X dan Y) dari kelas tersebut. Hal ini dapat terjadi karena fungsi tersebut berlaku sebagai teman (friend) dari kelas CONTOH. 11.13 Friend Class Selain friend function, di dalam C++ juga dikenal istilah friend class, yaitu kelas yang dapat mengakses semua data (termasuk bagian private) dari kelas lain. Kedua kelas tersebut masing-masing adalah kedua kelas yang terpisah dan tidak ada hubungan turunan sama sekali. Sama halnya seperti pada friend function, pada friend class juga harus dilakukan pendeklarasian terlebih dahulu, yaitu dengan menggunakan kata kunci friend. Berikut ini contoh program yang mengilustrasikan konsep di atas. finclude <iostream> Kode Program 11-18 // Melakukan instansiasi dari KEDUA P; // Memanggil fungsi Kali yang t cout«"hasil kali : "«p.kali(0) V Hasil kali: 120 Seperti yang kita lihat di atas bahwa dengan menjadikan kelas KEDUA sebagai friend class dari kelas KESATU, maka kelas KEDUA mempunyai hak akses penuh terhadap data-data yang terdapat pada kelas KESATU meskipun data-data tersebut bersifat private. using namespace std? class KESATU { int X, Y; KESATU(int XX, int YY) { Y = YY; } friend class KEDUA; // Definisi dari kelas KEDUA class KEDUA { //... int Kali(KESATU A); int KEDUA::Kali(KESATU A) { return (A.X * A.Y); // Melakukan instansiasi dari kelas KESATU KESATU 0(40, 3} ; Pemrograman