OOP TM 05

Kuis dan TM 05

 

  1. Opsi-opsi berikut adalah benar kecuali

a. const Time noon(12, 0, 0);              b. int setData() const;

c. int  getData() const;                                    d. void print() const;

  1. Dynamic array dideklarasikan mengggunakan metode berikut ini

a. int *x = new x[10];                          b. int *x = new int[10];

c. int new *x = int[10];                       d. int *x new = int[10];

  1. Bilangan rasional adalah bilangan yang dapat ditulis dalam bentuk r = n/d di mana n dan d masing-masing adalah tipe data integer. Kita menyebutnya sebagai bilangan pecahan, n = pembilang dan d = penyebut. Untuk class Rasional, constructor initialization list dari konstruktor Rasional(int n, int m) {num = n; den = d; } adalah
    1. Rasional (int n, int d) num (n), den (d) { }
    2. Rasional (int n, int d) num (n); den (d) { }
    3. Rasional (int n, int d) :  num (n), den (d) { }
    4. Rasional (int n, int d) :  num (n); den (d) { }
  1. Opsi-opsi berikut adalah salah kecuali

a. int& r = n;  b. int& r = 44;             c. int& r = n++;           d. int&r = sqrt(n);

  1. Model dynamic dalam OOP terjadi karena adanya interaksi antara

a. class dengan class                            b. class dengan object

c. object dengan class                         d. object dengan object

  1. Banyak fungsi anggota class yang otomatis di-create oleh kompilator jika mereka tidak ditulis secara eksplisit oleh pemrogram adalah:
    1. satu yaitu default konstruktor
    2. dua yaitu default kosntruktor dan destructor
    3. tiga yaitu default kosntruktor, copy konstruktor dan destructor
    4. empat yaitu default kosntruktor, copy konstruktor, destructor dan overloaded assignment operator.
  1. Fungsi-fungsi yang dapat diakses oleh  object constant adalah :
    1. constructor dan destructor
    2. constructor dan fungsi anggota constant
    3. destructor dan fungsi anggota constant
    4. constructor, destructor dan fungsi anggota constant

 

  1. Fungsi anggota yang didesain khusus untuk membantu tugas fungsi anggota lain suatu class disebut

a. friend function                                b. inline function

c. utility/helper function                    d. static function

  1. Tipe data yang harus diinisialisasi adalah

a. const dan reference                                   b. const dan pointer

c. reference dan pointer                      d. const, reference dan pointer

  1. Arti dari function overloading di C++ adalah
    1. fungsi dengan nama yang sama, isi fungsi sama, parameter sama
    2. fungsi dengan nama yang sama, isi fungsi sama, parameter beda
    3. fungsi dengan nama yang sama, isi fungsi beda, parameter sama
    4. fungsi dengan nama yang sama, isi fungsi beda, parameter beda
  1. Pernyataan const int * const x = &y; dibaca sebagai
    1. x adalah konstanta pointer ke integer
    2. x adalah pointer ke konstanta integer
    3. x adalah pointer ke integer
    4. x adalah konstanta pointer ke konstanta  integer

 

  1. Deklarasi yang menyatakan bahwa r adalah reference untuk n adalah

a. int& r = n;  b. int r& = &n;            c. int r& = n;                d. int& r = &n;

  1. Output dari penggalan program berikut

class Dosen {

public:

Dosen() {cout << “Constructor dosen diekseksi\n”}

~Dosen() {cout << “Destructor dosen diekseksi\n”}

};

void main() {

Dosen d0001;

cout << “Antarobject d0001 dan d0002\n”;

Dosen d0002;

}

adalah:

a. Constructor dosen dieksekusi                     b. Constructor dosen diekseksi

Constructor dosen dieksekusi                         Destructor dosen diekseksi

Antarobject d0001 dan d0002                        Antarobject d0001 dan d0002

Destructor dosen dieksekusi                           Constructor dosen diekseksi

Destructor dosen dieksekusi                           Destructor dosen diekseksi

