Anda di halaman 1dari 22

Halaman 1 dari 22

MODUL PRAKTIKUM
STRUKTUR DATA
BAB 4 INHERITANCE, POLYMORPHISM, EXCEPTION

TUJUAN PRAKTIKUM
1. Praktikan memahami konsep Inheritance dan penerapannya
2. Praktikan memahami konsep polymorphism dan penerapannya (override fungsi, fungsi virtual,dynamic dispatch)
3. Praktikan memahami dan dapat menerapkan exception handling
PRASYARAT
1. Praktikan mengerti konsep class dan object, termasuk data member dan function member
2. Praktikan memahami perbedaan dan penggunaan access modifier public, private, protected
3. Praktikan mengerti penggunaan header file


Halaman 2 dari 22


DASAR TEORI
Inheritance
Suatu class dapat mewarisi data dan fungsi dari class lain, dan dapat menambah/merubah data dan fungsinya sendiri. Suatu
hubungan inheritance antar dua class dapat dituliskan dalam A is a B, dimana A akan mewarisi data dan fungsi class B. A
disebut subclass dari B, dan B disebut superclass dari A.
Cara melakukan inheritance dalam C++ adalah:
class A: public B { ... };

Access Modifier: Protected
Access modifier protected akan membuat suatu data atau fungsi dari superclass HANYA dapat diakses oleh subclass-
subclassnya.
Semua data dan fungsi non-private pada superclass akan secara otomatis diturunkan ke subclassnya, sehingga tidak perlu
melakukan deklarasi ulang di bagian subclass.
Contohnya pada program:
class A{
protected:
int _myInt;
public:
void function1(){}
};

Class B: public A{
public:
void function2(){}

// secara otomatis kelas B sudah memiliki int _myInt
// dan void function1() yang diturunkan dari kelas A
// tanpa harus dituliskan dalam kelas B
};

Has-a relation
Relasi has-a (mempunyai sebuah) dapat dimodelkan dengan data member pada suatu class. Contohnya, jika A has-a B,
maka dapat dituliskan dalam program:
Class B { ... };

Class A {
private:
B _objekB;
};

Function Overriding
Function Overridding terjadi apabila fungsi pada subclass memiliki function prototype yang sama dengan fungsi superclass-
nya.

Halaman 3 dari 22


Contoh function overridding:
class A{
public:
int foo(string &s, int i){ ... }
};

Class B: public A{
public:
// override fungsi foo(string&, int)
int foo(string &s, int i){ ... }
};

Pada contoh code di atas, kita dapat memanggil foo milik kelas A di kelas B dengan A::foo( ... )
Initializer List
Data member yang harus diinisialisasi dalam initializer list:
1. pemanggilan constructor superclass,
2. member objek dari class yang tidak memiliki default constructor,
3. const member,
4. reference member.
Data member superclass tidak dapat diinisialisasi dalam initializer list.
Polymorphism
Polymorphism terjadi ketika suatu pointer superclass diisikan untuk menunjuk objek subclassnya. Untuk memanggil fungsi
yang dimiliki oleh subclass (yang telah dioverride) gunakan virtual pada fungsi milik superclass.
Contoh polymorphism:
class Pet{
public: virtual void speak() {cout << Hello! << endl;}
};

class Dog: public Pet{
public: void speak() {cout << Woof! << endl;}
};

int main()
{
Pet *pet;
Dog dog;
pet = &dog; pet->say(); // outputnya Woof
// jika tanpa virtual, outputnya Hello
}

Exception
Exception terdiri atas dua komponen:
1. Exception Signaling

Halaman 4 dari 22


yaitu memberitahu bahwa telah terjadi error dengan melempar/throw suatu exception.
Syntaxnya adalah: throw objekException; dimana objekException dapat berupa primitive data (int,
double), string, maupun objek suatu class.
Statement dibawah throw tidak dijalankan apabila throw dijalankan (seperti return).

2. Exception Handling
Exception yang dilempar ditangani oleh blok exception handling.
Syntaxnya adalah:

try {
<statement
2
yang mungkin throw exception>
} catch (tipeDataException e) {
<statement menangani error / handler>
}

catch(...) dapat digunakan untuk menangkap semua bentuk exception (default catch).
Block try dapat diikuti oleh lebih dari satu blok catch, dan block catch harus mengikuti sebuah blok try.
Contoh exception dalam program:
double bagi(double a, double b)
{
if(b==0) throw string(imposibru!);
return a/b;
}

