Pemrograman Berorientasi Obyek dengan C++

32
i KATA PENGANTAR Puji syukur kami panjatkan kepada Allah SWT atas rahmat dan karunia-Nya, sehingga Modul Praktikum Pemrograman Berorientasi Obyek ini dapat diselesaikan. Modul ini adalah panduan praktikum mata kuliah Pemrograman Berorientasi Obyek (PBO) yang merupakan mata kuliah wajib yang harus diambil oleh setiap mahasiswa Program Studi Teknik Informatika di Universitas Ibn Khaldun Bogor. Modul praktikum ini terdiri dari 8 bab. Modul ini membahas dasar-dasar PBO secara umum sehingga praktikumnya dapat menggunakan kompiler apa saja yang mendukung bahasa C++ seperti Turbo C++, Borland C++ atau MS Visual C++. Kami menyadari bahwa modul praktikum ini masih jauh dari sempurna. Saran dan kritik yang membangun dari berbagai pihak sangatlah diharapkan. Bogor, Oktober 2014 Penyusun Foni Agus Setiawan, S.Kom., M.Kom.

description

Modul ini membahas mengenai dasar-dasar pemrograman berorientasi obyek menggunakan C++, seperti: inheritance, polymorphisme, virtual function, overloading operator dan fungsi, serta friend.

Transcript of Pemrograman Berorientasi Obyek dengan C++

Page 1: Pemrograman Berorientasi Obyek dengan C++

i

KATA PENGANTAR

Puji syukur kami panjatkan kepada Allah SWT atas rahmat dan karunia-Nya,

sehingga Modul Praktikum Pemrograman Berorientasi Obyek ini dapat diselesaikan. Modul ini

adalah panduan praktikum mata kuliah Pemrograman Berorientasi Obyek (PBO) yang

merupakan mata kuliah wajib yang harus diambil oleh setiap mahasiswa Program Studi

Teknik Informatika di Universitas Ibn Khaldun Bogor.

Modul praktikum ini terdiri dari 8 bab. Modul ini membahas dasar-dasar PBO secara

umum sehingga praktikumnya dapat menggunakan kompiler apa saja yang mendukung

bahasa C++ seperti Turbo C++, Borland C++ atau MS Visual C++.

Kami menyadari bahwa modul praktikum ini masih jauh dari sempurna. Saran dan

kritik yang membangun dari berbagai pihak sangatlah diharapkan.

Bogor, Oktober 2014

Penyusun

Foni Agus Setiawan, S.Kom., M.Kom.

Page 2: Pemrograman Berorientasi Obyek dengan C++

ii

DAFTAR ISI

KATA PENGANTAR ............................................................................................. i

DAFTAR ISI ....................................................................................................... ii

BAB 1 DASAR-DASAR C++ ............................................................................. 1

BAB 2 DASAR-DASAR KELAS DAN OBYEK .......................................................... 8

BAB 3 KONSTRUKTOR DAN DESTRUKTOR ........................................................ 11

BAB 4 PEWARISAN (INHERITANCE) ................................................................. 14

BAB 5 FUNGSI SEMU (VIRTUAL FUNCTION) ...................................................... 18

BAB 6 OVERLOADING OPERATOR .................................................................... 21

BAB 7 POLIMORFISME (OVERLOADING FUNGSI) ................................................ 24

BAB 8 FRIEND ............................................................................................... 27

DAFTAR PUSTAKA

Page 3: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer Ilkom Unpak Bogor 1

BAB 1

DASAR-DASAR C++

Pendahuluan Pada dasawarsa 1980-an terdapat suatu teknik pemrograman yang mendapat banyak

perhatian saat itu, yaitu pemrograman dengan pendekatan/berorientasi pada obyek (Object-Oriented Programming), yang lebih populer dengan sebutan OOP. Cara pemrograman ini banyak melahirkan ide-ide maupun cara pandang/wawasan baru dalam dunia komputer pada umumnya.

Berbagai macam cara dan strategi dilakukan untuk memasuki, menghadapi serta menyiasati era OOP ini. Di antaranya adalah mengembangkan perangkat lunak (software) yang ada agar dapat mendukung OOP. Salah satu lembaga yang melakukannya adalah Bell Laboratories, tempat bahasa C dibuat. Di Bell Laboratories dikembangkan suatu preprocessor bahasa C agar bahasa C dapat menggunakan OOP. Preprocessor ini dikembangkan oleh Bjarne Stroustrup. Tetapi hasil yang dicapai tidak memuaskan.

Kemudian Bjarne Stroustrup merancang sebuah bahasa baru dengan menggunakan bahasa C sebagai dasar ditambah dengan kemampuan untuk memproses program yang dibuat secara OOP. Bahasa inilah yang kemudian dikenal dengan C++. Tahun 1984 Bjarne Stroustrup menyusun buku “The C++ Programming Language” yang menjadi acuan bagi perkembangan bahasa pemrograman C++ serta teknologi “Object-Oriented” pada umumnya.

C++ diambil dari terminologi bahasa C untuk melambangkan kode C = C + 1, yang artinya nilai C yang baru adalah nilai C yang lama ditambah 1. Hal ini melukiskan bahwa bahasa C yang baru (C++) merupakan bahasa C yang lama ditambah dengan suatu kemampuan baru (OOP).

C++ adalah bahasa C ditambah dengan kemampuan OOP. Oleh karena itu, semua sintaks, pernyataan dan fungsi yang biasa digunakan dalam bahasa C masih dapat digunakan dalam C++.

Perangkat lunak (software) yang dipergunakan adalah Turbo C++ atau Borland C++

yang diproduksi oleh Borland International. Untuk pemrograman di lingkungan Windows, dipergunakan MS Visual C++ buatan Microsoft Corporation.