c. Constructor dosen dieksekusi                     d. Constructor dosen diekseksi

Destructor dosen dieksekusi                           Antarobject d001 dan d002

Antarobject d0001 dan d0002                        Constructor dosen dieksekusi

Destructor dosen dieksekusi                           Destructor dosen diekseksi

Constructor dosen dieksekusi                         Destructor dosen diekseksi

 

  1. Untuk objet global
    1. konstruktor dipanggil sebelum eksekusi main() dan destruktor dipanggil sebelum eksekusi main()
    2. konstruktor dipanggil sesudah eksekusi main() dan destruktor dipanggil sebelum eksekusi main()
    3. konstruktor dipanggil sebelum eksekusi main() dan destruktor dipanggil sesudah eksekusi main()
    4. konstruktor dipanggil sesudah eksekusi main() dan destruktor dipanggil sesudah eksekusi main()

II. Soal Uraian. (60 poin)

01. Seperti halnya tipe data yang dapat diberi modifier, maka fungsi juga dapat diberi modifier. Modfier yang berlaku pada fungsi adalah static, inline, const, friend dan virtual. Fungsi virtual akan  kita pelajari secara ekstensif di polymorphism sehingga ia tidak kita bahas di soal ini. Jelaskan apa yang dimaksud dengan fungsi static, fungsi inline dan fungsi konstan . Jika perrlu melalui contoh.

02. Setiap fungsi anggota class mempunyai parameter tersembunyi yang disebut pointer this. Tipe pointer ini dapat diimplementasikan secara implisit dan eksplisit. Berikan dua contoh bagaimana kita mengimplementasikan pointer this secara implisit dan eksplisit.

03. Diketahui penggalan kode berikut:

//The perfect shuffle for an even number of element:

void shuffle(int a[], int n) {

                 int temp[n];

                 for(int i= 0; i < n/2; i++) {

                        temp[2*i] = a[i];

                        temp[2*i+1] = a[n/2+i];

                 }

                 for(i=0; i<n; i++) a[i] = temp[i];

            }

Jika data masukan adalah (11, 22, 33, 44, 55, 66, 77, 88) apa keluaran dari kode tersebut. Menggunakan data terakhir ini, tulis fungsi main() sebagai driver untuk mengetes kode di atas.

04. Apa yang disebut variable reference? Bagaimana mendeklarasikan bahwa variable r adalah reference dari variable n. Selanjutnya, buatlah perbandingan head to head antara pass by value dan pass by reference. Perbandingan antara lain meliputi sintaks, parameter formal, parameter aktual, arah dan sifat passing dan sebagainya.

05. Berapa kali copy constructor dipanggil pada penggalan kode berikut. Uraikan jawaban Anda.

:

Widget f(Widget u) {

Widget v (u);

Widget w = v;

Return w;

}

main() {

Widget x;

Widget y = f(f(x));

}

Jawaban Essay

  1. Fungsi Static : Merupakan fungsi yang yang dapat dipanggil tanpa classnya. Jadi fungsi ini hanya dapat berlaku pada static variabel. Biasanya bila kita memanggil fungsi mhs.getNim();bila memakai fungsi statik menjadi getNim();

Contoh : static void cobastatic()

{

cout<<”ini function static”<<endl;

}

  • Fungsi Inline: Merupakan fungsi yang dapat mengurangi waktu eksekusi namun meningkatkan ukuran suatu program. Fungsi ini hanya berguna bila waktu yang dikeluarkan untuk function call lebih lama daripada execute code dalam suatu fungsi. Contoh:

inline int hitungLuas(int p, int l){

return p*l;

}

  • Fungsi Konstan: Merupakan fungsi yang dapat memberikan sifat constan kepada suatu fungsi sehingga nilai dari objek dalam fungsi tersebut tidak dapat berubah dan juga hanya dapat diakses oleh constan object.Biasanya fungsi ini dipakai bila tidak ingin merubah nilai suatu objek.Contoh:

void cobaConstant() const{

cout << “ini constant function” << endl;

}

 

       2.  Secara Eksplisit :