int main()
{
int a = 0, b = 10;
try
{
cout << bagi(a,b) << endl; // 0.0
cout << bagi(b,a) << endl; // imposibru
}
catch(string e)
{
cout << e << endl;
}
}



Halaman 5 dari 22


STUDI KASUS 4.1
Deskripsi Problem
Anda memainkan sebuah game bernama Square Game, sebuah game sederhana yang terdiri dari sebuah board
(papan), sebuah pion, dan sebuah dadu.
Pada game ini, papan terdiri dari square (kotak) sebanyak size, dengan setiap square diberi nomor 0 sampai size-1.
Game dimulai dengan pion pada square 0 dan score 0. Dadu kemudian dilempar dan pion digerakkan sebanyak nilai
muka dadu ke sebuah square.
Ada 2 tipe square: square biasa dan square bonus. Keduanya memiliki nilai poin yang dapat bernilai positif atau negatif,
namun square bonus juga memiliki nilai bonus. Apabila dalam permainan didapati pion pada square biasa, nilai score
ditambahkan sesuai nilai poin square tersebut. Namun, bila pion berada pada square bonus setelah bergerak, pertama
nilai score akan dikalikan dengan nilai bonus, baru kemudian ditambahkan nilai poin.
Anda diberikan serangkaian nilai muka hasil pelemparan dadu. Simulasikan jalannya permainan, dan berikan score akhir.
Jika didapai nilai dadu yang membuat pion bergerak melebihi square terakhir (square size-1), maka gerakan pion
dilanjutkan ke square 0.

Input
Input dimulai dengan sebuah angka size, dengan 1 <= size <= 1000, merepresentasikan banyaknya square. Input
kemudian diikuti oleh size baris yang masing-masing terdiri dari dua atau tiga angka. Angka pertama mengindikasikan tipe
square, dengan 0 adalah square biasa dan 1 adalah square bonus. Square biasa diikuti sebuah angka yang menandakan
poin, dan square bonus diikuti satu lagi angka yang menandakan bonus.
Baris terakhir input menandakan hasil-hasil pelemparan dadu untuk Anda simulasikan, diakhiri dengan end-of-file
(Ctrl+Z pada Windows, Ctrl+D pada Mac OS X).

Output
Output memiliki format "Score akhir = <score>", dimana <score> adalah nilai score pada akhir game, diberikan
dengan presisi dua angka di belakang titik. Output diakhiri oleh satu baris enter.

Contoh Input
5
0 5.25
0 -3.14
1 2.17 1.50
0 5.39
1 -3.32 2.00
3 3 1 2

Contoh Output
Score akhir = 7.77


Penjelasan Output
Pada giliran pertama, pion berpindah ke square 3, tambah poin 5.39 sehingga score 5.39.
Pada giliran kedua, pion berpindah ke square 1, tambah poin -3.14 sehingga score 2.25.
Pada giliran ketiga, pion berpindah ke square 2, kalikan score dengan 1.5 lalu tambah 2.17 sehingga score 5.545.
Pada giliran keempat, pion berpindah ke square 4, kalikan score dengan 2 lalu tambah -3.32 sehingga score 7.77

Halaman 6 dari 22


Penjelasan File Program
Gunakan prinsip inheritance dan polymorphism dalam menyelesaikan problem ini. Tuliskan dalam file header dan
implementation untuk class Square dan BonusSquare; serta class SquareGame dan fungsi main dalam file
SquareGame.cpp.

Penjelasan File Program
Gunakan prinsip inheritance dan polymorphism dalam menyelesaikan problem ini. Tuliskan dalam file header dan
implementation untuk class Square dan BonusSquare; serta class SquareGame dan fungsi main dalam file
SquareGame.cpp.

Penjelasan Tes Program
Anda diberikan 8 test case pada file game1.in s/d game8.in.
Anda tidak perlu mengetikkan setiap baris input pada setiap test case tersebut, namun gunakanlah tehnik IO redirection
untuk membaca data tes:
1. Compile and Run source code Anda, sehingga Anda mendapatkan file nama_project.exe, contoh: SquareGame.exe
[PENTING: jika anda menggunakan codeblock, file tersebut terletak pada folder bin\Debug dalam forlder project anda.
Pindahkan file tersebut di luar (satu folder di atas bin)]
2. Copy file input ke dalam folder dimana file program Anda berada,
3. Buka command prompt pada folder tersebut (Shift + klik kanan folder, pilih Open command window here),
4. Ketikkan SquareGame <game1.in,
[Jika file input dan output anda masih berada dalam folder input dan output, anda dapat juga mengetikkan
SquareGame <input\game1.in]
5. Output program akan keluar, bandingkan hasilnya dengan isi file output, misal game1.out.
[Anda juga dapat menuliskan output pada file dengan mengetikkan SquareGame <game1.in >output.out, jika file
output.out tidak ada dalam folder, maka akan otomatis dibuat]