Dalam C++, program yang ditulis dengan bahasa pemrograman C atau C++ dibedakan dengan ekstensi nama berkas program tersebut. Program dengan bahasa pemrograman C menggunakan ektensi .c sedangkan program dengan bahasa pemrograman C++ menggunakan ekstensi .cpp.

Page 4: Pemrograman Berorientasi Obyek dengan C++

Foni Agus Setiawan

Laboratorium Komputer TI FT UIKA Bogor 2

Bahasa pemrograman C++ memiliki struktur program yang mirip dengan bahasa pemrograman C dengan sedikit perbedaan di sana-sini. Dalam bahasa pemrograman C++ semua fungsi harus memiliki tipe data hasil/pengembalian (return data type) dan nilai hasil (return value) termasuk juga fungsi main(). Tidak seperti dalam bahasa pemrograman C

yang fungsinya secara default bertipe data hasil integer, dalam bahasa pemrograman C++ kita harus menentukan tipe data hasil dari suatu fungsi. Tipe data yang sering digunakan untuk tipe data hasil dari fungsi main() adalah integer atau void.

Struktur utama program C++ adalah:

int main()

{

. . . . .

<statements>;

. . . . .

return 0;

};

atau

void main()

{

. . . . .

<statements>;

. . . . .

};

Dalam pembuatan fungsi juga terdapat sedikit perbedaan. Bila dalam bahasa C penulisan fungsi dapat diletakkan sebelum maupun setelah fungsi main() atau fungsi lainnya, dalam bahasa C++ tidak demikian halnya. Oleh karena adanya kemampuan polimorfisme (polymorphism), fungsi–fungsi dalam bahasa pemrograman C++ harus mengetahui tipe data dari parameter atau argumen fungsi–fungsi tersebut pada saat fungsi–fungsi tersebut dipanggil.

Jika penulisan fungsi diletakkan sebelum fungsi main() atau fungsi lainnya maka secara langsung tipe data dari parameter atau argumen fungsi telah diketahui pada saat fungsi tersebut dipanggil dari program utama (fungsi main()) atau dari fungsi lainnya. Tetapi jika penulisan fungsi diletakkan setelah fungsi main atau fungsi lainnya maka pada saat fungsi tersebut dipanggil dari fungsi-fungsi sebelumnya (baik fungsi main() atau fungsi lainnya), tipe data dari parameter atau argumen fungsi tersebut belum diketahui.

Untuk mengatasi hal tersebut kita mengenal adanya prototipe fungsi (function prototype) dalam bahasa pemrograman C++. Prototipe fungsi ini dapat kita anggap sebagai fungsi yang belum sempurna, karena hanya terdiri dari kepala (header) suatu fungsi saja. Prototipe fungsi ini diletakkan sebelum fungsi–fungsi yang memanggil fungsi tersebut. Kegunaannya adalah agar pada saat suatu fungsi dipanggil, tipe data dari parameter atau argumennya telah diketahui. Hal ini mirip dengan kegunaan reserved word forward pada Turbo Pascal. Sedangkan penulisan fungsi secara lengkapnya dapat diletakkan di mana saja, setelah fungsi main(), dalam berkas lain atau bahkan dalam berkas fungsi pustaka (library).

<tipe data> namafungsi (<tipe data> argumen1, <tipe data> argumen2, ...); //

prototipe fungsi

void main()

{

. . .

namafungsi (arg1,arg2, . . .);

. . .

};

Page 5: Pemrograman Berorientasi Obyek dengan C++

Foni Agus Setiawan

Laboratorium Komputer TI FT UIKA Bogor 3

<tipe data> namafungsi (<tipe data> argumen1, <tipe data> argumen2, ...); //

fungsi lengkap

{

. . .

<statements>;

. . .

};

Penggunaan berkas tambahan stdio.h juga mengalami perubahan. Dalam bahasa pemrograman C++ penggunaannya sering digantikan oleh berkas tambahan baru iostream.h yang telah menggunakan teknik pemrograman yang berorientasi pada obyek. Berkas ini memberikan 2 obyek yaitu cin dan cout sebagai pengganti parameter stdin dan stdout dari berkas stdio.h untuk menangani peralatan masukan dan keluaran (input/output device).

Dasar-Dasar C++

main() Sebuah program C++ minimal mengandung sebuah fungsi yaitu main(). Fungsi ini

merupakan fungsi awal dan utama yang akan dieksekusi dalam program C++.

cout Obyek cout (baca: C out) berguna untuk menuliskan angka atau teks ke peranti

keluaran standar (biasanya layar monitor). Obyek ini adalah pengganti fungsi printf() dalam PBO yang memiliki fleksibilitas dan kemudahan penggunaan yang lebih baik. Fungsi printf() masih dapat digunakan, tetapi anda disarankan untuk membiasakan diri menggunakan obyek cout untuk mulai masuk ke OOP.

escape sequence characters Escape sequence characters adalah karakter-karakter khusus yang mempunyai arti

tersendiri ketika dikirim ke standar output. Tabel di bawah ini berisi karakter-karakter khusus tersebut.

Karakter Keterangan

\0 Karakter null (nilai ascii 0)

\a Membunyikan speaker komputer

\b Karakter backspace

\f Karakter formfeed (ganti halaman)

\n Karakter newline (ganti baris)

\r Karakter carriage return (ke posisi kolom pertama pada baris saat itu, tanpa pindah baris)

\t Karakter tab horisontal

\v Karakter tab vertikal

\\ Karakter \

Page 6: Pemrograman Berorientasi Obyek dengan C++

Foni Agus Setiawan

Laboratorium Komputer TI FT UIKA Bogor 4

\’ Karakter ‘

\” Karakter “

\? Karakter ?

\ooo Karakter dengan nilai oktal ooo

\xhh Karakter dengan nilai heksadesimal hh

