UAS T0044 PAGI 20xx
- Pilihan (20 poin)
- Opsi berikut yang bukan merupakan fitur dari OOPL adalah
a. encapsulation b. inheritance c. polymrophism d. template
- Secara sederhana polymorphism dapat didefinisikan sebagai multiple routine with the same name. Opsi berikut yang tidak dapat digunakan untuk mendefinisikan polymorphism adalah
a. early binding b. late binding c. overriding d. overloading
- Dua prototipe berikut : add (const Base &) dan add (const Derived &) berbeda dalam hal:
a. scope b. lifetime c. signatures d. precedence
- Meskipun mendukung penggunaan multiple inheritance tetapi penggunaan fitur ini tidak dianjurkan di C++. Opsi berikut yang dianjurkan sebagai penggantinya adalah
a. composition b. template
c. polymorphism d. overloading function
- Selain sebagai tool untuk membentuk generic programming, template juga merupakan tool untuk membentuk
a. universal polymorphism b. static polymorphism
c. ad hoc polymorphism d. subtype polymorphism.
6. Paradigma-paradigma berikut yang mendukung pemrograman C++ adalah
a. procedural dan object oriented programming
b. procedural dan generic programming
c. generic dan object oriented programming
d. procedural, object oriented dan generic programming.
7. Ide dari generic programming adalah mengganti
a. static function b. inline function
c. virtual function d. friend function
dengan fungsi yang ada di template parameter.
8. Iterator tidak lain adalah
a. generalized reference b. generalized pointer
c. specialized reference d. specialized pointer.
9. Tipe inheritance yang digunakan untuk melakukan encapsulation adalah
a. private b. protected
c. public d. private, protected dan public
- Opsi berikut yang bukan merupakan karakteristik dari fungsi virtual adalah
a. dapat di override di derived class
b. digunakan untuk mendukung polimorfisme
c. deklarasi virtual di base class
d. deklarasi virtual di derived class
- Uraian (40 poin)
1. (10 poin) Uraikan mengapa constructor dan destructor tidak diwariskan di C++ meskipun mereka kita deklarasikan dengan level akses public atau protected. Uraikan juga mengapa fungsi friend tidak diwariskan di klas turunan. Selanjutnya, sebutkan pula sejumlah fitur lain di klas induk yang tidak diwariskan di klas turunan.
- Karena constructor bukanlah suatu interface dari class, sedangkan yang diwariskan oleh fitur inheritance hanyalah interface dari class
- Destructor tidak diwariskan karena destructor hanya ada satu
- Friend function tidak dapat diwariskan karena friend function hanya digunakan untuk memberi akses kepada member class yang mempunyai access modifier private yang kemudian menjadi dapat diakses oleh fungsi tertentu. Jika diwariskan, datanya akan mengalami perubahan dan friend function tersebut harus berubah juga
- Yang tidak dapat diwariskan pada kelas anak yaitu, data private dan assignment operator
2. (10 poin) Konsep inheritance memunculkan fitur baru dalam C++ yaitu reuseability, dominating dan overriding. Jelaskan melalui penggalan kode, apa yang kamu ketahui tentang ketiga fitur tersebut.
Reusability memungkinkan sebuah kelas induk mewariskan data member ke kelas turunannya
Dominating adalah berkuasanya kelas induk terhadap kelas turunannya saat inheritance
Overriding memungkinkan sebuah kelas turunan untuk menyediakan sebuah implementasi spesifik dari metode yang sudah disediakan oleh kelas induknya
class Animal
{
protected:
string nama;
int kaki;
public:
Animal()
{
nama = “”;
kaki = 0;
}
//overloading constructor
Animal(string nama, int kaki):nama(nama), kaki(kaki){}
//overriding function
virtualvoid move() = 0;
//setter
void setNama(string nama)
{
this->nama = nama;
}
void setKaki(int kaki)
{
this->kaki = kaki;
}
//getter
string getNama()
{
returnthis->nama;
}
int getKaki()
{
returnthis->kaki;
}
};
class Horse : public Animal //reusability
{
protected:
int horsePower;
public:
Horse(){}
Horse(string nama, int kaki, int horsePower)
{
this->nama = nama;
this->kaki = kaki;
this->horsePower = horsePower;
}
//overriding function
virtualvoid move()
{
cout << “Horse walking” << endl;
}
};
class Bird : public Animal //reusability
{
protected:
int flyPower;
public:
Bird(){}
Bird(string nama, int kaki, int flyPower)
{
this->nama = nama;
this->kaki = kaki;
this->flyPower = flyPower;
}
//overriding function
virtualvoid move()
{
cout << “Bird flying” << endl;
}
};
class Pegasus : public Horse, public Bird //multiple inherit : reusability
{
private:
int attack;
Horn horn;
public:
Pegasus(string nama,
int kaki,
int horsePower,
int flyPower,
int attack,
Horn horn)
{
Horse::nama = nama;
Horse::kaki = kaki;
this->horsePower = horsePower;
this->flyPower = flyPower;
this->attack = attack;
this->horn = horn;
}
//overriding function
virtualvoid move()
{
cout << “Pegasus flying while running” << endl;
}
int getPanjang()
{
return horn.getPanjang();
}
};
3. (10 poin) Ada banyak tipe polymorphism yang kita kenal diantaranya adalah parametric polymorphism, ad hoc polymorphism, subtype polymorphism, override polymorphism dan sebagainya. Uraikan apa yang kamu ketahui tentang tipe-tipe polymorphism tersebut.
Parametic polymorphism : polymorphism yang tidak memilik virtual function, dan menggunakan static binding, classnya juga merupakan class yang nyata atau konkret dan bukan abstract, juga tidak dapat menerapkan inheritance atau memakai template
Ad hoc polymorphism : sama dengan Parametic polymorphism. Tetapi menggunakan overloading function, sifat reusability hanya berlaku untuk nama. Memiliki tree function syndrome, yaitu different type, number, dan order.
Subtype polymorphism : sama dengan Parametic polymorphism. Tetapi menggunakan overriding function.
Override polymorphism : keadaan dimana method pada subclass menolak method pada superclassnya. Ciri dari Overriding adalah nama method, daftar parameter, dan return type yang harus sama
4. (10 poin) Banyak penulis buku menyatakan bahwa untuk class X paling sedikit ia
mempunyai satu constructor yaitu default constructor dengan prototype X(). Tetapi
John Hubbard dalam bukunya Programming with C++ menyatakan bahwa setiap
class X paling sedikit mempunyai dua constructor yaitu default X() dan copy
constructor yang prototipe sintaksnya adalah X (const X & ), fungsi anggota dengan
satu parameter dan pass by constant reference.
- Kapan copy constructor dieksekusi?
Saat fungsi copy constructor dipanggil.
b. Tulislah fungsi main() untuk menguji copy constructor yang ada dalam penggalan
kode berikut:
class Rational {
public : Rational(int n, int d) : num(n), den (d) { }
Rational(const Rational & r) : num(r.num), den(r.den)
{ cout << “COPY CONSTRUCTOR CALLED\n”;}
private: int num, den;
};
Rational f(Rational r) {
Rational s = r;
return s;
}
int main(){
Rational x;
Rational y=x;
return 0;
- Pemrograman (40 poin)
a. (10 poin) Desain class String dengan dua data anggota len bertipe unsigned untuk mewakili panjang string dan buf bertipe pointer ke character untuk menampung string karakterr aktual. Untuk menyederhanakan kasus, fungsi anggota dalam class ini cukup tiga buah yaitu default constrctor dengan prototipe String (unsigned = 0), copy constructor dengan prototype String (const String&) dan destructor dengan prototype ~String().
b. (10 poin) Tulis implementasi ketiga fungsi anggota tersebut di luar class.
c. Tulislah the bubble sort (function) templates yang dapat digunakan untuk men-sort any data type termasuk class String di atas. Program yang Anda desain paling tidak harus terdiri dari tiga komponen yaitu
- (10 poin) function template sortBubble() di mana type parameter T nantinya akan diganti dengan tipe data yang akan di-sort.
- (5 poin) function template print() di mana type parameter T nantinya akan diganti dengan tipe data yang akan dicetak. .
- (5 poin) main() program sebagai driver untuk men-tes function templates yang Anda desain menggunakan dua kasus: array of int dan array of double. Cetak data sebelum di-sort dan sesudah di-sort.
#include<iostream>
#include<string>
usingnamespace std;
classString
{
private:
char *buf;
unsignedint len;
public:
String(unsigned=0);
String(constString&);
~String();
};
String::String(unsigned=0)
{
strcpy(buf, NULL);
}
String::String(constString& strng2)
{
for(int i=0 ; i<strlen(strng2.buf) ; i++)
{
this->buf[i]=strng2.buf[i];
this->buf[i]=”;
len=strlen(strng2.buf);
}
}
String::~String()
{
cout<<“String deleted.”<<endl;
}
template<classT>
void bubblesort(T *tem,intjum)
{
T templ;
for(int a=1;a<jum;a++)
{
for(int b=count-1;b>=a;b–)
{
if(tem[b-1]>tem[b])
{
templ=tem[b-1];
tem[b-1]=tem[b];
tem[b]=templ;
}
}
}
}
template<classT>
void print(T *tem,intjum)
{
T templ;
for(int i=0; i<jum; i++)
{
cout<<tem[i]<<endl;
}
cout<<endl;
}
void main()
{
int arrayofint[10] = {3,6,2,4,1,5,8,7,9,0};
double arrayofdouble[5] = {2.3,6.5,7.4,1.8,0.9};
cout<<“Before: “; print(arrayofint, 10);
bubblesort(arrayofint, 10);
cout<<“After: “; print(arrayofint,10);
cout<<“Before: “; print(arrayofdouble, 10);
bubblesort(arrayofdouble, 10);
cout<<“After: “; print(arrayofdouble,10);
}
Daniel David 1701291610 02PPT
-ooo-
Recent Comments