Halaman 7 dari 22


SOLUSI STUDI KASUS 4.1
Code
Lampiran Listing 4.1.1 Square.h
Lampiran Listing 4.1.2 Square.cpp
Lampiran Listing 4.1.3 BonusSquare.h
Lampiran Listing 4.1.4 BonusSquare.cpp
Lampiran Listing 4.1.5 SquareGame.cpp

Penjelasan

A. Square.h
Header file class Square yang memodelkan square biasa.

Baris 7-8, 23
Header/include guard ini penting, tanpanya program tidak akan compile. Tahukah mengapa?

Baris 11, 14
Data _poin dideklarasikan protected agar diturunkan/diwariskan ke class BonusSquare.

Baris 20
Fungsi updateScore dideklarasikan virtual untuk memanfaatkan polymorphism pada class SquareGame baris
54: fungsi ini dipanggil lewat pointer superclass Square yang menunjuk ke obyek Square atau obyek
BonusSquare, subclassnya.

B. Square.cpp
Implementasi constructor class Square dan fungsi updateScore.

Baris 17
Fungsi updateScore mengupdate score game dgn menambah poin pd obyek Square tersebut.

C. BonusSquare.h
Header file class BonusSquare yang memodelkan square bonus.

Baris 9
Include header file superclassnya.

Baris 11
Class BonusSquare merupakan subclass (diturunkan dari) class Square.

Baris 12-13
Ada data tambahan private _bonus selain dari data yang diwarisi dari class Square.

D. BonusSquare.cpp
Implementasi constructor class BonusSquare dan fungsi updateScore.

Baris 9
Constructor class BonusSquare memanggil constructor superclassnya dengan initializer list, dan
menginisialisasi data membernya pada body.

Halaman 8 dari 22


Baris 17
Fungsi updateScore mengoverride fungsi superclassnya, memberikan implementasi baru
dalam mengupdate score: kalikan dulu dengan bonus baru ditambah poin.

E. SquareGame.cpp
File berisi implementasi Class SquareGame dan fungsi main.

Baris 19-22
Data suatu game SquareGame meliputi ukuran board (banyaknya square), posisi pion, score,
dan konfigurasi square pada board yang dapat berupa square biasa atau bonus, disimpan dalam
array pointer Square: board.

Baris 28-34
Constructor menginisialisasi game: papan dibentuk sesuai ukuran dari user, posisi pion mulai
dari square 0, score mulai dari 0.0, dan array pointer Square diinisialisasi sebesar banyaknya
square.

Baris 38-41
Fungsi untuk membentuk square biasa pada array di index posisi.

Baris 45-48
Fungsi untuk membentuk square bonus pada array di index posisi.

Baris 53-57
Fungsi untuk memainkan satu langkah game dengan parameter nilai dadu yang dilempar.
Posisi pion maju sebesar nilai dadu tersebut, namun berbalik ke square awal bila melebihi ukuran board.
Polymorphism terjadi pada saat update score: pointer superclass Square _board[_posisi] yang berisi alamat
obyek superclass Square atau subclass BonusSquare memanggil fungsi virtual updateScore.
Score akan diupdate sesuai tipe square: square biasa atau square bonus.

Baris 72, 73, 76
User memberikan ukuran board, digunakan untuk inisialisasi game dan mengetahui banyaknya
baris input selanjutnya yang berisi konfigurasi square.

Baris 76-90
Semua square pada board diset berdasarkan input user, sesuai dengan tipenya.

Baris 95-98
Game dimainkan berdasarkan input nilai dadu user, diakhiri dengan end-of-file (Ctrl+Z pada
Windows, Ctrl+D pada MAC OS X).

Baris 102-103
Output score terakhir setelah input nilai muka dadu selesai sesuai format pada soal. Untuk
presisi dua angka di belakang titik, digunakan dua manipulator iomanip: fixed dan setprecision.
Bisa juga dengan printf seperti yang telah Anda kuasai saat Alpro.




Halaman 9 dari 22




Listing 4.1.1 Square.h

