NAMA : Riyn Winesdyo W.
NIM : 1701292866
KELAS : 02PPT
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;
2. 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];
3. 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
a. Rasional (int n, int d) num (n), den (d) { }
b. Rasional (int n, int d) num (n); den (d) { }
c. Rasional (int n, int d) : num (n), den (d) { }
d. Rasional (int n, int d) : num (n); den (d) { }
4. Opsi-opsi berikut adalah salah kecuali
a. int& r = n; b. int& r = 44; c. int& r = n++; d. int&r = sqrt(n);
5. 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
6. Banyak fungsi anggota class yang otomatis di-create oleh kompilator jika mereka tidak ditulis secara eksplisit oleh pemrogram adalah:
a. satu yaitu default konstruktor
b. dua yaitu default kosntruktor dan destructor
c. tiga yaitu default kosntruktor, copy konstruktor dan destructor
d. empat yaitu default kosntruktor, copy konstruktor, destructor dan overloaded assignment operator.
7. Fungsi-fungsi yang dapat diakses oleh object constant adalah :
a. constructor dan destructor
b. constructor dan fungsi anggota constant
c. destructor dan fungsi anggota constant
d. constructor, destructor dan fungsi anggota constant
8. 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
9. Tipe data yang harus diinisialisasi adalah
a. const dan reference b. const dan pointer
c. reference dan pointer d. const, reference dan pointer
10. Arti dari function overloading di C++ adalah
a. fungsi dengan nama yang sama, isi fungsi sama, parameter sama
b. fungsi dengan nama yang sama, isi fungsi sama, parameter beda
c. fungsi dengan nama yang sama, isi fungsi beda, parameter sama
d. fungsi dengan nama yang sama, isi fungsi beda, parameter beda
11. Pernyataan const int * const x = &y; dibaca sebagai
a. x adalah konstanta pointer ke integer
b. x adalah pointer ke konstanta integer
c. x adalah pointer ke integer
d. x adalah konstanta pointer ke konstanta integer
12. 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;
13. 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
Constructor dosen dieksekusi
Antarobject d0001 dan d0002
Destructor dosen dieksekusi
Destructor dosen dieksekusi
b. Constructor dosen diekseksi
Destructor dosen dieksekusi
Antarobject d0001 dan d0002
Constructor dosen dieksekusi
Destructor dosen dieksekusi
c. Constructor dosen dieksekusi
Destructor dosen dieksekusi
Antarobject d0001 dan d0002
Destructor dosen dieksekusi
Constructor dosen dieksekusi
d. Constructor dosen diekseksi
Antarobject d001 dan d002
Constructor dosen dieksekusi
Destructor dosen dieksekusi
Destructor dosen dieksekusi
14. Untuk object global
a. konstruktor dipanggil sebelum eksekusi main() dan destruktor dipanggil sebelum eksekusi main()
b. konstruktor dipanggil sesudah eksekusi main() dan destruktor dipanggil sebelum eksekusi main()
c. konstruktor dipanggil sebelum eksekusi main() dan destruktor dipanggil sesudah eksekusi main()
d. konstruktor dipanggil sesudah eksekusi main() dan destruktor dipanggil sesudah eksekusi main()
II. Soal Uraian. (60 poin)
1. Seperti halnya tipe data yang dapat diberi modifier, maka fungsi juga dapat diberi modifier. Modifier 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 perlu melalui contoh.
- Fungsi static merupakan modifier yangg digunakan untuk mengakses class tanpa perlu membuat objek terlebih dahulu karena fungsi static tidak menempel pada objek tertentu tapi pada class. Fungsi static method tidak dapat mengakses suatu fungsi non-static.
#include using namespace std; class Data{ private: static int angka; public: void setAngka(int a){ angka=a; } static int getAngka(){ return angka; } }; int Data::angka=1; void main(){ cout<<"Angka : "<<Data::getAngka(); cin.get(); } - Fungsi inline adalah fungsi yang digunakan untuk mempercepat eksekusi, tetapi memperbesar memori. Cara kerjanya adalah ketika ada pemanggilan suatu fungsi pada class dengan modifier inline, fungsi inline lah yang akan mencari pemanggilnya. Sedangkan fungsi biasa compiler akan membaca semua code secara terstruktur, ketika ada pemanggilan fungsi compiler akan kembali ke atas dan mencari fungsi yang sesuai. Fungsi ini disarankan hanya dipakai jika fungsi sering dipanggil, misalnya pada perulangan (while, for), dan ukurannya kecil.
#include using namespace std; inline int multiply(int a, int b, int c){ return a=b*c; } int main(){ int a = 0; int b = 1; int c = 8; for(b=1;b<=c;b++){ cout<<"a = "<< multiply(a, b, c)<<endl;; } cin.get(); return 0; } - Fungsi konstan adalah fungsi yang tidak dapat merubah data member objek.
#include using namespace std; class Data{ private: int angka; public: void setAngka(int a){ angka=a; } int getAngka(){ return angka; } void print()const{ cout<<"angka = "<<angka<<endl; } }; void main(){ Data obj; obj.setAngka(12); obj.print(); cin.get(); }
2. 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.
#include
using namespace std;
class Data{
private:
int angka;
public:
Data(int = 0);
void print()const{
//secara implisit
cout<<"angka = "<<angka<<endl;
//secara eksplisit menggunakan operator panah
cout<angka = "<angka<<endl;
//secara eksplisit menggunakan dereferenced this pointer dan operator dot
cout<<"(*this).angka = " <<(*this).angka<<endl;
}
};
Data::Data(int value): angka(value){}
void main(){
Data obj(12);
obj.print();
cin.get();
}
3. 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.
hasil: (11, 55, 22, 66, 33, 77, 44, 88)
#include
using namespace std;
void shuffle(int a[], int n){
int temp[8];
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;
}
}
void main(){
int a[]={11,22,33,44,55,66,77,88};
int n=8;
shuffle(a, n);
cin.get();
}
4. 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.
- reference adalah nama sinonim atau alias dari variabel lain. Reference menyimpan adress dari suatu variabel. Reference di deklar menggunakan operator &.
#include using namespace std; int main(){ int n = 1; int &r = n; cout<<"angka = "<<n<<endl; cout<<"alias = "<<r<<endl; n++; cout<<"angka = "<<n<<endl; cout<<"alias = "<<r<<endl; r++; cout<<"angka = "<<n<<endl; cout<<"alias = "<<r<<endl; cin.get(); return 0; } - Perbedaan pass by value dan pass by reference
• Pass by value :
– int x; Formal parameter x merupakan variabel lokal
– Formal parameter merupakan duplikat dari actual parameter dan tidak dapat menggantikan actual parameter
– Actual parameter bisa berupa constant, variable, maupun expression
– Actual parameter hanya bisa membaca(read-only)
– Pass by value lebih cocok untuk objek kecil yang tidak boleh diubah oleh function• Pass by Reference :
– int *p; Formal parameter p merupakan pointer local
– Formal parameter merupakan alamat dari actual parameter dan dapat mengubah actual parameter
– Actual parameter harus berupa alamat dari suatu identifier
– Actual parameter bersifat read-write
– Pass by reference lebih cocok untuk objek yang boleh diubah oleh function
5. 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));
}
jawab: sepuluh kali
1. Pertama didapat ketika widget x dijalankan
2. Kedua hingga keempat didapat ketika f(x) dijalankan
3. Kelima didapat ketika pemanggilan widget x di dalam f(x)
4. Keenam hingga kedelapan didapat ketika f(f(x)) dijalankan
5. Kesembilan didapat ketika pemanggilan widget x di dalam f(f(x))
6. Kesepuluh didapat ketika pemanggilan widget f(x) yg memiliki pengertian sama dengan widget x di dalam f(f(x))
-d1030-