0% menganggap dokumen ini bermanfaat (0 suara)
95 tayangan

Modul 3 - OOP in C++

Modul praktikum ini membahas konsep OOP dalam bahasa C++. Terdiri dari tujuan praktikum yaitu memahami konsep encapsulation, copy constructor, dan operator overloading. Materi teori meliputi penjelasan class, object, encapsulation, constructor, destructor, copy constructor, dan operator overloading. Studi kasus membuat program untuk menyimpan data penumpang pesawat beserta kelayakannya sebagai frequent flyer. Program dibuat menggunakan class Penumpang untuk mewakili objek penumpang.
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
95 tayangan

Modul 3 - OOP in C++

Modul praktikum ini membahas konsep OOP dalam bahasa C++. Terdiri dari tujuan praktikum yaitu memahami konsep encapsulation, copy constructor, dan operator overloading. Materi teori meliputi penjelasan class, object, encapsulation, constructor, destructor, copy constructor, dan operator overloading. Studi kasus membuat program untuk menyimpan data penumpang pesawat beserta kelayakannya sebagai frequent flyer. Program dibuat menggunakan class Penumpang untuk mewakili objek penumpang.
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 14

MODUL PRAKTIKUM STRUKTUR DATA

BAB 3 OOP IN C++

TUJUAN PRAKTIKUM
1. 2. 3. Praktikan dapat memahami konsep Object Oriented Programming Praktikan memahami mengimplementasikan konsep encapsulation Praktikan dapat menerepkan copy constructor dan operator overloading

PRASYARAT
1. 2. Praktikan menguasai dasar-dasar C++ Praktikan memahami definisi class dan object

Halaman 1 dari 14

DASAR TEORI
Class Class terdiri dari: data member, disebut juga field atau attribute, dan function member, disebut juga operation atau method. Encapsulation Adalah pengelompokan data dan fungsi pada class sesuai dengan hak aksesnya. Berguna untuk menyembunyikan detail internal dari pihak luar. Contoh penerapannya dengan menambahkan public: (hak akses publik, dapat diakses oleh class lain) atau private: (hak akses privat, tidak boleh diakses oleh class lain). Pada umumnya, data members memiliki hak akses private, sehingga dibuatlah fungsi getter/accessor untuk mengakses data tersebut, dan fungsi setter/mutator untuk mengubah nilai data tersebut. Contoh pada program adalah sebagai berikut: class SomeClass{ private: //data member int _myInt; public: //getter void setMyInt(int myInt) //setter int getMyInt() } Object Ketika sebuah variabel bertipe class dideklarasikan maka sebuah objek dibentuk (diinstansiasi). Untuk mengakses data atau fungsi public dari suatu objek, kita dapat gunakan operator dot . Constructor Method yang memiliki nama sama dengan nama class dinamakan constructor. Constructor secara otomatis pada saat pembuatan objek. Constructor tanpa parameter disebut dengan default constructor, dan disediakan secara otomatis apabila class tidak membuat constructor. Sama halnya dengan fungsi, constrcutor juga dapat mengalami overload. Selain itu, pada constructor, juga dapat anda tambahkan initializer list untuk alternatif inisialiasi data member. Contoh constructor: class SomeClass{ public: //default constructor SomeClass() {} //constuctor dengan satu parameter SomeClass(int myInt) :_myInt = myInt //initializer list { } }

{ _myInt = myInt; }

{ return _myInt; }

Halaman 2 dari 14

Header Guard Header guard digunakan untuk memastikan setiap class didefinisikan hanya sekali. Misalkan nama file SomeClass.h, gunakan nama SOMECLASS_H pada header guard file tersebut. Contoh: #ifndef SOMECLASS_H #define SOMECLASS_H // deklarasi class #endif Operator Overloading Dalam C++, kita dapat mendefinisikan ulang perilaku operator berikut: + - ++ -- * / < > == != << >> dan lain sebagainya. Contoh deklarasinya pada file .h adalah tipereturn operator op(parameter) dengan tipereturn adalah tipe kembalian dari operator, op adalah simbol dari operator seperti ==, dan parameter adalah operand, contohnya a == b menjadi bool operator ==(SomeClass a, SomeClass b) Destructor Destructor adalah fungsi spesial yang dipanggil saat objek dihapus. Dihapus di sini dapat berarti dua hal: pertama, saat objek berada diluar scope (saat deklarasi objek hingga akhir blok } dalam blok dimana objek dideklarasikan), dan kedua saat objek dihapus secara eksplisit dengan memanggil delete. Nama destructor adalah nama dari class diawali dengan tilde ~, dan tidak memiliki parameter maupun return type. Satu kelas hanya memiliki satu destructor saja. Contoh destructor: class SomeClass{ ... //deklarasi Destructor ~SomeClass(); } Copy Constructor Copy Constructor adalah suatu constructor yang dipanggil saat pembuatan objek baru dengan parameter objek lain dengan tipe/dari class yang sama. Data member objek lain tersebut di-copy-kan ke objek baru. Parameter dari copy constructor adalah referensi konstan objek lain. dipanggil saat objek baru pertama kali diinisialisasi: secara eksplisit SomeClass objek1 = objek2; atau SomeClass objek1(objek2); secara implisit, misal saat pass by value, dimana objek di-copy ke dalam variabel paramater fungsi.

Contoh copy constructor: // SomeClass.h class SomeClass{ ... //deklarasi Copy Constructor SomeClass(const SomeClass& someClassLain); } // SomeClass.cpp SomeClass:: SomeClass(const SomeClass& someClassLain) { _myInt = someClassLain.getMyInt(); }
Halaman 3 dari 14

STUDI KASUS 3.1


Deskripsi Problem Anda diterima di perusahaan Emprit Airlines. Bos Anda menyuruh Anda membuat sebuah program untuk menyimpan data penumpang pesawat pada perusahaan tersebut. Data seorang penumpang terdiri dari: 1. nama dalam satu kata, 2. jumlah jarak tempuh dalam mil (mileage) perjalanan yang telah dilaluinya. Emprit Airlines ini memberikan banyak bonus kepada penumpang yang merupakan frequent flyer dari Airlines tersebut. Frequent flyer adalah penumpang dengan mileage >= 500 mil. Bonus tersebut didaftarkan sebagai berikut: MILEAGE 500 1000 1001 1500 > 1500 BONUS miniatur pesawat voucher belanja tiket PP gratis Eropa

Input 1 Pada baris pertama, ada sebuah integer positif (n) yang menandakan banyaknya data penumpang. Pada n baris selanjutnya, setiap baris berisi data penumpang dengan urutan: nama_penumpang<spasi>jumlah_mileage. Nama_penumpang merupakan string dan jumlah_mileage dalam int. Tulis program Anda dalam file FrequentFlyer.cpp. Output 1 Output berupa tampilan semua nama penumpang beserta pernyataan apakah penumpang tersebut merupakan frequent flyer atau tidak. Jika ya, tampilkan NAMA frequent flyer mendapat bonus BONUS, jika tidak NAMA bukan frequent flyer, dimana NAMA adalah nama penumpang dan BONUS adalah bonus yang didapat. Contoh Input 1 4 Abadi 2014 Breki 500 Kalvin 274 Wu 1302 Contoh Output 1 Abadi frequent flyer mendapat bonus tiket PP gratis Eropa Breki frequent flyer mendapat bonus miniatur pesawat Kalvin bukan frequent flyer Wu 1994 frequent flyer mendapat bonus voucher belanja Input 2 Selain itu, Anda juga diberikan program TesPenumpang.cpp yang dapat Anda lihat pada lampiran Listing 3.1.1. Program itu menggunakan Penumpang.h dan Penumpang.cpp yang harus Anda tulis Output 1 Jika class Anda diimplementasikan dengan benar, setelah menjalankan program TesPenumpang.cpp, anda akan memperoleh output:
Halaman 4 dari 14

Anonim bukan frequent flyer Andreas frequent flyer mendapat bonus miniatur pesawat Isnawan bukan frequent flyer Isnawan frequent flyer mendapat bonus voucher belanja Abadi frequent flyer mendapat bonus miniatur pesawat Yoas bukan penumpang Empirit Airlines lagi

Halaman 5 dari 14

Listing 3.1.1 TestPenumpang.cpp

Halaman 6 dari 14

SOLUSI STUDI KASUS 3.1


Code Lampiran Listing 3.1.2 Penumpang.h Lampiran Listing 3.1.3 Penumpang.cpp Lampiran Listing 3.1.4 FrequentFlyer.cpp Penjelasan A. Penumpang.h Baris 23 Default constructor tidak berisi parameter. Dipanggil pada TesPenumpang.cpp baris 9 dan 22. Baris 26 Constructor dengan dua parameter untuk semua data member. Dipanggil pada TesPenumpang.cpp baris 10 dan 27. Parameter kedua memiliki default value sehingga constructor dapat dipanggil dengan hanya satu argumen. Juga dipanggil pada TesPenumpang.cpp baris 11. Baris 28 Copy constructor digunakan untuk membuat obyek Penumpang baru, yang nilai data membernya diambil dari penumpangLain. Dipanggil pada TesPenumpang.cpp baris 14 dan 17, perhatikan kedua cara berbeda dalam memanggil copy constructor. Dapatkah Anda jelaskan TesPenumpang.cpp baris 17-18 dan output pada baris 19-20? Baris 41-42, 45-46 Getter dan setter diimplementasikan di header file. B. Penumpang.cpp Baris 21-25 Copy constructor menginisialisasi data member dengan nilai data member obyek Penumpang yang lain. Parameter copy constructor adalah referensi terhadap obyek lain yang bertipe sama. Baris 29-32 Destructor akan print nama penumpang dan pesan saat obyek dihapus. Dipanggil saat obyek yang ditunjuk pointer pp2 dihapus, pada TesPenumpang.cpp baris 28. Dan juga dipanggil saat program berakhir, Anda dapat melihatnya sekilas sebelum console keluar. Baris 36-39 Penumpang naik pesawat yang menempuh jarak miles mil, menambah mileage penumpang tersebut. Baris 42-45 Penumpang adalah seorang frequent flyer apabila ia telah menempuh paling tidak FREQ_FLYER_MILES mil bersama Emprit Airlines sepanjang hidupnya. C. FrequentFlyer.cpp
Halaman 7 dari 14

Baris 16-23 Loop diulang sebanyak jmlPenumpang. Input diterima dalam variabel string nama dan int mileage. Setiap input yang diterima maka akan dibuat pointer to objek Penumpang dan dipanggil fungsi toString()-nya untuk mencetak info apakah penumpang tersebut merupakan frequent flyer atau tidak.

Listing 3.1.2 Penumpang.h

Halaman 8 dari 14

Halaman 9 dari 14

Listing 3.1.3 Penumpang.cpp

Halaman 10 dari 14

Halaman 11 dari 14

Listing 3.1.4 FrequentFlyer.cpp

Halaman 12 dari 14

TAKE HOME 3 KABISAT OF THE YEAR

Deskripsi Problem Belakangan ini, masyarakat Indonesia sedang ramai membicarakan event Indonesian Odol ajang orang-orang unjuk muka cemerlang dengan modal odol mereka. Event Indonesian Odol ini ternyata membuka audisi di berbagai tempat, salah satunya Jogja. Ada kabar angin bahwa terdapat suatu sistem yang sangat aneh pada audisi tersebut. Ternyata calon Indonesian Odol yang dapat masuk alias lolos audisi hanyalah mereka yang lahir pada tahun kabisat. Waow. Dan kebetulan, teman anda bernama Pepsidin sangat antusias dan optimis dalam mengikuti audisi di kota Jogja. Namun begitu, keoptimisan Pepsidin pun tidak lepas akan kekhawatirannya pada rumor sistem tersebut. Sayangnya, Pepsidin tidak tahu apakah tanggal lahirnya berpada pada tahun kabisat bahkan tidak tahu apakah itu tahun kabisat. Pepsidin minta bantuan anda, untuk membuatkan program yang dapat mengetahui apakah tanggal lahir Pepsidin berada pada tahun kabisat atau tidak. Selain itu, dia juga minta untuk ditambahkan pada program tersebut, untuk mencetak informasi tanggal serta mengecek tanggal lahir Jolly dan tanggal lahir orang lain, manakah yang lebih duluan. Tahun Kabisat adalah tahun yang habis dibagi 400 ATAU habis dibagi 4 DAN tidak habis dibagi 100. Contohnya adalah: Tahun 2014 bukan tahun kabisat, karena tidak habis dibagi 4 maupun 400 Tahun 2016 adalah tahun kabisat, karena habis dibagi 4 dan tidak habis dibagi 100, Tahun 2100 bukan tahun kabisat, karena habis dibagi 4 tapi habis dibagi 100, Tahun 2400 adalah tahun kabisat, karena habis dibagi 400. Input Input berupa dua tanggal dipisahkan oleh spasi. Untuk setiap tanggal harus memenuhi format dd/mm/yyyy, dengan dd adalah tanggal ditulis dalam 2 digit angka, mm adalah bulan ditulis dalam 2 digit angka, dan yyyy adalah tahun ditulis dalam 4 digit angka. Output Untuk setiap tanggal, cetak informasi tanggal tersebut Tanggal : d Bulan : namaBulan (n hari) Tahun : y (tahun kabisat/bukan tahun kabisat) Informasi pada setiap tanggal diakhiri oleh satu baris enter kosong. Pada akhir output, cetak perbandingan tanggal pertama dengan tanggal kedua, apakah kurang dari (lebih dulu), sama dengan, atau lebih dari, dengan d adalah tanggal, namaBulan adalah nama dari bulan, n adalah jumlah hari pada bulan tersebut, dan y adalah tahun.
Halaman 13 dari 14

Informasi nama bulan dan jumlah hari: BULAN 1 2 3 4 5 6 7 8 9 10 11 12

NAMA BULAN Januari Februari Maret April Mei Juni Juli Agustus September Oktober November Desember

JUMLAH HARI 31 28 (tahun non-kabisat) 29 (tahun kabisat) 31 30 31 30 31 31 30 31 30 31

Contoh Input 1 04/03/2014 02/02/2020 Contoh Output 1 Tanggal : 4 Bulan : Maret (31 hari) Tahun : 2014 (bukan tahun kabisat) Tanggal Bulan Tahun : 2 : Februari (29 hari) : 2020 (tahun kabisat)

Contoh Input 3 02/01/2016 22/01/2016 Contoh Output 3 Tanggal : 2 Bulan : Januari (31 hari) Tahun : 2016 (tahun kabisat) Tanggal Bulan Tahun : 22 : Januari (31 hari) : 2016 (tahun kabisat)

04/03/2014 kurang dari 02/02/2020

02/01/2016 kurang dari 22/01/2016

Contoh Input 2 22/10/2015 10/06/2015 Contoh Output 2 Tanggal : 22 Bulan : Oktober (31 hari) Tahun : 2015 (bukan tahun kabisat) Tanggal Bulan Tahun : 10 : Juni (30 hari) : 2015 (bukan tahun kabisat)

Contoh Input 4 20/02/2002 20/02/2002 Contoh Output 4 Tanggal : 20 Bulan : Februari (28 hari) Tahun : 2002 (bukan tahun kabisat) Tanggal Bulan Tahun : 20 : Februari (28 hari) : 2002 (bukan tahun kabisat)

22/10/2015 lebih dari 10/06/2015

20/02/2002 sama dengan 20/02/2002

Halaman 14 dari 14

Anda mungkin juga menyukai