Halaman 10 dari 22





Listing 4.1.2 Square.cpp

Halaman 11 dari 22





Listing 4.1.3 BonusSquare.h

Halaman 12 dari 22




Listing 4.1.4 BonusSquare.cpp

Halaman 13 dari 22






Listing 4.1.5 SquareGame.cpp

Halaman 14 dari 22





Halaman 15 dari 22




Halaman 16 dari 22


STUDI KASUS 4.2
Deskripsi Problem
Setelah trend Vickynisasi, muncul trend baru bernama Alay Galau. Teman Anda yang lebay meminta bantuan Anda
untuk dibuatkan sebuah program untuk mengubah bahasa normal menjadi bahasa Alay ataupun Galau. Teman lebay
Anda memberitahu rahasia dari bahasa mereka, yaitu setiap huruf AIEO akan berubah menjadi 4130 untuk bahasa alay,
dan ketika mereka galau akan ada tambahan #akurapopo bila huruf terakhir merupakan vokal, dan #yopopo apabila huruf
terakhir konsonan. Selain itu, mereka tidak merubah keseluruhan kata, melainkan hanya sebagian kata sesuai keinginan
mereka.

Input
Input terdiri dari satu baris, diawali sebuah karakter A untuk bahasa Alay atau G untuk bahasa Galau, kemudian kata
yang akan diubah, lalu sebuah integer >= 0 yang menandakan posisi dari kata yang akan diambil, dan sebuah integer > 0
yang menandakan banyaknya huruf yang akan diambil. Setiap bagian dipisahkan oleh spasi.

Output
Output terdiri dari sebuah baris hasil kata yang telah diubah menjadi bahasa Alay atau Galau.
Output akan memberikan pesan error melalui exception apabila posisi melebihi panjang kata atau salah input tipe.

Contoh Input 1
G strukdat 2 6

Contoh Output 1
trukda#akurapopo

Contoh Input 2
A sampelalay 4 7

Contoh Output 2
p3l4l4y

Contoh Input 3
G testexception 1 14

Contoh Output 3
Posisi melebihi panjang kata!

Contoh Input 4
P bananabanana 2 4

Contoh Output 4
Bahasa tidak dikenali!



Halaman 17 dari 22


SOLUSI STUDI KASUS 4.2
Code
Lampiran Listing 4.2.1 AlayGalau.cpp

Penjelasan
Baris 8
Include library stdexcept untuk menggunakan exception pada C++

Baris 15-18
Data member dari kelas Lebay, dimana _kata akan menyimpan kata inputan asli yang diinputkan oleh user, _prefix akan
menampung hasil perubahan bahasa dari _kata, _pre adalah posisi awal dari kata yang akan diambil, dan _pos adalah
panjang kata yang diambil.

Baris 31
Fungsi cetak akan mencetak hasil perubahan kata asli sesuai bahasanya (yang disimpan dalam_prefix ). Fungsi ini diberi
virtual supaya subclass dari kelas Lebay dapat mengoverride fungsi cetak ini.

Baris 36-49
Deklarasi kelas Alay yang merupakan turunan dari kelas Lebay. Kelas Alay akan mengoverride fungsi cetak milik kelas Lebay.
Pada fungsi cetak tersebut, perhatikan bahwa ketika pengambilan posisi dan panjang kata yang akan diubah lebih dari
panjang kata yang asli, maka fungsi cetak akan melempar exception out_of_range berisi pesan error Posisi
melebihi panjang kata!. Lengkapilah code untuk constructor dan fungsi cetak tersebut untuk mengubah suatu kata
ke dalam bahasa Alay!
Baris 51-63
Deklarasi kelas Galau yang merupakan turunan dari kelas Lebay. Seperti kelas Alay, kelas Galau juga mengoverride fungsi
cetak. Lengkapilah code untuk constructor fungsi cetak tersebut untuk mengubah suatu kata ke dalam bahasa Galau!

Baris 69, 76, 81
Deklarasi pointer to objek Lebay dimana nantinya akan diisi oleh alamat yang menunjuk objek Alay atau Galau. Perhatikan
line 76 dan 81 dimana terjadi polimorfisme. Karena fungsi cetak milik kelas Lebay sudah dibuat virtual, maka meskipun
pointer lebay merupakan pointer to objek Lebay, namun fungsi cetak yang dipanggil pada line 76 dan 81 akan memanggil
fungsi cetak milik subclass-nya.

Baris 86
Ketika tipe bahasa yang dipilih tidak sesuai, maka program akan melempar exception berupa string dengan pesan
Bahasa tidak dikenali!

Baris 89-94
Blok catch dimana exception yang akan dicek pertama kali adalah exception berupa out_of_range, kemudian exception
berupa string. Bagaimana jika ternyata di dalam blok try, terjadi pelemparan exception dengan tipe lain (selain
out_of_range dan string), apa yang terjadi?

Halaman 18 dari 22





Listing 4.2.1 AlayGalau.cpp

Halaman 19 dari 22





Halaman 20 dari 22


TAKE HOME 4 #akuRapopo KELUD REFUGEEGEEGEE

Deskripsi Problem
Akibat erupsi gunung Kelud yang terjadi pada hari Valentine 2014, jumlah pengungsi pun semakin banyak. Karena
keterbatasan sumber daya, maka diperlukan sebuah system untuk mengelola informasi tempat pengungsian.
Leo, seorang relawan berprofesi programmer C++ yang sudah mempelajari Object Oriented Programming, ingin membantu
para pengungsi dalam mengelola informasi mengenai tempat pengungsian yang tersedia. Tempat pengungsian tersebut
memiliki batas jumlah pengungsi sesuai dengan jenis pengungsiannya:
1. Pengungsian Campur: Pengungsian yang berisi pengungsi pria dan wanita.
Daya tampung maksimal dari pengungsian ini 200 pengungsi.
2. Pengungsian Macho: Pengungsian khusus untuk pengungsi pria.
Daya tampung dari pengungsian jenis ini adalah 100 pengungsi.
3. Pengungsian Cantik: Pengungsian khusus untuk wanita.
Daya tampung dari pengungsian ini adalah 100 pengungsi.
Sayangnya tidak semua pengungsian yang ada dapat menampung jumlah pengungsi. Beberapa pengungsi harus mengalah
karena penuhnya tempat pengungsian yang ada. Kesedihan akibat bencana dan tidak adanya tempat untuk tinggal ini,
membuat kegalauan besar di dalam hati pengungsi yang tidak dapat masuk dalam pengungsian. Maka dari itu, para
pengungsi yang berhasil masuk lebih dulu dalam pengungsian kemudian menghibur mereka, dengan menyetuskan hashtag
#koweRapopo untuk para pengungsi pria dan #duhDek untuk para pengungsi wanita yang tidak kebagian tempat
pengungisan.

Input
Input diawali suatu bilangan N, yaitu jumlah pengungsian yang ada. 0 < N < 10.
N baris berikutnya berisi informasi untuk setiap pengungsian, berupa nama, tipe, dan jumlah_awal_pengungsi, dipisahkan
oleh spasi. Untuk tipe, 0 melambangkan Pengungsian Campur, 1 melambangkan Pengungsian Macho, dan 2 melambangkan
Pengungsian Cantik. Jumlah_awal_pengungsi tidak melebihi daya tampung pengungsian (200 untuk Pengungsian Campur,
dan 100 untuk Pengungsian Macho dan Cantik)

Input dilanjutkan dengan bilangan K, banyaknya aktivitas pada pengungsian. K > 0.
K baris berikutnya berisi informasi untuk setiap aktivitas, berupa nomor_pengungsian, jumlah_wanita, dan jumlah_pria.
dengan:
0 < nomor_pengungsian <= N; 0 <= jumlah_wanita, jumlah_pria <= 200
nomor_pengungsian melambangkan urutan pengungsian yang dibuat, dimulai dari 1. jumlah_wanita dan jumlah_pria
melambangkan banyaknya wanita dan pria yang masuk ke pengungsian.
Pada pengungsian campuran, pengungsi wanita akan diutamakan

Halaman 21 dari 22


Output
Output dari program adalah hasil eksekusi program diakhiri dengan informasi akhir setiap pengungsian.

Untuk setiap aktivitas yang ada, tampilkan dalam satu baris #<x> dengan <x> adalah nomor aktivitas dimulai dari 1,
dilanjutkan dengan status OK jika aktivitas aman.
Jika aktivitas tidak aman, dalam arti:
1. Terdapat pria yang masuk dalam pengungsian Cantik,
2. Terdapat wanita yang masuk dalam pengungsian Macho,
3. Jumlah pengungsi yang akan masuk dalam pengungsian melebihi sisa kapasitas pengungsian,
Maka tulis #koweRapopo <p> atau #duhDek <w> jika terdapat pria atau wanita yang tidak berhasil masuk dalam
pengungsian, dengan <p> adalah jumlah pria yang gagal masuk pengungsian dan <w> adalah jumlah wanita yang gagal
masuk pengungsian.