Tabel 1.1 Escape sequence characters pada C++.

manipulator Manipulator digunakan untuk mengatur tampilan data. Misalnya untuk mengatur agar

suatu nilai ditampilkan dengan lebar 10 karakter dan rata kanan. Berikut ini sejumlah manipulator yang digunakan pada C++.

Manipulator Keterangan

Endl Menyisipkan newline

Ends Menyisipkan karakter null

Flush Mengirimkan isi buffer ke piranti keluaran

Dec Mengkonversi ke bilangan basis 10 (desimal)

Hex Mengkonversi ke bilangan basis 16 (heksadesimal)

Oct Mengkonversi ke bilangan basis 8 (oktal)

setbase (int n) Mengkonversi ke bilangan basis n (n = 8, 10 atau 16)

setw (int n)

Mengatur lebar field untuk suatu nilai sebesar n karakter. Jika tidak didefinisikan dengan setfill(), karakter pemenuh berupa spasi.

setfill (int c) Menyetel karakter pemenuh berupa karakter c.

setprecision (int n) Menyetel presisi bilangan pecahan sebesar n digit.

setiosflags (long f) Menyetel format yang ditentukan oleh f. f adalah tanda format pada tabel 1.3

resetiosflags (long f) Menghapus format yang ditentukan oleh f. f adalah tanda format pada tabel 1.3

Tabel 1.2 Manipulator-Manipulator pada C++.

Tanda Format Keterangan

ios::left Menyetel rata kiri terhadap lebar field yang diatur oleh setw()

ios::right Menyetel rata kanan terhadap lebar field yang diatur oleh setw()

ios::scientific Memformat keluaran dalam notasi eksponensial

Page 7: Pemrograman Berorientasi Obyek dengan C++

Foni Agus Setiawan

Laboratorium Komputer TI FT UIKA Bogor 5

ios::fixed Memformat keluaran dalam notasi desimal

ios::dec Memformat keluaran dalam basis 10 (desimal)

ios::hex Mengkonversi ke bilangan basis 16 (heksadesimal)

ios::oct Mengkonversi ke bilangan basis 8 (oktal)

ios::uppercase Memformat huruf notasi heksadesimal dalam huruf besar

ios::showbase Menampilkan awalan 0x untuk bilangan heksadesimal atau 0 (nol) untuk bilangan oktal

ios::showpoint Menampilkan titik desimal pada bilangan yang tidak memiliki bagian pecahan

ios::showpos Menampilkan tanda + pada bilangan positif

Tabel 1.3 Tanda format untuk setiosflags() dan resetiosflags().

cin Obyek cin (baca: C in) membaca semua teks atau angka yang masuk ke standar

input (normalnya adalah keyboard).

cerr Obyek cerr (baca: C err) membaca semua teks atau angka yang masuk ke standar

error (normalnya adalah layar monitor).

Latihan

Dua buah program di bawah ini adalah contoh penggunaan obyek cout, cin, escape sequence characters, manipulator, format ios serta obyek cerr sebagai pengantar untuk mempelajari C++ lebih jauh. Program 1.1 ctof.cpp

// Program mengkonversi nilai suhu

// dari celcius ke fahrenheit

#include <iostream.h>

#include <iomanip.h>

void main()

{

char nama[30];

double c, f;

char yt;

cout << "Masukkan nama Anda: ";

cin >> nama;

cout << "Hai \"" << nama << "\"..." << endl;

Page 8: Pemrograman Berorientasi Obyek dengan C++

Foni Agus Setiawan

Laboratorium Komputer TI FT UIKA Bogor 6

yt='Y';

while((yt=='Y') || (yt=='y'))

{

cout << "\nMasukkan nilai suhu dalam celcius: ";

cin >> c;

f = 9.0 / 5.0 * c + 32.0;

cout << "Nilai suhu dalam fahrenheit: "

<< setw(12) << setiosflags(ios::right | ios::scientific)

<< setprecision(2) << f << endl;

cout << "Mau nyoba lagi (y/t)? ";

cin >> yt;

}

}

Hasil output:

Masukkan nama Anda: Jay

Hai "Jay"...

Masukkan nilai suhu dalam celcius: 28

Nilai suhu dalam fahrenheit: 8.24e+001

Mau nyoba lagi (y/t)? y

Masukkan nilai suhu dalam celcius: 30

Nilai suhu dalam fahrenheit: 8.60e+001

Mau nyoba lagi (y/t)? t

Program 1.2 cerr.cpp

// program password dengan redirection

// ke sebuah file teks

#include <iostream.h>

#include <string.h>

void main()

{

char pass[8];

cerr << "Anda ingin tahu siapa nama saya?" << endl;

cerr << "Masukkan password: ";

cin >> pass;

if (strcmp(pass,"password")==0)

{

cout << "Nama saya adalah: My Girl." << endl;

cerr << "Yup. Silakan buka file outputnya." << endl;

}

else

cerr << "Sorry, saya nggak bisa bilang. Password Anda salah." <<

endl;

}

Page 9: Pemrograman Berorientasi Obyek dengan C++

Foni Agus Setiawan

Laboratorium Komputer TI FT UIKA Bogor 7

Hasil output:

D:\My Documents\My Modules\cerr\Debug>cerr > nama.txt

Anda ingin tahu siapa nama saya?

Masukkan password: password

Yup. Silakan buka file outputnya.

D:\My Documents\My Modules\cerr\Debug>type nama.txt

Nama saya adalah: My Girl.

Page 10: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer Ilkom Unpak Bogor 8

BAB 2

DASAR-DASAR KELAS DAN OBYEK

Pendahuluan Dalam bahasa pemrograman C, kita mengenal tipe data struktur (structure) yang

digunakan untuk menggambarkan suatu entitas. Tetapi penggambaran tersebut belumlah memuaskan, sebab karakteristik atau operasi-operasi yang dapat dilakukan oleh/pada entitas tersebut tidak terwakilkan. Dalam bahasa pemrograman C++ kemampuan tipe data struktur dikembangkan sehingga dapat juga menampung operasi-operasi yang dimiliki oleh entitas tersebut, sehingga penggambaran entitas/obyek tersebut menjadi lebih lengkap.

Tipe data ini dikenal dengan tipe data obyek. Sebelum membuat sebuah obyek, terlebih dahulu kita harus mendefinisikan jenis obyek yang akan dibuat yang disebut dengan kelas. Dalam C++, Kelas obyek didefinisikan dengan menggunakan reserved word class.

Dasar-Dasar Kelas dan Obyek Sebuah bahasa pemrograman berorientasi obyek memiliki 3 karakteristik utama yang

membedakannya dari bahasa non-OOP, yaitu:

1. Pengkapsulan atau pembungkusan (encapsulation), adalah kemampuan obyek memadukan data dan operasi-operasi dari dan pada obyek tersebut.

2. Pewarisan atau penurunan (inheritance), adalah kemampuan kelas suatu obyek untuk menurunkan sifat-sifat yang dimilikinya kepada kelas lain.

3. Polimorfisme (polymorphism), yaitu metoda dengan nama yang sama pada sebuah kelas obyek dapat memiliki operasi yang berbeda tergantung dari jumlah dan atau jenis argumen yang diterimanya.

Analoginya dengan obyek pada dunia nyata adalah sebagai berikut.

Manusia adalah contoh sebuah kelas. Mamat adalah contoh instan dari kelas manusia dan disebut sebagai obyek. Karena Mamat adalah seorang manusia maka Mamat mewarisi sifat-sifat manusia pada umumnya seperti memiliki mata, hidung dan dapat berpikir

inheritance. Sifat-sifat (atribut) dan tingkah laku atau cara bertindak (metoda) Mamat menyatu pada dirinya encapsulation. Mamat dapat melakukan pekerjaan makan.

Seandainya kepada Mamat diberikan nasi goreng dan kacang garing, Mamat akan memakan keduanya tetapi tentu saja dengan cara yang berbeda. Untuk memakan nasi goreng, Mamat memerlukan piring dan sendok, mengambil nasi, barulah makan. Untuk memakan kacang garing, cukup menggunakan tangan, dikupas kulitnya, barulah dimakan kacangnya

polymorphisme.

Page 11: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 9

Gambar 2.1 Perbedaan arsitektur program Non-OOP dengan program OOP.

Setiap atribut (data), metoda (fungsi anggota) bahkan obyek pada suatu obyek (sebuah obyek dapat berisi obyek lain) memiliki hak akses tersendiri. Apakah hak akses itu? Hak akses adalah hak yang dimiliki oleh anggota dari suatu obyek untuk menentukan apakah ia dapat diakses atau tidak dapat diakses.

Ada 3 jenis hak akses dalam bahasa pemrograman C++:

private: hanya dapat diakses oleh anggota obyek itu sendiri.

public: dapat diakses oleh siapa saja.

protected: hanya dapat diakses oleh anggota obyek itu sendiri dan obyek kelas turunannya.

Latihan

Program 2.1 class.cpp

// Contoh pembuatan dan penggunaan kelas

#include <iostream.h>

#include <string.h>

class Manusia

{

private:

char nama[30];

float umur;

char alamat[50];

public:

void Init(char* sNama, float nUmur, char* sAlamat)

{

strcpy(nama, sNama);

Data

Fungsi

Program Non-OOP

Obyek 1

Fungsi

Anggota

Obyek 2

Data

Program OOP

Kelas

Page 12: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 10

umur = nUmur;

strcpy(alamat, sAlamat);

}

void Info()

{

cout << "Nama : " << nama << endl;

cout << "Umur : " << umur << endl;

cout << "Alamat : " << alamat << endl;

}

};

void main()

{

Manusia mamat;

mamat.Init("Mamat Setiamat", 18, "Kedung Badak Bogor");

mamat.Info();

}

Hasil output:

Nama : Mamat Setiamat

Umur : 18

Alamat : Kedung Badak Bogor

Tugas

Pada Program 2.1 di atas, pengisian data nama, umur dan alamat dilakukan secara langsung dari dalam program dengan memanggil fungsi anggota Init(). Modifikasilah program di atas sehingga pengisian data nama, umur dan alamat dilakukan melalui input dari papan ketik oleh pengguna.

Page 13: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 11

BAB 3

KONSTRUKTOR DAN DESTRUKTOR

Pendahuluan Salah satu kekuatan OOP adalah adanya konstruktor dan destruktor untuk mengatur

segala hal yang berkenaan dengan penciptaan (construction/instantiation) dan pemusnahan (destruction) obyek. Sehingga, pengesetan nilai-nilai variabel maupun pengeksekusian pernyataan (statement) dapat dilakukan pada saat obyek tersebut diciptakan maupun dimusnahkan.

Konstruktor Konstruktor adalah fungsi anggota sebuah obyek yang akan dieksekusi sesaat

setelah obyek tersebut diciptakan. Aturan-aturan untuk menciptakan sebuah konstruktor suatu kelas, yaitu: 1. Nama fungsi anggota konstruktor sama dengan nama kelas. 2. Sebuah konstruktor dapat mempunyai argumen dan nilai default seperti layaknya

sebuah fungsi anggota biasa. 3. Sebuah konstruktor tidak boleh memiliki nilai kembali fungsi (return value). Bahkan void

pun tidak boleh. 4. Sebuah konstruktor harus diletakkan pada bagian public.

Destruktor Serupa dengan konstruktor, Destruktor adalah fungsi anggota yang sebuah obyek

yang akan dieksekusi sesaat sebelum obyek tersebut dimusnahkan. Aturan-aturan untuk menciptakan sebuah destruktor suatu kelas, yaitu: 1. Nama fungsi anggota destruktor sama dengan nama kelas ditambah awalan karakter

not (~). 2. Sebuah destruktor tidak boleh mempunyai argumen fungsi. 3. Sebuah destruktor tidak boleh mempunyai nilai kembali fungsi (return value). Bahkan

void pun tidak boleh. 4. Sebuah destruktor harus diletakkan pada bagian public.

Latihan

Pada Program 2.1, kelas Manusia tidak memiliki konstruktor maupun destruktor. Kita dapat mengasumsikan konstruktor pada kelas Manusia sebagai atribut-atribut bawaan pada seseorang ketika orang tersebut baru lahir (bayi), dan destruktor sebagai atribut-atribut bawaan pada seseorang ketika orang tersebut hampir meninggal. Anda dapat

Page 14: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 12

memodifikasi Program 2.1 di atas menjadi seperti di bawah ini untuk melihat efek konstruktor maupun destruktornya. Program 3.1 construc.cpp

// Kelas dengan konstruktor dan destruktor

#include <iostream.h>

#include <string.h>

class Manusia

{

private:

char nama[30];

float umur;

char alamat[50];

public:

Manusia() // konstruktor

{

strcpy(nama, "Belum punya nama");

umur = 0;

strcpy(alamat, "Sama dengan alamat orang tua");

cout << "Alhamdulillah, bayinya lahir..." << endl << endl;

}

~Manusia() // destruktor

{

cout << "Innalillah, " << nama << " akhirnya meninggal..." <<

endl;

}

void SetAtribut(char* sNama, float nUmur, char* sAlamat)

{

cout << "Set atribut..." << endl << endl;

strcpy(nama, sNama);

umur = nUmur;

strcpy(alamat, sAlamat);

}

void Info()

{

cout << "Nama : " << nama << endl;

cout << "Umur : " << umur << endl;

cout << "Alamat : " << alamat << endl << endl;

}

};

void main()

{

Manusia mamat;

mamat.Info();

Page 15: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 13

mamat.SetAtribut ("Mamat Setiamat", 18, "Kedung Badak Bogor");

mamat.Info();

cout << “Program berakhir...” << endl;

}

Hasil output: Alhamdulillah, bayinya lahir...

Nama : Belum punya nama

Umur : 0

Alamat : Sama dengan alamat orang tua

Set atribut...

Nama : Mamat Setiamat

Umur : 18

Alamat : Kedung Badak Bogor

Program berakhir...

Innalillah, Mamat Setiamat akhirnya meninggal...

Tugas 1. Pada program di atas, penulisan fungsi anggota dilakukan di dalam kelas. Untuk sebuah

fungsi anggota yang besar, bentuk penulisan fungsi seperti di atas tidak disarankan. Yang perlu ditulis di dalam kelas cukup deklarasi fungsinya saja, sementara penjabaran atau definisi fungsi anggotanya ditulis di luar kelas. Untuk menuliskan fungsi anggota di luar kelas, bentuknya sebagai berikut: <NamaKelas>::<FungsiAnggota>[(argumen)]

Misalnya untuk fungsi anggota SetAtribut, ditulis menjadi: void Manusia::SetAtribut(char* sNama, float nUmur, char* sAlamat)

{

}

Ubahlah bentuk penulisan semua fungsi anggota program di atas menjadi di luar kelas!

2. Potongan program yang berisi deklarasi sebuah kelas dapat dipisahkan ke dalam sebuah file header tersendiri untuk kemudian disertakan di dalam program menggunakan praprosesor #include. Pisahkan deklarasi kelas Manusia di atas ke dalam sebuah file header Manusia.h, lalu sertakan di dalam program utama!

Page 16: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 14

BAB 4

INHERITANCE (PEWARISAN)

Pendahuluan Pada C++, sebuah kelas dimungkinkan untuk mewarisi data maupun fungsi anggota

kelas lain. Sifat ini disebut dengan pewarisan (inheritance). Kelas yang mewarisi sifat kelas lain disebut kelas turunan (derived class), sedangkan kelas yang mewariskan sifatnya ke kelas lain disebut sebagai kelas dasar (base class). Sifat pewarisan ini diilhami oleh sifat pewarisan pada kehidupan nyata. Misalnya, mata si Mamat mirip dengan mata ayahnya dan hidungnya yang mancung mirip dengan hidung ibunya.

Dasar Pewarisan Agar sebuah kelas dapat mewarisi sifat dari kelas lain, pada deklarasi kelasnya

ditambahkan pernyataan sebagai berikut:

class Turunan : [<private>|<protected>|<public>] class Dasar, …

Bila pewarisan bersifat

Data dan fungsi anggota di kelas dasar bersifat

Maka akses data dan fungsi di kelas turunan menjadi bersifat

private

private

protected

public

private (tidak diwariskan)

private

private

protected

private

protected

public

private (tidak diwariskan)

protected

protected

public

private

protected

public

private (tidak diwariskan)

protected

public

Jika sebuah kelas hanya mewarisi sifat dari satu kelas lain, pewarisan seperti ini

disebut sebagai pewarisan tunggal. Jika sebuah kelas mewarisi sifat dari dua atau lebih kelas lain, pewarisannya disebut sebagai pewarisan jamak (berganda). Jika sebuah kelas mewarisi sifat langsung dari sebuah kelas dasar, pewarisannya disebut sebagai pewarisan langsung (satu tingkat). Jika sebuah kelas mewarisi sifat dari sebuah kelas turunan lain, pewarisannya disebut sebagai pewarisan bertingkat.