void mahasiswa (nama &n)

void nama::nm()

{

mahasisa(*this);

}

Secara Implisit :

void setNama(char* n)

{

strcpy(nama,n);

}

char* getNama()

{

return nama;

}

3. Output : 11 55 22 66 33 77 44 88

#include <iostream>

using namespace std;

void shuffle(int a[], int n)

{

int temp[10];

for(int i= 0; i < n/2; i++)

{

temp[2*i] = a[i];

temp[2*i+1] = a[n/2+i];

}

for(int i=0; i<n; i++)

{

a[i] = temp[i];

cout<<a[i]<<endl;

}

}

int main()

{

int x[8]={11, 22, 33, 44, 55, 66, 77, 88};

shuffle(x,8);

cin.get();

}

4. Variable reference: merupakan nama lain/alias/sinonim untuk memory allocation yang sudah ada. Reference harus diinisialisasi ketika pendeklarasian. Contoh pendeklarasiannya seperti int &r=n;

a)      Pass by value:

Dalam pass by value yang di passing berupa nilai dari suatu variabel

#include<iostream>

Using namespace std;

int tukarvalue(int x, int y){ //Formal parameter berupa variabel biasa

int z;

z = x;

x = y;

y = z;

cout<<endl<<”Nilai di akhir fungsi tukar()”<<endl<<”x= ”<<x<<”y= ”<<y<<endl;

}

int main(){

int a,b;

cout<<”Passing by value”<<endl<<”****************”<<endl<<endl;

cout<<”inputkan nilai a = “<endl;  cin>>a;

cout<<”inputkan nilai b = “<<endl; cin>>b;

cout<<endl<<“Nilai sebelum pemanggilan fungsi”<<endl;

cout<<”a = ”<<a<<”b = “<<b<<endl;

tukarvalue(a,b); //aktual parameter

cout<<endl<<“Nilai setelah pemanggilan fungsi”<<endl;

cout<<”a = ”<<a<<”b = “<<b<<endl;

cin.get();

}

b)      Pass by reference:

Dalam passby reference yang dipasing berupa suatu alamat.Agar lebih jelas mari kita lihat contoh fungsi mirip dengan yang diatas namun telah dimodifikasi sesuai passingnya.

#include<iostream>

Using namespace std;

int tukarreference(int *px, int *py){ //Formal parameter berupa pointer kare yang dipassing adalah alamat

int z;

z = *px;

*px = *py;

*py = z;

cout<< endl<<”Nilai di akhir fungsi tukar(“<<endl;

cout<<”a= “<<*px<<”b= ”<<*py<<endl;

}

int main(){

int a,b;

cout<<”Passing by value”<<endl<<”****************”<<endl<<endl;

cout<<”inputkan nilai a = “<endl;  cin>>a;

cout<<”inputkan nilai b = “<<endl; cin>>b;

cout<<endl<<“Nilai sebelum pemanggilan fungsi”<<endl;

cout<<”a = ”<<a<<”b = “<<b<<endl;

tukarreference(&a,&b); // Merupakan aktual parameter dimana passingnya berupa alamat dari sebuah variabel

cout<<endl<<“Nilai setelah pemanggilan fungsi”<<endl;

cout<<”a = ”<<a<<”b = “<<b<<endl;

// px menuju pada variabel a py menuju pada variabel b

cin.get();

}

 

5. Widget f(Widget u) {

Widget v (u);

Widget w = v;

Return w;

}

main() {

Widget x;

Widget y = f(f(x));

}

Pada Wifget y = f(f(x)); sudah mengcopy 1x dari Widget x; [1] ada f(x) yang memanggil function Widget f(Widget u), lalu Widget v(u); mengcopy 1x [2]. Widget w mengambil nilai v, kemudian direturn menjadi f(w). Widget v mencopy lagi Widget u [3], Widget w mengambil nilai dari v, dan direturn. Menghasilkan Widget y = w terakhir.

Jadi copy constructor dipanggil 3 kali.

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *