Modul 3 - OOP in C++
Modul 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
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
Halaman 6 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.
Halaman 8 dari 14
Halaman 9 dari 14
Halaman 10 dari 14
Halaman 11 dari 14
Halaman 12 dari 14
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
NAMA BULAN Januari Februari Maret April Mei Juni Juli Agustus September Oktober November Desember
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)
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)
Halaman 14 dari 14