Ketika sebuah obyek dari kelas turunan dibuat, maka konstruktor dari kelas dasar dijalankan terlebih dahulu, barulah konstruktor dari kelas turunan dijalankan. Sebaliknya,

Page 17: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 15

Ketika sebuah obyek dari kelas turunan dihancurkan, maka destruktor dari kelas turunan dijalankan terlebih dahulu, barulah destruktor dari kelas dasar dijalankan.

Latihan

Program berikut ini memberikan gambaran yang cukup jelas mengenai sifat pewarisan pada C++.

Program 4.1 inherit.cpp

// Pewarisan sifat

#include <iostream.h>

#include <string.h>

class Bapak

{

private:

char sNama[30];

protected:

void Info()

{

cout << "Nama Bapak: " << sNama << endl;

}

public:

Bapak(char* nama="Bejo")

{

cout << "Konstruktor Bapak dijalankan..." << endl;

strcpy(sNama, nama);

}

~Bapak()

{

cout << "Destruktor Bapak dijalankan..." << endl;

}

};

class Ibu

{

private:

char sNama[30];

protected:

void Info()

{

cout << "Nama Ibu : " << sNama << endl;

}

public:

Ibu(char* nama="Surti")

{

Page 18: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 16

cout << "Konstruktor Ibu dijalankan..." << endl;

strcpy(sNama, nama);

}

~Ibu()

{

cout << "Destruktor Ibu dijalankan..." << endl;

}

};

class Anak : public Bapak, public Ibu

{

private:

char sNama[30];

public:

Anak(char* nama)

{

cout << "Konstruktor Anak dijalankan..." << endl;

strcpy(sNama, nama);

}

~Anak()

{

cout << "Destruktor Anak dijalankan..." << endl;

}

void Info()

{

cout << endl << "I N F O" << endl;

Bapak::Info();

Ibu::Info();

cout << "Nama Anak : " << sNama << endl << endl;

}

};

void main()

{

Anak mamat("Mamat");

mamat.Info();

cout << "Program berakhir..." << endl << endl;

}

Hasil output:

Page 19: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 17

Konstruktor Bapak dijalankan...

Konstruktor Ibu dijalankan...

Konstruktor Anak dijalankan...

I N F O

Nama Bapak: Bejo

Nama Ibu : Surti

Nama Anak : Mamat

Program berakhir...

Destruktor Anak dijalankan...

Destruktor Ibu dijalankan...

Destruktor Bapak dijalankan...

Page 20: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 18

BAB 5

FUNGSI SEMU (VIRTUAL FUNCTION)

Pendahuluan Pada dasarnya, suatu obyek kelas dasar tidak dapat mengakses fungsi anggota yang

dimiliki oleh kelas turunannya, bahkan dalam bentuk obyek dinamis (pointer) sekalipun. Agar sebuah obyek kelas dasar dapat melakukan hal itu, digunakan fungsi semu (virtual).

Dengan fungsi virtual, pada obyek kelas dasar dibuat memiliki akses terhadap fungsi anggota pada kelas turunannya. Implementasi dari obyek tersebut nantinya ada pada kelas-kelas turunannya masing-masing.

Fungsi Semu

Fungsi virtual digunakan dalam bentuk obyek dinamis (pointer). Caranya adalah sebagai berikut.

Pertama-tama dibuat obyek pointer dengan tipe kelas dasar. Kemudian dibuat pula obyek-obyek kelas turunannya. Pointer tersebut selanjutnya diarahkan untuk menunjuk kepada salah satu dari obyek-obyek kelas turunannya. Dengan cara seperti ini, pointer obyek tersebut dapat mengakses fungsi-fungsi anggota pada kelas turunannya, dengan syarat bahwa fungsi-fungsi tersebut telah didefinisikan sebagai fungsi virtual pada kelas dasarnya.

Suatu fungsi anggota yang dibuat sebagai fungsi virtual perlu dideklarasikan ulang pada setiap kelas turunan yang ingin menggunakannya. Bentuk pendeklarasiannya harus sama baik nilai kembali maupun argumen-argumennya, hanya saja kata kunci virtual tidak diberikan pada kelas turunannya.

Latihan

Program di bawah ini memberikan gambaran mengenai penggunaan fungsi virtual untuk fleksibilitas pemrograman.

Program 5.1 virtual.cpp

// Penggunaan fungsi virtual

#include <iostream.h>

class Manusia

{

public:

virtual void info() = 0; // pure virtual function

Page 21: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 19

};

class Kakek: public Manusia

{

public:

void info()

{

cout << "Sekarang saya sudah tua." << endl;

}

};

class Bapak: public Kakek

{

public:

void info()

{

cout << "Saya sudah jadi bapak." << endl;

}

};

class Anak: public Bapak

{

public:

void info()

{

cout << "Saya masih anak-anak." << endl;

}

};

void main()

{

Anak nak;

Bapak pak;

Kakek kek;

Manusia *m;

m = &nak;

m->info();

m = &pak;

m->info();

m = &kek;

m->info();

}

Hasil output:

Saya masih anak-anak.

Saya sudah jadi bapak.

Sekarang saya sudah tua.

Page 22: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 20

Tugas Program di atas menggunakan fungsi virtual murni pada kelas dasar Manusia, yaitu fungsi info(). Hilangkan kata kunci virtual pada fungsi info(), dan ganti isi fungsi info() menjadi sebagai berikut:

void info()

{

cout << “Saya adalah manusia.” << endl;

}

Jalankan program dan amatilah hasil yang didapat.

Page 23: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 21

BAB 6

OVERLOADING OPERATOR

Pendahuluan Konsep overloading terhadap operator diilhami oleh operasi yang sering kita alami

sehari-hari. Misalnya operator + biasa digunakan untuk menjumlahkan dua buah bilangan bulat atau bilangan pecahan:

2 + 3 5.2 + 7.6

