May 27

TM 08 : Class Strings

 

  1. Desain class String. Klas ini mempunyai dua data anggota dengan level akses private, yaitu string aktual s yang disajikan dalam bentuk pointer char * s dan len untuk menyajikan panjang string s. Fungsi anggotanya, level akses public, adalah default constructor String(), constructor String (char*, unsigned), constructor String (const char*), copy constructor String (const String &) dan destructor ~String(). Dalam desain ini semua fungsi anggota harus berbentuk prototype

 

#include<iostream>

 

usingnamespace std;

 

classString

{

private :

char * s;

int len;

 

public :

String(){}

void setS(char *s);

char *getS();

void setLen(int len);

int getLen();

~String();

};

 

  1. Selanjutnya implementasikan definisi semua fungsi anggota di luar class String. Ingat jangan lupa gunakan scope resolution operator :: .

 

String :: String()

{

s = “”;

len = 0;

}

 

voidString :: setS(char *s)

{

strcpy(this->s , s);

}

 

char *String :: getS()

{

return s;

}

 

voidString :: setLen(intlen)

{

this->len = len;

}

 

intString :: getLen()

{

return len;

}

 

String :: ~String()

{

cout << “Destructor Activated…” << endl;

}

 

  1. Terakhir, tulislah fungsi main() sebagai driver untuk menguji desain kamu.

 

void main()

{

String str;

str.setS(“TM 08”);

cout << “String : ” << str.getS() << endl;

cout << “Length of String : ” << str.getLen() << endl;

cin.get();

}

 

 

Daniel David 1701291610 02PPT

 

 

I AM PROUD AS BINUSIAN

 

 

May 27

Kuis dan TM 7

Soal Pilihan

  1. Inheritance kerap kali dihubungkan dengan polymorphism. Istilah yang paling

tepat untuk menyatakan inheritance sebagai polymorphism adalah

a.trivial polymorphism                        b. universal polymorphism

c. pure polymorphism                                   d. subtype polymorphism

 

02.   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

 

03. Salah satu kerugian penggunaan inheritance di OOP adalah

a. independensi di antara class dalam hirarki

b. independensi di antara object dalam hirarki

c. dependensi di antara class dalam hirarki

d. dependensi di antara object dalam hirarki

 

04. Tipe inheritance yang dianjurkan untuk melakukan derivation adalah

a. private                                             b. protected

c. public                                               d. private, protected dan public

 

05. ADT dan inheritance mempunyai komponen yang sama tetapi hanya beda strukturnya.

Paralel di ADT, hirarki di inheritance. Karena itu sejumlah inheritance mempunyai

kelebihan dibandingkan dengan ADT. Kelebihan-kelebihan itu diantaranya adalah

adalah adanya fitur-fitur bedrikut ini

a. reuse-ability dan extend ability        b. extend ability dan overriding function

c. overriding function dan reuse-ability

d. reuseability, extend ability dan overriding function

 

Soal Uraian

 

  1. Apa yang salah dalam penggalan definisi class berikut:

class Time {

   public:                                 // prototype fungsi

   private: int h = 0;

               int m = 0;

               int s = 0;

}

 

Karena adanya inisialisasi nilai pada access modifier private.

 

  1. Jika Rasional adalah class bilangan rasional (pecahan seperti 22/7), apa beda ketiga pernyataan berikut:

Rasional y(x); (Function declaration)

Rasional y = x; (Object declaration)

Rasional y; y = x; (Object declaration)

 

  1. 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.

 

Constructor dan destructor hanya ada pada kelas induk saja dan tidak bisa diwariskan ke kelas turunannya.

Fungsi friend hanya berguna untuk mengakses data member dalam access modifier private.

Data member dengan access modifier private dan friend function.

 

  1. 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();

}

};

 

  1. Ilmu pengetahuan itu sifatnya kumulatif sehingga meskipun kita sudah mempunyai utilitas ADT yang tidak lain adalah enkapsulasi kita masih memerlukan inheritance. WHY? Untuk bisa menjawab kasus ini kamu harus membandingkan inheritance dengan ADT. Pertanyaan buat kamu adalah coba bandingkan inheritance dengan ADT dari berbagai sisi diantaranya dari sisi komponen, struktur komponen, advantage dan disadvantage.
  Abstract data type Inheritance
Komponen Representasi atribut dan method Kelas induk dan turunan
Struktur
CLASS B
CLASS A
CLASS B
CLASS A
Keuntungan
  1. Tidak ada ketergantungan antar kelas satu dan lainnya
  2. Overriding
  3. Prototipe sama untuk kelas yang berbeda
  4. Reusability
Kekurangan
  1. Tidak adanya reusability
  2. Ketergantungan antar kelas dalam hirarki

 

 

Daniel David 1701291610 02PPT

 

I AM PROUD AS BINUSIAN