Di akhir output, untuk setiap pengungsian, tampilkan dalam satu baris:
[<n>] nama_pengungsian (tipe_pengungsian) jumlah_akhir_pengungsi
Dengan
<n> adalah nomor urut pengungsian,
nama_pengungsian adalah nama pengungsian,
tipe_pengungsian adalah tipe pengungsian (Campur, Macho, atau Chibi),
jumlah_akhir_pengungsi adalah jumlah akhir pengungsi dalam pengungsian tersebut.

Output aktivitas dan informasi pengungsian dipisahkan oleh satu baris kosong.
Semua output disimpan dalam file kelud.txt

Contoh Input 1
3
Jawara 1 10
Chibi 2 60
Mugiwara 0 150
5
1 0 75
2 6 0
3 10 10
2 6 20
3 40 10

Contoh Output 1
#1 OK
#2 OK
#3 OK
#4 #koweRapopo 20
#5 #duhDek 10 #koweRapopo 10

[1] Jawara (Macho) 85
[2] Chibi (Cantik) 72
[3] Mugiwara (Campur) 200



Halaman 22 dari 22


Penjelasan Contoh Input Output 1
Pada contoh input 1, terdapat 3 pengungsian yaitu:
1. Jawara, Pengungsian Macho, terisi 10 pengungsi,
2. Chibi, Pengungsian Cantik, terisi 60 pengungsi,
3. Mugiwara, Pengungsian Campur, terisi 150 pengungsi,

Terdapat 5 aktivitas:
1. 0 wanita dan 75 pria masuk ke pengungsian nomor 1 (Jawara)
karena Jawara adalah pengungsian Macho, maka aktivitas ini aman,
jumlah pengungsi di Jawara sekarang = 10 + 75 = 85

2. 6 wanita dan 0 pria masuk ke pengungsian nomor 2 (Chibi)
karena Chibi adalah pengungsian Cantik, maka aktivitas ini aman,
jumlah pengungsi di Chibi sekarang = 60 + 6 = 66

3. 10 wanita dan 10 pria masuk ke pengungsian nomor 3 (Mugiwara)
karena Mugiwara adalah pengungsian Campur, maka aktivitas ini aman,
jumlah pengungsi di Jawara sekarang = 150 + 20 = 170

4. 6 wanita dan 20 pria masuk ke pengungsian nomor 2 (Chibi)
karena Chibi adalah pengungsian Cantik, maka 6 wanita tersebut dapat masuk sedangkan pria tidak dapat masuk
pengungsian Chibi, sehingga terjadi exception dimana 20 pria tidak masuk.
jumlah pengungsi di Jawara sekarang = 66 + 6 = 72

5. 40 wanita dan 10 pria masuk ke pengungsian nomor 3 (Mugiwara)
Sisa kapasitas pengungsian Mugiwara adalah 200 170 = 30 pengungsi, dikarenakan ada wanita dan pria dalam
satu aktivitas, maka wanita didahulukan, sehingga 30 wanita dapat masuk dalam pengungsian, dan terjadi
exception 10 wanita dan 10 pria tidak dapat masuk.
jumlah pengungsi di Jawara sekarang = 170 + 30 = 200

Penjelasan Pengungsi.h
Fungsi Keterangan
Pengungsian(string nama, int jumlah) Constructor untuk kelas Pengungsian, dimana parameter nama adalah
nama dari Pengungsian dan jumlah merupakan jumlah awal pengungsi
dalam pengungisan tersebut
virtual string getTipe() getTipe mengembalikan tipe dari suatu Pengungsian, apakah Campur,
Macho, atau Chibi
virtual void tambahPengungsi(int
wanita, int pria)
tambahPengungsi digunakan untuk menambahkan pengungsi baru
pada pengungsian
di dalam fungsi tersebut, akan mencetak status OK jika penambahan
berhasil dan akan melempar exception (berupa string) ketika aktivitas
penambahan tidak berhasil (lihat bagian Output)
string toString() mengembalikan string berisi informasi pengungsian

Tambahan
Silahkan gunakan file Pengungsi.h untuk deklarasi kelas Pengungsi (yang nantinya diturunkan ke subclass-nya) dan
main.cpp yang akan menangangi masalah input (dilarang merubah isi kedua file ini).

Anda mungkin juga menyukai