Operasi seperti ini adalah hal biasa yang dijumpai di setiap bahasa pemrograman, tetapi operasi berikut:

3 apel + 5 jeruk (harganya = …) matriks A + matriks B (matriks hasil = …)

tidak dapat dilakukan menurut keadaan bawaan (default).

Menggunakan overloading terhadap operator, dua operasi di atas dapat dilakukan dengan mudah.

Overloading Terhadap Operator Misalnya kita mempunyai kelas Buah dengan obyek buah1, buah2 dan buah3 yang

bertipe Buah. Kita hendak menjumlahkan buah1 dan buah2 dan hasilnya disimpan dalam buah3 berupa jumlah buah dan harga buah. Untuk itu, kita dapat melakukan overloading terhadap operator + sehingga pernyataan buah3 = buah1 + buah2 menjadi valid. Caranya dengan menuliskan sebagai berikut dalam kelas Buah.

class Buah

{

protected:

int jumlah_buah;

float harga_buah;

int total_jumlah;

float total_harga;

public:

Buah operator + (Buah b2)

{

Buah b3;

b3.total_jumlah = jumlah_buah + b2.jumlah_buah;

b3.total_harga = harga_buah + b2.harga_buah;

return(b3);

Page 24: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 22

}

. . .

}

Tidak semua operator pada C++ dapat di-overload. Kita tidak dapat melakukan overloading terhadap 5 buah operator pada C++, yaitu: ., .*, ::, ?: dan sizeof.

Latihan

Contoh program di bawah ini memberikan gambaran mengenai overloading terhadap operator pada C++.

Program 6.1 overload.cpp

// Overloading terhadap operator

#include <iostream.h>

class Buah

{

protected:

int jumlah_buah;

float harga_buah;

int total_jumlah;

float total_harga;

public:

Buah operator + (Buah b2)

{

Buah b3;

b3.total_jumlah = jumlah_buah + b2.jumlah_buah;

b3.total_harga = harga_buah + b2.harga_buah;

return(b3);

}

void info()

{

cout << "Total buah : " << total_jumlah << endl;

cout << "Total harga : " << total_harga << endl;

}

};

class Apel: public Buah

{

public:

Apel (int jumlah=0, float harga=0.0)

{

jumlah_buah = jumlah;

harga_buah = harga;

}

void info()

Page 25: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 23

{

cout << "Jumlah apel : " << jumlah_buah << endl;

cout << "Harga apel : " << harga_buah << endl;

}

};

class Jeruk: public Buah

{

public:

Jeruk (int jumlah=0, float harga=0.0)

{

jumlah_buah = jumlah;

harga_buah = harga;

}

void info()

{

cout << "Jumlah jeruk : " << jumlah_buah << endl;

cout << "Harga jeruk : " << harga_buah << endl;

}

};

void main()

{

Buah buah;

Apel apel (6, 9000);

Jeruk jeruk (10, 5000);

apel.info();

jeruk.info();

buah = apel + jeruk;

buah.info();

}

Hasil output:

Jumlah apel : 6

Harga apel : 9000

Jumlah jeruk : 10

Harga jeruk : 5000

Total buah : 16

Total harga : 14000

Page 26: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 24

BAB 7

POLIMORFISME (OVERLOADING FUNGSI)

Pendahuluan Polimorfisme berasal dari bahasa Yunani yang berarti memiliki banyak bentuk. Dalam

C++, polimorfisme berarti sebuah fungsi anggota dengan nama yang sama tetapi memiliki jenis argumen dan atau jumlah argumen dan atau nilai kembali fungsi yang berbeda. Polimorfisme merupakan jenis overloading pada fungsi anggota sebuah kelas.

Dalam dunia nyata, contoh dari sebuah polimorfisme adalah sebagai berikut. Misalnya ada makanan nasi goreng dan buah pisang. Terdapat pernyataan sebagai berikut:

Mamat makan nasi goreng.

Mamat makan pisang.

Pada dua pernyataan di atas, Mamat melakukan pekerjaan makan. Tetapi cara Mamat memakan nasi goreng tentunya berbeda dengan cara Mamat makan pisang. Untuk memakan nasi goreng, Mamat perlu menggunakan sendok untuk memakannya. Sedangkan untuk memakan buah pisang, Mamat harus mengupas terlebih dahulu kulit pisangnya, baru kemudian dimakan menggunakan tangan.

Polimorfisme Untuk menjadikan sebuah fungsi anggota suatu kelas dalam C++ agar memiliki

kemampuan polimorfisme, caranya mudah. Cukup tuliskan fungsi tersebut apa adanya seolah-olah sebagai fungsi yang berdiri sendiri. Misalnya kita hendak membuat fungsi anggota Makan() dengan argumen fungsi berupa Nasi Goreng atau Pisang.

void Makan(NasiGoreng *nasgor)

{

cout << "Nyam nyam nyam..." << endl;

cout << "Nasi gorengnya enak..." << endl << endl;

}

void Makan(Pisang *pisang)

{

cout << "Nyam nyam nyam..." << endl;

cout << "Pisangnya enak..." << endl << endl;

}

Dalam hal ini respon yang diberikan fungsi anggota Makan() akan berbeda sesuai

dengan argumen yang diberikan: NasiGoreng atau Pisang.

Page 27: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 25

Latihan

Program di bawah ini memberikan gambaran mengenai sifat polimorfisme pada fungsi anggota sebuah kelas.

Program 7.1 poly.cpp

// Polymorphisme

#include <iostream.h>

class NasiGoreng

{

public:

NasiGoreng()

{

cout << "Nasi digoreng.. jadi Nasi Goreng." << endl;

cout << "Ditaro di piring. Ambil sendok." << endl;

}

~NasiGoreng()

{

cout << "Nasi gorengnya abis..." << endl;

}

};

class Pisang

{

public:

Pisang()

{

cout << "Pisang dipetik." << endl;

cout << "Dikupas dulu kulitnya." << endl;

}

~Pisang()

{

cout << "Pisangnya abis..." << endl;

}

};

class Manusia

{

public:

void Makan(NasiGoreng *nasgor)

{

cout << "Nyam nyam nyam..." << endl;

cout << "Nasi gorengnya enak..." << endl << endl;

}

void Makan(Pisang *pisang)

{

cout << "Nyam nyam nyam..." << endl;

cout << "Pisangnya enak..." << endl << endl;

}

};

Page 28: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 26

void main()

{

Manusia mamat;

NasiGoreng nasgor;

mamat.Makan (&nasgor);

Pisang pisang;

mamat.Makan (&pisang);

cout << "Program berakhir..." << endl << endl;

}

Hasil output:

Nasi digoreng.. jadi Nasi Goreng.

Ditaro di piring. Ambil sendok.

Nyam nyam nyam...

Nasi gorengnya enak...

Pisang dipetik.

Dikupas dulu kulitnya.

Nyam nyam nyam...

Pisangnya enak...

Program berakhir...

Pisangnya abis...

Nasi gorengnya abis...

Page 29: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer Ilkom Unpak Bogor 27

BAB 8

F R I E N D

Pendahuluan Konsep dasar dari pemrograman berorientasi obyek adalah pengkapsulan. Semua

fungsi atau kelas lain yang hendak mengakses elemen private dari sebuah kelas harus melalui fungsi anggota dalam kelas tersebut, tidak bisa langsung. Begitu pula elemen-elemen protected sebuah kelas hanya dapat diakses oleh kelas tersebut dan kelas-kelas turunannya. Hal ini dimaksudkan untuk menjaga konsep obyek secara murni.

Tetapi adakalanya kita memerlukan jalan pintas untuk menyederhanakan struktur program atau memecahkan permasalahan yang hanya dapat dilakukan apabila sebuah kelas atau fungsi dapat mengakses bagian private kelas lain. Maka diciptakanlah konsep fungsi atau kelas yang disebut dengan friend. Friend secara umum bertentangan atau telah melanggar konsep pengkapsulan pada OOP. Oleh karena itu, penggunaan friend sebaiknya dihindarkan atau jangan digunakan kecuali apabila benar-benar dibutuhkan. Kalaupun digunakan, jangan terlalu banyak friend yang dibuat karena akan meruntuhkan sifat pengkapsulan sebuah kelas. Analogi friend (teman) dalam dunia nyata adalah sebagai berikut.

Katakanlah anda tinggal di sebuah kamar kost yang berisi barang-barang pribadi. Tentunya anda tidak ingin teman Anda keluar masuk sesuka hati ke kamar anda. Tetapi ketika liburan tiba, anda harus kembali ke kampung halaman untuk satu bulan. Selama di kampung halaman, anda tidak ingin kamar anda kotor berdebu tidak terawat. Untuk itu anda menitipkan kunci kepada teman anda dan berpesan agar beliau merawat kamar anda selama anda pergi. Dalam hal ini, teman anda telah melanggar kebiasaan umum yaitu tidak boleh masuk sesuka hati ke kamar anda.

Fungsi Friend dan Kelas Friend Untuk menjadikan sebuah fungsi atau kelas menjadi friend bagi kelas lain, caranya

mudah. Misalnya ada sebuah kelas A, fungsi B dan kelas C. Kelas A ingin agar fungsi B dan kelas C menjadi friend baginya. Cukup tambahkan kata-kata friend di depan deklarasi fungsi B dan kelas C yang ditempatkan pada bagian public kelas A. Dengan cara ini, fungsi B dan kelas C dapat mengakses anggota data pada bagian private, protected dan public pada kelas A.

class A

{

public:

. . .

Page 30: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 28

friend void B();

friend class C;

};

Latihan

Program di bawah ini memberikan gambaran mengenai sifat friend pada sebuah fungsi yang digunakan untuk menentukan mana di antara dua buah obyek bertipe Manusia

yang lebih tua.

Program 8.1 poly.cpp

// Friend...

#include <iostream.h>

#include <string.h>

class Manusia

{

private:

char nama[30];

int umur;

public:

Manusia (char* Nama="", int Umur=0)

{

strcpy(nama, Nama);

umur = Umur;

}

void info()

{

cout << "Nama : " << nama << endl;

cout << "Umur : " << umur << endl << endl;

}

friend Manusia LebihTua (Manusia m1, Manusia m2);

};

void main()

{

Manusia mimin("Mimin", 32);

Manusia kokom("Kokom", 34);

Manusia siti("Siti", 29);

Manusia tertua;

mimin.info();

kokom.info();

siti.info();

cout << "Yang tertua di antara mereka adalah..." << endl << endl;

Page 31: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 29

tertua = LebihTua(mimin, kokom);

tertua = LebihTua(tertua, siti);

tertua.info();

}

Manusia LebihTua (Manusia m1, Manusia m2)

{

Manusia m;

m = (m1.umur >= m2.umur) ? m1 : m2;

return (m);

}

Hasil output:

Nama : Mimin

Umur : 32

Nama : Kokom

Umur : 34

Nama : Siti

Umur : 29

Yang tertua di antara mereka adalah...

Nama : Kokom

Umur : 34

Page 32: Pemrograman Berorientasi Obyek dengan C++

Laboratorium Komputer TI FT UIKA Bogor 30

DAFTAR PUSTAKA

Scott Robert Ladd, C++ Components and Algorithms, M&T Publishing,

Inc., 1992.

Dave Mark, Learn C++ on PC, Addison-Wesley, 1993.

Abdul Kadir, Pemrograman C++, Andi Offset, 1995.