chika tutorial c++ - ver 3 2009 2
DESCRIPTION
TRANSCRIPT
1
TUTORIAL
PEMROGRAMAN C++
oleh :
Marisa Widyastuti
2009
(ver.3.0)
2
Daftar Isi
Daftar Isi................................................................................................................................................................................2
Bab 1 Pengenalan Lingkungan Pemrograman C++ ..................................................................................................4
1. Memahami lingkungan dasar C++, IDE, serta cara meng-compile dan menjalankan program...............4
2. Membuat program C++ sederhana ...................................................................................................................8
Bab 2 Struktur Kontrol ....................................................................................................................................................13
1. Menggunakan perintah if dan if/else untuk memilih beberapa alternatif pilihan...............................14
3. Mengunakan perintah perulangan for untuk menjalankan perintah secara berulang...........................20
4. Menggunakan perintah perulangan switch untuk struktur dengan multiple-selection ...........................21
5. Mengunakan perintah perulangan do/while untuk menjalankan perintah secara berulang................24
6. Menggunakan perintah break dan continue ...............................................................................................25
Bab 3 Fungsi ...................................................................................................................................................................27
1. Membuat program secara modular dengan menggunakan fungsi............................................................27
2. Memahami variabel lokal dan variabel global ...............................................................................................28
3. Menggunakan fungsi dengan dan tanpa argumen ......................................................................................30
4. Menggunakan fungsi yang memanggil dirinya sendiri...................................................................................31
5. Membuat overloading fungsi.............................................................................................................................32
Bab 4 Array ....................................................................................................................................................................33
1. Memahami struktur data array ..........................................................................................................................33
2. Memahami cara mendeklarasikan array, menginisialisasi array dan memanggil elemen tertentu dari
suatu array .....................................................................................................................................................................33
3. Melewatkan array ke suatu fungsi.....................................................................................................................37
4. Memahami penggunaan array untuk menyimpan, mengurutkan dan mencari nilai pada suatu daftar
atau tabel ......................................................................................................................................................................38
5. Mendeklarasikan dan memanipulasi array multi-dimensi ..............................................................................40
Bab 5 Structure ..............................................................................................................................................................42
1. Memahami cara mendeklarasikan structure, menginisialisasi structure dan memanggil elemen tertentu
dari suatu structure........................................................................................................................................................42
2. Nested Structure ..................................................................................................................................................43
3. Mengirimkan structure ke suatu fungsi ..............................................................................................................44
4. Pointer dan Structure...........................................................................................................................................46
5. Mengatur alokasi memori suatu structure ........................................................................................................47
6. Linkage List............................................................................................................................................................48
Bab 6 Pointer dan String ...............................................................................................................................................49
1. Menggunakan pointer ........................................................................................................................................49
2. Menggunakan pointer untuk melewatkan argument ke fungsi sebagai referensi (pass by reference)..50
3. Memahami hubungan erat antara pointer, array dan string ........................................................................54
4. Memahami penggunaan pointer ke fungsi .....................................................................................................56
5. Mendeklarasikan dan menggunakan array string ..........................................................................................58
Bab 7 Pointer dan String (Lanjut).................................................................................................................................63
3
1. Memahami konsep pointer konstan dan tidak konstan, data konstan dan tidak konstan .......................63
2. Memahami penggunaan perintah sizeof ........................................................................................................66
3. Memahami penggunaan pointer dengan array ............................................................................................68
4. Memahami penggunaan pointer fungsi ..........................................................................................................72
Bab 8 Kelas dan Data Abstraksi ..................................................................................................................................74
1. Membuat Objek dalam Bahasa Pemrograman C++ .....................................................................................74
2. Memahami konsep enkapsulasi dan abstraksi ................................................................................................77
3. Memahami konsep variabel statik dan fungsi statik .......................................................................................78
4. Memahami konsep akses friend .....................................................................................................................80
Bab 9 Constructor dan Destructor ..............................................................................................................................84
1. Mengidentifikasi kegunaan constructor ...........................................................................................................84
2. Mendeklarasikan constructor.............................................................................................................................85
3. Mengidentifikasi kegunaan destructor .............................................................................................................87
4. Mendeklarasikan destructor...............................................................................................................................87
5. Menggunakan scope resolution operator .......................................................................................................90
6. Menggunakan constructor dengan parameter .............................................................................................91
Bab 10 Polymorphism ....................................................................................................................................................95
1. Mengidentifikasi kegunaan constructor ...........................................................................................................95
2. Meng-overload fungsi .........................................................................................................................................95
3. Memahami perlunya melakukan overloading operator................................................................................99
4. Meng-overload operator unary.........................................................................................................................99
5. Meng-overload operator biner........................................................................................................................101
Bab 11 Inheritance......................................................................................................................................................105
1. Mendefinisikan apa yang dimaksud dengan konsep hubungan (relationship) antar kelas dan objek 105
2. Memahami konsep inheritance dan data hiding .........................................................................................108
4
Bab 1 Pengenalan Lingkungan Pemrograman C++
1. Memahami lingkungan dasar C++, IDE, serta cara meng-compile dan menjalankan
program
IDE (Integrated Development Environment) yang digunakan dalam tutorial ini adalah CodeBlocks.
Langkah-langkah untuk membuat file program C++, meng-compile dan menjalankannya:
1. Klik Create a new Project
2. Pilih Console Application
5
Lalu tekan Create
3. Simpan Project dengan nama (misalnya) MyFirstProject.cbp
Catatan : extension .cbp (code block program) adalah extension default untuk file-file project yang
dibuat menggunakan CodeBlocks
6
4. CodeBlocks akan secara otomatis membuatkan file utama dengan nama main.cpp, yang jika sudah
ada, CodeBlocks akan memberikan pilihan untuk ditimpa atau tidak.
Pilih No.
5. Buat file baru dengan nama (misalnya) MyFirstCode.cpp.
Catatan : Pastikan file disimpan dengan extension .cpp. dengan mengetikkannya. Jika file tersimpan
dengan extension .c maka sintaks-sintaks C++ tidak akan bisa dijalankan.
6. CodeBlocks secara otomatis akan membuatkan program sederhana untuk mencetak "Hello World!"
ke layar
7
7. Compile program dengan menekan Ctrl-F9
8
Jika tidak ada kesalahan maka pada tab Build Log di bagian bawah jendela CodeBlock akan terlihat
bahwa terdapat 0 errors, 0 warnings
8. Jalankan program dengan menekan F9
2. Membuat program C++ sederhana
a. Buatlah program di bawah ini, lalu compile dan jalankan
1 //
2 // A first program in C++
3 #include <iostream.h>
4
5 int main()
6 {
7 cout << "Welcome to C++!\n";
8
9 return 0; // indicate that program ended successfully
10 }
Tulis hasil keluarannya :
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
b. Tulis pula hasil dari program di bawah ini :
1 //
2 // Printing a line with multiple statements
9
3 #include <iostream.h>
4
5 int main()
6 {
7 cout << "Welcome ";
8 cout << "to C++!\n";
9
10 return 0; // indicate that program ended successfully
11 }
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
c. Tanpa mengetik, meng-compile dan menjalankan program, tebak keluaran program berikut ini!
1 //
2 // Printing multiple lines with a single statement
3 #include <iostream.h>
4
5 int main()
6 {
7 cout << "Welcome\nto\n\nC++!\n";
8
9 return 0; // indicate that program ended successfully
10 }
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
d. Ketik, compile dan jalankan program di bawah ini :
1 //
2 // Addition program
3 #include <iostream.h>
4
5 int main()
10
6 {
7 int integer1, integer2, sum;
8
9 cout << "Enter first integer\n";
10 cin >> integer1;
11 cout << "Enter second integer\n";
12 cin >> integer2;
13 sum = integer1 + integer2;
14 cout << "Sum is " << sum << endl;
15
16 return 0; // indicate that program ended successfully
17 }
Jelaskan setiap baris program dengan menyebutkan nomor barisnya!
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
e. Berikut adalah contoh program penggunaan sederhana perintah if, operator relasional dan
operator persamaan.
1 //
2 // Using if statements, relational
3 // operators, and equality operators
11
4 #include <iostream.h>
5
6 int main()
7 {
8 int num1, num2;
9
10 cout << "Enter two integers, and I will tell you\n"
11 << "the relationships they satisfy: ";
12 cin >> num1 >> num2; // read two integers
13
14 if ( num1 == num2 )
15 cout << num1 << " is equal to " << num2 << endl;
16
17 if ( num1 != num2 )
18 cout << num1 << " is not equal to " << num2 << endl;
19
20 if ( num1 < num2 )
21 cout << num1 << " is less than " << num2 << endl;
22
23 if ( num1 > num2 )
24 cout << num1 << " is greater than " << num2 << endl;
25
26 if ( num1 <= num2 )
27 cout << num1 << " is less than or equal to "
28 << num2 << endl;
29
30 if ( num1 >= num2 )
31 cout << num1 << " is greater than or equal to "
32 << num2 << endl;
33
34 return 0; // indicate that program ended successfully
35 }
Kesimpulan apa yang bisa diambil dari program di atas?
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
12
f. Program berikut ini mendemonstrasikan penggunaan header file yang berbeda
1 //
2 // Using new-style header files
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {
9 cout << "Welcome to C++!\n";
10 std::cout << "Welcome to C++!\n";
11
12 return 0; // indicate that program ended successfully
13 }
Jelaskan apa yang dimaksud dengan file header :
______________________________________________________________________________________________________
______________________________________________________________________________________________________
Apa yang terjadi bila baris 10 di ubah menjadi
10 cout << "Welcome to C++!\n";
______________________________________________________________________________________________________
______________________________________________________________________________________________________
Jelaskan mengapa terjadi demikian :
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
13
Bab 2 Struktur Kontrol
Berikut adalah flowchart untuk alur program sekuensial, dan struktur seleksi dengan menggunakan if, if-
else dan switch
Berikut ini adalah flowchart untuk alur program menggunakan struktur while, do/while dan for untuk
perulangan
14
1. Menggunakan perintah if dan if/else untuk memilih beberapa alternatif pilihan
a. Buat program dengan struktur if atau if/else untuk menerima masukan suatu nilai ujian
mahasiswa, yang akan memberikan keluaran berupa tampilan "Lulus" jika nilai mahasiswa tersebut >=
60 dan menampilkan "Tidak Lulus" untuk nilai lainnya.
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
b. Buat program dengan struktur if atau if/else untuk menerima masukkan nilai ujian mahasiswa dan
menampilkan "A" untuk nilai >= 90, "B" untuk nilai >= 80, "C" untuk nilai >= 70, "D" untuk nilai >= 60, dan E
untuk nilai < 60 :
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
15
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
2. Menggunakan perintah perulangan while, do/while dengan menggunakan counter, sentinel
dan nested control untuk menjalankan perintah secara berulang
Berikut adalah contoh program perulangan sederhana penggunaan perintah while dengan
menggunakan counter
1 //
2 // Counter-controlled repetition
3 #include <iostream.h>
4
5 int main()
6 {
7 int counter = 1; // initialization
8
9 while ( counter <= 10 ) { // repetition condition
10 cout << counter << endl;
11 ++counter; // increment
12 }
13
14 return 0;
15 }
16
Perhatikan baris 11, jelaskan perbedaan antara
11 ++counter;
dengan
11 counter++;
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
a. Sebuah kelas dengan sepuluh orang mahasiswa mengikuti ujian. Nilai yang diberikan adalah dalam
skala (0 – 100). Buat program untuk menentukan nilai rata-rata kelas menurut algoritma pseudocode
di bawah ini , dengan menggunakan counter –controlled repetition :
Inisialisasi variabel total dengan nilai nol
Inisialisasi variabel counter_nilai dengan satu
while counter_nilai kurang atau sama dengan sepuluh
Masukkan nilai berikutnya
Tambahkan nilai ke total
Tambahkan counter_nilai dengan satu
Hitung rata-rata kelas dengan membagi nilai total dengan sepuluh
Cetak rata-rata kelas
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
17
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
b. Buat program untuk menghitung rata-rata kelas yang menghitung nilai sejumlah angka yang
dimasukkan setiap kali program dijalankan. Gunakan sentinel-controlled repetition, sesuai algoritma
pseudocode di bawah ini :
Inisialisasi variabel total dengan angka nol
Inisialisasi variabel counter dengan angka nol
Masukkan nilai yang pertama
while user belum memasukkan sentinel
Masukkan nilai ke variabel total
Tambahkan counter_nilai dengan satu
Masukkan nilai berikutnya
if counter_nilai tidak sama dengan nol
Hitung rata-rata sebagai hasil dari total dibagi counter_nilai
Cetak rata-rata
else
Cetak "Tidak ada nilai yang dimasukkan"
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
18
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
c. Sebuah universitas memberikan pelatihan untuk mempersiapkan mahasiswanya untuk mengikuti
suatu ujian tertentu. Tahun lalu beberapa mahasiswa yang telah mengikuti pelatihan ini mengambil
ujian tersebut. Pihak universitas ingin mengetahui berapa banyak mahasiswa yang berhasil. Buatlah
sebuah program untuk menampilkan hasil ujian, dengan data yang diberikan adalah daftar
mahasiswa yang disebelahnya ada angka 1 (lulus) dan 2 (tidak lulus).
Program yang dibuat harus dapat menganalisa hasil ujian seperti berikut ini :
1. Tampilkan pesan "Masukkan hasil : " (1 atau 2) untuk setiap data, sampai semua data dimasukkan
2. Hitung dan tampilkan jumlah mahasiswa yang lulus dan jumlah mahasiswa yang tidak lulus
3. Jika lebih dari 8 mahasiswa lulus, cetak "Naikkan biaya pelatihan"
Algoritma pseudocode-nya adalah sebagai berikut :
Inisialisasi variabel lulus dengan angka nol
Inisialisasi variabel tidak_lulus dengan angka nol
Inisialisasi variabel counter_mhs dengan angka nol
while counter_mhs kurang atau sama dengan sepuluh
masukkan nilai ujian
19
if mahasiswa lulus
Tambahkan lulus dengan satu
else
Tambahkan tidak_lulus dengan satu
Tambahkan counter_mhs dengan satu
Cetak jumlah mahasiswa yang lulus
Cetak jumlah mahasiswa yang tidak lulus
if lebih dari delapan mahasiswa lulus
Cetak "Naikkan biaya pelatihan"
Buat program sesuai dengan algoritma di atas!
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
20
_______________________________________________________________________________________________________
3. Mengunakan perintah perulangan for untuk menjalankan perintah secara berulang
Berikut adalah contoh penggunakan perintah for
Contoh diagram alur stuktur for yang menggunakan counter
Contoh program untuk diagram alur di atas
1 //
2 // Counter-controlled repetition with the for structure
3 #include <iostream.h>
4
5 int main()
6 {
7 // Initialization, repetition condition, and incrementing
8 // are all included in the for structure header.
9
10 for ( int counter = 1; counter <= 10; counter++ )
11 cout << counter << endl;
12
21
13 return 0;
14 }
15
Setelah memahami contoh program di atas kerjakanlah tugas-tugas berikut ini :
Buat program untuk menghitung pangkat bilangan dari 1 – 100
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
4. Menggunakan perintah perulangan switch untuk struktur dengan multiple-selection
Berikut adalah diagram alir untuk perintah perulangan dengan switch
22
Dan berikut adalah contoh program penggunaan perintah switch
1 //
2 // Counting letter grades
3 #include <iostream.h>
4
5 int main()
6 {
7 int grade, // one grade
8 aCount = 0, // number of A's
9 bCount = 0, // number of B's
10 cCount = 0, // number of C's
11 dCount = 0, // number of D's
12 fCount = 0; // number of F's
13
14 cout << "Enter the letter grades." << endl
15 << "Enter the EOF character to end input." << endl;
16
17 while ( ( grade = cin.get() ) != EOF ) {
18
19 switch ( grade ) { // switch nested in while
20
21 case 'A': // grade was uppercase A
22 case 'a': // or lowercase a
23 ++aCount;
24 break; // necessary to exit switch
25
26 case 'B': // grade was uppercase B
27 case 'b': // or lowercase b
23
28 ++bCount;
29 break;
30
31 case 'C': // grade was uppercase C
32 case 'c': // or lowercase c
33 ++cCount;
34 break;
35
36 case 'D': // grade was uppercase D
37 case 'd': // or lowercase d
38 ++dCount;
39 break;
40
41 case 'F': // grade was uppercase F
42 case 'f': // or lowercase f
43 ++fCount;
44 break;
45
46 case '\n': // ignore newlines,
47 case '\ ': // tabs,
48 case ' ': // and spaces in input
49 break;
50
51 default: // catch all other characters
52 cout << "Incorrect letter grade entered."
53 << " Enter a new grade." << endl;
54 break; // optional
55 }
56 }
57
58 cout << "\n\nTotals for each letter grade are:"
59 << "\nA: " << aCount
60 << "\nB: " << bCount
61 << "\nC: " << cCount
62 << "\nD: " << dCount
63 << "\nF: " << fCount << endl;
64
65 return 0;
66 }
Jelaskan arti perintah default, dan break yang digunakan dalam program di atas!
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
24
_______________________________________________________________________________________________________
5. Mengunakan perintah perulangan do/while untuk menjalankan perintah secara berulang
Perhatikan diagram alur dan contoh program untuk perintah do/while di bawah ini :
1 //
2 // Using the do/while repetition structure
3 #include <iostream.h>
4
5 int main()
6 {
7 int counter = 1;
8
9 do {
10 cout << counter << " ";
11 } while ( ++counter <= 10 );
12
13 cout << endl;
14
15 return 0;
16 }
Tanpa menjalankan program, tulis hasil keluaran dari program di atas
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
Jikaperintah di baris 11 di ubah menjadi
25
11 } while ( counter++ < 10 );
Tulis keluaran program :
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
6. Menggunakan perintah break dan continue
Contah program penggunaan perintah break
1 //
2 // Using the break statement in a for structure
3 #include <iostream.h>
4
5 int main()
6 {
7 // x declared here so it can be used after the loop
8 int x;
9
10 for ( x = 1; x <= 10; x++ ) {
11
12 if ( x == 5 )
13 break; // break loop only if x is 5
14
15 cout << x << " ";
16 }
17
18 cout << "\nBroke out of loop at x of " << x << endl;
19 return 0;
20 }
Tuliskan hasil keluaran program :
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
Contah program penggunaan perintah continue
26
1 //
2 // Using the continue statement in a for structure
3 #include <iostream.h>
4
5 int main()
6 {
7 for ( int x = 1; x <= 10; x++ ) {
8
9 if ( x == 5 )
10 continue; // skip remaining code in loop
11 // only if x is 5
12
13 cout << x << " ";
14 }
15
16 cout << "\nUsed continue to skip printing the value 5"
17 << endl;
18 return 0;
19 }
Tuliskan hasil keluaran program :
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
Beri kesimpulan singkat mengenai perintah break dan continue :
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
_______________________________________________________________________________________________________
27
Bab 3 Fungsi
1. Membuat program secara modular dengan menggunakan fungsi
a. Ketik, compile dan jalankan program di bawah ini :
1 //
2 // Creating and using a programmer-defined function
3 #include <iostream.h>
4
5 int square( int ); // function prototype
6
7 int main()
8 {
9 for ( int x = 1; x <= 10; x++ )
10 cout << square( x ) << " ";
11
12 cout << endl;
13 return 0;
14 }
15
16 // Function definition
17 int square( int y )
18 {
19 return y * y;
20 }
Apa yang dilakukan oleh fungsi yang terdapat dalam program ini ?
__________________________________________________________________________________________________
Jelaskan deklarasi fungsi pada baris ke-5 :
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
1 //
2 // Finding the maximum of three integers
3 #include <iostream.h>
4
5 int maximum( int, int, int ); // function prototype
6
7 int main()
28
8 {
9 int a, b, c;
10
11 cout << "Enter three integers: ";
12 cin >> a >> b >> c;
13
14 // a, b and c below are arguments to
15 // the maximum function call
16 cout << "Maximum is: " << maximum( a, b, c ) << endl;
17
18 return 0;
19 }
20
21 // Function maximum definition
22 // x, y and z below are parameters to
23 // the maximum function definition
24 int maximum( int x, int y, int z )
25 {
26 int max = x;
27
28 if ( y > max )
29 max = y;
30
31 if ( z > max )
32 max = z;
33
34 return max;
35 }
2. Memahami variabel lokal dan variabel global
Compile dan jalankan program di bawah ini!
1 //
2 // A scoping example
3 #include <iostream.h>
4
5 void a( void ); // function prototype
6 void b( void ); // function prototype
7 void c( void ); // function prototype
8
9 int x = 1; // global variable
10
11 int main()
12 {
13 int x = 5; // local variable to main
14
15 cout << "local x in outer scope of main is " << x << endl;
16
29
17 { // start new scope
18 int x = 7;
19
20 cout << "local x in inner scope of main is " << x << endl;
21 } // end new scope
22
23 cout << "local x in outer scope of main is " << x << endl;
24
25 a(); // a has automatic local x
26 b(); // b has static local x
27 c(); // c uses global x
28 a(); // a reinitializes automatic local x
29 b(); // static local x retains its previous value
30 c(); // global x also retains its value
31
32 cout << "local x in main is " << x << endl;
33
34 return 0;
35 }
36
37 void a( void )
38 {
39 int x = 25; // initialized each time a is called
40
41 cout << endl << "local x in a is " << x
42 << " after entering a" << endl;
43 ++x;
44 cout << "local x in a is " << x
45 << " before exiting a" << endl;
46 }
47
48 void b( void )
49 {
50 static int x = 50; // Static initialization only
51 // first time b is called.
52 cout << endl << "local static x is " << x
53 << " on entering b" << endl;
54 ++x;
55 cout << "local static x is " << x
56 << " on exiting b" << endl;
57 }
58
59 void c( void )
60 {
61 cout << endl << "global x is " << x
62 << " on entering c" << endl;
63 x *= 10;
30
64 cout << "global x is " << x << " on exiting c" << endl;
65 }
Jelaskan apa yang dimaksud dengan variable lokal :
______________________________________________________________________________________________________
______________________________________________________________________________________________________
Jelaskan pula apa yang dimaksud dengan variable global :
______________________________________________________________________________________________________
______________________________________________________________________________________________________
3. Menggunakan fungsi dengan dan tanpa argumen
a. Setelah mengetik, meng-compile dan menjalankan program di bawah ini , jelaskan apa yang
dimaksud dengan argumen :
___________________________________________________________________________________________________
___________________________________________________________________________________________________
1 //
2 // Functions that take no arguments
3 #include <iostream.h>
4
5 void function1();
6 void function2( void );
7
8 int main()
9 {
10 function1();
11 function2();
12
13 return 0;
14 }
15
16 void function1()
17 {
18 cout << "function1 takes no arguments" << endl;
19 }
20
21 void function2( void )
22 {
23 cout << "function2 also takes no arguments" << endl;
24 }
31
b. Berikan kesimpulan yang bisa diambil dari dua fungsi berbeda yang terdapat pada program di atas!
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
4. Menggunakan fungsi yang memanggil dirinya sendiri
1 //
2 // Recursive factorial function
3 #include <iostream.h>
4 #include <iomanip.h>
5
6 unsigned long factorial( unsigned long );
7
8 int main()
9 {
10 for ( int i = 0; i <= 10; i++ )
11 cout << setw( 2 ) << i << "! = " << factorial( i ) << endl;
12
13 return 0;
14 }
15
16 // Recursive definition of function factorial
17 unsigned long factorial( unsigned long number )
18 {
19 if ( number <= 1 ) // base case
20 return 1;
21 else // recursive case
22 return number * factorial( number - 1 );
23 }
Buat program untuk menghitung faktorial tanpa menggunakan fungsi rekursif!
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
32
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
5. Membuat overloading fungsi
1 //
2 // Using overloaded functions
3 #include <iostream.h>
4
5 int square( int x ) { return x * x; }
6
7 double square( double y ) { return y * y; }
8
9 int main()
10 {
11 cout << "The square of integer 7 is " << square( 7 )
12 << "\nThe square of double 7.5 is " << square( 7.5 )
13 << endl;
14
15 return 0;
16 }
a. Jelaskan apa yang dimaksud dengan overloading fungsi :
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
a. Sebutkan apa kegunaan meng-overloading suatu fungsi :
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
33
Bab 4 Array
1. Memahami struktur data array
2. Memahami cara mendeklarasikan array, menginisialisasi array dan memanggil elemen
tertentu dari suatu array
1
2 // initializing an array
3 #include <iostream.h>
4 #include <iomanip.h>
5
6 int main()
7 {
8 int i, n[ 10 ];
9
10 for ( i = 0; i < 10; i++ ) // initialize array
34
11 n[ i ] = 0;
12
13 cout << "Element" << setw( 13 ) << "Value" << endl;
14
15 for ( i = 0; i < 10; i++ ) // print array
16 cout << setw( 7 ) << i << setw( 13 ) << n[ i ] << endl;
17
18 return 0;
19 }
Catat has i l ke lua ran dar i p rogram d i a tas :
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
1
2 // Initializing an array with a declaration
3 #include <iostream.h>
4 #include <iomanip.h>
5
6 int main()
7 {
8 int n[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 };
9
10 cout << "Element" << setw( 13 ) << "Value" << endl;
11
12 for ( int i = 0; i < 10; i++ )
13 cout << setw( 7 ) << i << setw( 13 ) << n[ i ] << endl;
14
15 return 0;
16 }
Je laskan perbedaan in s ia l i sas i p rogram d i a tas dengan p rogram sebe lumnya, la lu catat has i l
ke lua ran p rogram d i a tas ,
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
35
________________________________________________________________________________________
________________________________________________________________________________________
1
2
3 #include <iostream.h>
4 #include <iomanip.h>
5
6 int main()
7 {
8 const int arraySize = 10;
9 int j, s[ arraySize ];
10
11 for ( j = 0; j < arraySize; j++ ) // set the values
12 s[ j ] = 2 + 2 * j;
13
14 cout << "Element" << setw( 13 ) << "Value" << endl;
15
16 for ( j = 0; j < arraySize; j++ ) // print the values
17 cout << setw( 7 ) << j << setw( 13 ) << s[ j ] << endl;
18
19 return 0;
20 }
Je laskan apa yang d i lakukan p rogram d i a tas dan catat has i l ke lua rannya!
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
1
2
3 #include <iostream.h>
4
5 int main()
6 {
7 const int arraySize = 12;
8 int a[ arraySize ] = { 1, 3, 5, 4, 7, 2, 99,
9 16, 45, 67, 89, 45 };
10 int total = 0;
36
11
12 for ( int i = 0; i < arraySize ; i++ )
13 total += a[ i ];
14
15 cout << "Total of array element values is " << total << endl;
16 return 0;
17 }
Je laskan apa yang d i lakukan p rogram d i a tas dan catat has i l ke lua rannya!
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
1
2 // Histogram printing program
3 #include <iostream.h>
4 #include <iomanip.h>
5
6 int main()
7 {
8 const int arraySize = 10;
9 int n[ arraySize ] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };
10
11 cout << "Element" << setw( 13 ) << "Value"
12 << setw( 17 ) << "Histogram" << endl;
13
14 for ( int i = 0; i < arraySize ; i++ ) {
15 cout << setw( 7 ) << i << setw( 13 )
16 << n[ i ] << setw( 9 );
17
18 for ( int j = 0; j < n[ i ]; j++ ) // print one bar
19 cout << '*';
20
21 cout << endl;
22 }
23
24 return 0;
25 }
37
Catat has i l ke lua ran p rogram d i a tas dan sebutkan kes impu lan apa yang b i sa d iambi l dar i p rogram
d i a tas !
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
3. Melewatkan array ke suatu fungsi
1
2 // Passing arrays and individual array elements to functions
3 #include <iostream.h>
4 #include <iomanip.h>
5
6 void modifyArray( int [], int ); // appears strange
7 void modifyElement( int );
8
9 int main()
10 {
11 const int arraySize = 5;
12 int i, a[ arraySize ] = { 0, 1, 2, 3, 4 };
13
14 cout << "Effects of passing entire array call-by-reference:"
15 << "\n\nThe values of the original array are:\n";
16
17 for ( i = 0; i < arraySize; i++ )
18 cout << setw( 3 ) << a[ i ];
19
20 cout << endl;
21
22 // array a passed call-by-reference
23 modifyArray( a, arraySize );
24
25 cout << "The values of the modified array are:\n";
26
27 for ( i = 0; i < arraySize; i++ )
28 cout << setw( 3 ) << a[ i ];
29
30 cout << "\n\n\n"
31 << "Effects of passing array element call-by-value:"
32 << "\n\nThe value of a[3] is " << a[ 3 ] << '\n';
38
33
34 modifyElement( a[ 3 ] );
35
36 cout << "The value of a[3] is " << a[ 3 ] << endl;
37
38 return 0;
39 }
40
41 void modifyArray( int b[], int sizeOfArray )
42 {
43 for ( int j = 0; j < sizeOfArray; j++ )
44 b[ j ] *= 2;
45 }
46
47 void modifyElement( int e )
48 {
49 cout << "Value in modifyElement is "
50 << ( e *= 2 ) << endl;
51 }
Catat has i l ke lua ran p rogram d i a tas , se r ta je laskan apa perbedaan pemangg i lan fungs i dengan
menggunakan pass by va lue dengan menggunakan pass by re fe rence !
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
4. Memahami penggunaan array untuk menyimpan, mengurutkan dan mencari nilai pada
suatu daftar atau tabel
1
2 // This program sorts an array's values into
39
3 // ascending order
4 #include <iostream.h>
5 #include <iomanip.h>
6
7 int main()
8 {
9 const int arraySize = 10;
10 int a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
11 int i, hold;
12
13 cout << "Data items in original order\n";
14
15 for ( i = 0; i < arraySize; i++ )
16 cout << setw( 4 ) << a[ i ];
17
18 for ( int pass = 0; pass < arraySize - 1; pass++ ) // passes
19
20 for ( i = 0; i < arraySize - 1; i++ ) // one pass
21
22 if ( a[ i ] > a[ i + 1 ] ) { // one comparison
23 hold = a[ i ]; // one swap
24 a[ i ] = a[ i + 1 ];
25 a[ i + 1 ] = hold;
26 }
27
28 cout << "\nData items in ascending order\n";
29
30 for ( i = 0; i < arraySize; i++ )
31 cout << setw( 4 ) << a[ i ];
32
33 cout << endl;
34 return 0;
35 }
Apa yang d i lakukan o leh program d i atas? Je laskan dengan s ingkat proses yang
d i lakukan dalam program tersebut .
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
40
5. Mendeklarasikan dan memanipulasi array multi-dimensi
1
2 // Initializing multidimensional arrays
3 #include <iostream.h>
4
5 void printArray( int [][ 3 ] );
6
7 int main()
8 {
9 int array1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } },
10 array2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 },
11 array3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } };
12
13 cout << "Values in array1 by row are:" << endl;
14 printArray( array1 );
15
16 cout << "Values in array2 by row are:" << endl;
17 printArray( array2 );
18
19 cout << "Values in array3 by row are:" << endl;
20 printArray( array3 );
21
22 return 0;
23 }
24
25 void printArray( int a[][ 3 ] )
26 {
27 for ( int i = 0; i < 2; i++ ) {
28
29 for ( int j = 0; j < 3; j++ )
30 cout << a[ i ][ j ] << ' ';
31
32 cout << endl;
33 }
34 }
Ada berapa bar i s dan ko lom ar ray yang d idef in i s i kan pada p rogram d i a tas?
Catat ke luaran has i l p rogram!
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
41
________________________________________________________________________________________
________________________________________________________________________________________
42
Bab 5 Structure
Structure adalah kumpulan data yang saling berhubungan, yang disimpan dalam satu unit
penyimpanan. Misalkan pada suatu database peyimpanan data pegawai, dimana setiap pegawai akan
menyimpan nama, alamat dan gaji. Bila menggunakan array biasa, maka diperlukan tiga variable yang
bebas satu dengan yang lain, yaitu variabel nama, alamat dan gaji. Dengan menggunakan structure,
data tersebut diorganisasikan dalam satu kesatuan.
1. Memahami cara mendeklarasikan structure, menginisialisasi structure dan memanggil
elemen tertentu dari suatu structure
1 // Memasukkan dan menampilkan elemen-elemen variabel structure
2 #include <iostream.h>
3
4 struct data //Deklarasi structure
5 {
6 char name[20];
7 char address[20];
8 int salary;
9 };
10 data employee1; //Inisialisasi variabel structure
11
12 int main()
13 {
14 cout << "Employee's name : ";
15 cin >> employee1.name;
16 cout << "Employee's address : ";
17 cin >> employee1.address;
18 cout << "Employee's salary : ";
19 cin >> employee1.salary;
20
21 cout << endl << "Employee's data : ";
22 cout << employee1.name << ", ";
43
23 cout << employee1.address << ", ";
24 cout << employee1.salary;
25
26 return 0;
27 }
Je laskan perbedaan in s ia l i sas i p rogram d i a tas dengan a r ray , la lu catat has i l ke lua ran p rogram,
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
2. Nested Structure
Nested structure adalah structure di dalam structure
1 #include <iostream.h>
2
3 struct data_students {
4 char name[20];
5 char NIM[8];
6 };
7
8 Struct student_groups {
9 struct data_students chief;
10 struct data_students member[2];
11 } group[3]; //Inisialisasi variabel structure dilakukan sekaligus dengan deklarasi structure
12
13 int main()
14 {
15 for(int i=0;i<3;++i) // i = no group
16 {
17 cout << "\n\nGROUP " << i+1;
18 cout << "\n\tCHIEF " << "\n\tName : ";
19 cin >> group[i].chief.name;
20 cout << "\tNIM : ";
21 cin >> group[i].chief.NIM;
22
23 for(int j=0;j<2;++j) // j = no member
44
24 {
25 cout << "\n\tMEMBER " << j+1;
26 cout << "\n\tName : ";
27 cin >> group[i].member[j].name;
28 cout << "\tNIM : ";
29 cin >> group[i].member[j].NIM;
30 }
31 }
32
33 for(int i=0;i<3;++i)
34 {
35 cout << "\nGROUP " << i+1;
36 cout << "\nChief : " << group[i].chief.name;
37 cout << " (" << group[i].chief.NIM << ")";
38 cout << "\nMember : ";
39
40 for(int j=0;j<2;++j)
41 {
42 cout << "\n\t" << group[i].member[j].name;
43 cout << " (" << group[i].member[j].NIM << ")";
44 }
45 }
46 return 0;
47 }
Je laskan has i l ke lua ran p rogram,
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
3. Mengirimkan structure ke suatu fungsi
1 #include <iostream.h>
2
3 struct mailingListRecord{
4 char name[20];
5 char address[50];
6 char city[20];
45
7 int zipcode;
8 };
9
10 void displayRecord(int, mailingListRecord);
11
12 int main()
13 {
14 //Create an array of mailingListRecord structures
15
16 mailingListRecord listArray[3];
17 int index = 0;
18
19 //Get three record
20 do
21 {
22 cout << "Name: ";
23 cin.getline(listArray[index].name,sizeof(listArray[index].name));
24 cout << "Address: ";
25 cin.getline(listArray[index].address,sizeof(listArray[index].address));
26 cout << "City: ";
27 cin.getline(listArray[index].city,sizeof(listArray[index].city));
28 char buff[10];
29 cout << "Zip Code: ";
30 cin.getline(buff, sizeof(buff));
31 listArray[index].zipcode = atoi(buff);
32 index++;
33 cout << endl;
34 }
35 while(index<3);
36
37 //Display the three records
38 for(int i=0;i<3;i++)
39 displayRecord(i, listArray[i]);
40
41
42
43 return 0;
44 }
45
46 void displayRecord(int num, mailingListRecord mlRec)
47 {
48 cout << "Record " << num+1 << " : " << endl;
49 cout << "Name : " << mlRec.name << endl;
50 cout << "Address : " << mlRec.address << endl;
46
51 cout << "City : " << mlRec.city << endl;
52 cout << "Zip code: " << mlRec.zipcode << endl;
53 }
Je laskan perbedaan anta ra in s t ruks i c in dan c in .get l ine . Apa fungs i dar i s i zeof pada paramete r
kedua get l ine . Catat has i l ke lua ran p rogram,
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
4. Pointer dan Structure
1 #include <iostream.h>
2
3 main()
4 {
5 struct bin
6 {
7 char name[30];
8 int quantity;
9 int cost;
10 };
11 struct bin printer_cable_box = {"Printer cables",0,1295};
12 struct bin *pt_stru;
13
14 pt_stru=&printer_cable_box;
15
16 cout << "Name : " << pt_stru->name << endl;
17 cout << "Quantity : " << pt_stru->quantity << endl;
18 cout << "Cost : " << pt_stru->cost << endl;
19 return 0;
20 }
Je laskan a r t i i n s t ruks i pada bar i s 11 , 12 dan 14 .
47
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
5. Mengatur alokasi memori suatu structure
Besar byte yang digunakan oleh suatu structure dapat dihitung dengan fungsi :
sizeof(nama_structure)
Alamat atau alokasi memori dari suatu structure dapat ditentukan dengan fungsi malloc( ), yang memiliki
bentuk : (nama_structure *) malloc (sizeof(nama_structure)
1 #include <iostream.h>
2
3 main()
4 {
5 struct pgw
6 {
7 char nama[20];
8 int gaji;
9 }*ptr;
10
11 //Menampilkan ukuran struktur dengan sizeof
12 cout << "Ukuran struktur pgw : " << sizeof(pgw);
13
14 //Menggerakkan pointer dengan malloc
15 cout << "\n\nLokasi memori untuk tiga data structure : ";
16 for(int i=0;i<3;++i)
17 {
18 ptr=(pgw *) malloc(sizeof(pgw));
19 cout << "\nLokasi memori structure ke " << i+1 << " adalah " << ptr;
20 }
21 return 0;
22 }
Je laskan ke luaran dar i p rogram
48
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
________________________________________________________________________________________
6. Linkage List
Dalam suatu array, pada umumnya tidak seluruh elemen array digunakan. Misalkan didefinisikan 30 buah
elemen array, dan pada prakteknya hanya digunakan 10 elemen, berarti terdapat 20 elemen yang sia-
sia karena tidak digunakan.
Masalah ini dapat diatasi dengan menggunakan LINKAGE LIST, yang pada prinsipnya mencantumkan
alamat dari elemen berikutnya di dalam elemen sebelumnya.
Cara menentukan alamat dari elemen berikutnya menggunakan fungsi malloc(). Dengan fungsi malloc(),
array tidak perlu lagi dideklarasikan, komputer tidak perlu menyediakan sejumlah memori untuk elemen-
elemen array dengan kemungkinan tidak digunakan. Penggunaan memori sesuai dengan kebutuhan
saja.
49
Bab 6 Pointer dan String
1. Menggunakan pointer
1
2 // Using the & and * operators
3 #include <iostream.h>
4
5 int main()
6 {
7 int a; // a is an integer
8 int *aPtr; // aPtr is a pointer to an integer
9
10 a = 7;
11 aPtr = &a; // aPtr set to address of a
12
13 cout << "The address of a is " << &a
14 << "\nThe value of aPtr is " << aPtr;
15
16 cout << "\n\nThe value of a is " << a
17 << "\nThe value of *aPtr is " << *aPtr;
18
19 cout << "\n\nShowing that * and & are inverses of "
20 << "each other.\n&*aPtr = " << &*aPtr
21 << "\n*&aPtr = " << *&aPtr << endl;
50
22 return 0;
23 }
Setelah menjalankan program di atas, jelaskan apa yang dimaksud dengan karakter '*' dan '&' dalam
penggunaan pointer :
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
2. Menggunakan pointer untuk melewatkan argument ke fungsi sebagai referensi (pass by
reference)
51
1
2 // Cube a variable using call-by-value
3 #include <iostream.h>
4
5 int cubeByValue( int ); // prototype
6
7 int main()
8 {
9 int number = 5;
10
11 cout << "The original value of number is " << number;
12 number = cubeByValue( number );
13 cout << "\nThe new value of number is " << number << endl;
52
14 return 0;
15 }
16
17 int cubeByValue( int n )
18 {
19 return n * n * n; // cube local variable n
20 }
1
2 // Cube a variable using call-by-reference
3 // with a pointer argument
4 #include <iostream.h>
5
6 void cubeByReference( int * ); // prototype
7
8 int main()
9 {
10 int number = 5;
11
12 cout << "The original value of number is " << number;
13 cubeByReference( &number );
14 cout << "\nThe new value of number is " << number << endl;
15 return 0;
16 }
17
18 void cubeByReference( int *nPtr )
19 {
20 *nPtr = *nPtr * *nPtr * *nPtr; // cube number in main
21 }
Amati dua program diatas, kemudian jelaskan perbedaan penggunaan variabel dengan call-by-reference
dengan penggunaan variabel dengan call by value (sudah pernah dibahas di praktikum sebelumnya)!
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
53
1
2
3
4 #include <iostream.h>
5 #include <ctype.h>
6
7 void convertToUppercase( char * );
8
9 int main()
10 {
11 char string[] = "characters and $32.98";
12
13 cout << "The string before conversion is: " << string;
14 convertToUppercase( string );
15 cout << "\nThe string after conversion is: "
16 << string << endl;
17 return 0;
18 }
19
20 void convertToUppercase( char *sPtr )
21 {
22 while ( *sPtr != '\0' ) {
23
24 if ( *sPtr >= 'a' && *sPtr <= 'z' )
25 *sPtr = toupper( *sPtr ); // convert to uppercase
26
27 ++sPtr; // move sPtr to the next character
28 }
29 }
Jelaskan apa yang dilakukan program di atas, jelaskan juga mengapa perlu penggunaan library ctype.h!
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
54
3. Memahami hubungan erat antara pointer, array dan string
1
2
3
4 #include <iostream.h>
5 #include <iomanip.h>
6
7 void bubbleSort( int *, const int );
8
9 int main()
10 {
11 const int arraySize = 10;
12 int a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
13 int i;
14
15 cout << "Data items in original order\n";
16
17 for ( i = 0; i < arraySize; i++ )
18 cout << setw( 4 ) << a[ i ];
19
20 bubbleSort( a, arraySize ); // sort the array
21 cout << "\nData items in ascending order\n";
22
23 for ( i = 0; i < arraySize; i++ )
24 cout << setw( 4 ) << a[ i ];
25
26 cout << endl;
27 return 0;
28 }
29
30 void bubbleSort( int *array, const int size )
31 {
32 void swap( int *, int * );
33
34 for ( int pass = 0; pass < size - 1; pass++ )
35
36 for ( int j = 0; j < size - 1; j++ )
37
38 if ( array[ j ] > array[ j + 1 ] )
39 swap( &array[ j ], &array[ j + 1 ] );
40 }
41
42 void swap( int *element1Ptr, int *element2Ptr )
43 {
44 int hold = *element1Ptr;
45 *element1Ptr = *element2Ptr;
46 *element2Ptr = hold;
47 }
55
Catat hasil keluaran dari program di atas, dan jelaskan apa yang dilakukan program tersebut!
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
1
2 // Copying a string using array notation
3 // and pointer notation.
4 #include <iostream.h>
5
6 void copy1( char *, const char * );
7 void copy2( char *, const char * );
8
9 int main()
10 {
11 char string1[ 10 ], *string2 = "Hello",
12 string3[ 10 ], string4[] = "Good Bye";
13
14 copy1( string1, string2 );
15 cout << "string1 = " << string1 << endl;
16
17 copy2( string3, string4 );
18 cout << "string3 = " << string3 << endl;
19
20 return 0;
21 }
22
23 // copy s2 to s1 using array notation
56
24 void copy1( char *s1, const char *s2 )
25 {
26 for ( int i = 0; ( s1[ i ] = s2[ i ] ) != '\0'; i++ )
27 ; // do nothing in body
28 }
29
30 // copy s2 to s1 using pointer notation
31 void copy2( char *s1, const char *s2 )
32 {
33 for ( ; ( *s1 = *s2 ) != '\0'; s1++, s2++ )
34 ; // do nothing in body
35 }
Catat keluaran program di atas, kemudian jelaskan perbedaan proses menyalin string dengan menggunakan
array dibandingkan dengan menggunakan pointer!
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
4. Memahami penggunaan pointer ke fungsi
1
2
3 #include <iostream.h>
4 void function1( int );
5 void function2( int );
6 void function3( int );
7
8 int main()
9 {
10 void (*f[ 3 ])( int ) = { function1, function2, function3 };
11 int choice;
12
57
13 cout << "Enter (0/1/2), 3 to end: ";
14 cin >> choice;
15
16 while ( choice >= 0 && choice < 3 ) {
17 (*f[ choice ])( choice );
18 cout << "Enter a number between 0 and 2, 3 to end: ";
19 cin >> choice;
20 }
21
22 cout << "Program execution completed." << endl;
23 return 0;
24 }
25
26 void function1( int a )
27 {
28 cout << "You entered " << a
29 << " so function1 was called\n\n";
30 }
31
32 void function2( int b )
33 {
34 cout << "You entered " << b
35 << " so function2 was called\n\n";
36 }
37
38 void function3( int c )
39 {
40 cout << "You entered " << c
41 << " so function3 was called\n\n";
42 }
Jelaskan baris 10 dan baris 17 dari program di atas!
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
Program di atas menggunakan array pointer atau array fungsi? Jelaskan!
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
58
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
5. Mendeklarasikan dan menggunakan array string
1
2 // Using strcpy and strncpy
3 #include <iostream.h>
4 #include <string.h>
59
5
6 int main()
7 {
8 char x[] = "Happy Birthday to You";
9 char y[ 25 ], z[ 15 ];
10
11 cout << "The string in array x is: " << x
12 << "\nThe string in array y is: " << strcpy( y, x )
13 << '\n';
14 strncpy( z, x, 14 ); // does not copy null character
15 z[ 14 ] = '\0';
16 cout << "The string in array z is: " << z << endl;
17
18 return 0;
19 }
Catat keluaran program, lalu jelaskan penggunaan strcpy dan strncpy (untuk melakukan proses apa), dan
terangkan perbedaannya!
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
1
2 // Using strcat and strncat
3 #include <iostream.h>
4 #include <string.h>
5
6 int main()
7 {
8 char s1[ 20 ] = "Happy ";
9 char s2[] = "New Year ";
10 char s3[ 40 ] = "";
11
12 cout << "s1 = " << s1 << "\ns2 = " << s2;
13 cout << "\nstrcat(s1, s2) = " << strcat( s1, s2 );
14 cout << "\nstrncat(s3, s1, 6) = " << strncat( s3, s1, 6 );
15 cout << "\nstrcat(s3, s1) = " << strcat( s3, s1 ) << endl;
16
17 return 0;
18 }
60
Catat keluaran program, lalu jelaskan penggunaan strcat dan strncat, dan terangkan perbedaannya!
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
1
2 // Using strcmp and strncmp
3 #include <iostream.h>
4 #include <iomanip.h>
5 #include <string.h>
6
7 int main()
8 {
9 char *s1 = "Happy New Year";
10 char *s2 = "Happy New Year";
11 char *s3 = "Happy Holidays";
12
13 cout << "s1 = " << s1 << "\ns2 = " << s2
14 << "\ns3 = " << s3 << "\n\nstrcmp(s1, s2) = "
15 << setw( 2 ) << strcmp( s1, s2 )
16 << "\nstrcmp(s1, s3) = " << setw( 2 )
17 << strcmp( s1, s3 ) << "\nstrcmp(s3, s1) = "
18 << setw( 2 ) << strcmp( s3, s1 );
19
20 cout << "\n\nstrncmp(s1, s3, 6) = " << setw( 2 )
21 << strncmp( s1, s3, 6 ) << "\nstrncmp(s1, s3, 7) = "
22 << setw( 2 ) << strncmp( s1, s3, 7 )
23 << "\nstrncmp(s3, s1, 7) = "
24 << setw( 2 ) << strncmp( s3, s1, 7 ) << endl;
25 return 0;
26 }
Catat keluaran program, lalu jelaskan penggunaan strcmp dan strncmp, dan terangkan perbedaannya!
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
61
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
1
2 // Using strtok
3 #include <iostream.h>
4 #include <string.h>
5
6 int main()
7 {
8 char string[] = "This is a sentence with 7 tokens";
9 char *tokenPtr;
10
11 cout << "The string to be tokenized is:\n" << string
12 << "\n\nThe tokens are:\n";
13
14 tokenPtr = strtok( string, " " );
15
16 while ( tokenPtr != NULL ) {
17 cout << tokenPtr << '\n';
18 tokenPtr = strtok( NULL, " " );
19 }
20
21 return 0;
22 }
Catat keluaran program, lalu jelaskan penggunaan strtok!
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
1
2 // Using strlen
3 #include <iostream.h>
62
4 #include <string.h>
5
6 int main()
7 {
8 char *string1 = "abcdefghijklmnopqrstuvwxyz";
9 char *string2 = "four";
10 char *string3 = "Boston";
11
12 cout << "The length of \\"" << string1
13 << "\\" is " << strlen( string1 )
14 << "\nThe length of \\"" << string2
15 << "\\" is " << strlen( string2 )
16 << "\nThe length of \\"" << string3
17 << "\\" is " << strlen( string3 ) << endl;
18
19 return 0;
20 }
Catat keluaran program, lalu jelaskan penggunaan strlen!
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
63
Bab 7 Pointer dan String (Lanjut)
1. Memahami konsep pointer konstan dan tidak konstan, data konstan dan tidak konstan
1
2 // Printing a string one character at a time using
3 // a non-constant pointer to constant data
4 #include <iostream.h>
5
6 void printCharacters( const char * );
7
8 int main()
9 {
10 char string[] = "print characters of a string";
11
12 cout << "The string is:\n";
13 printCharacters( string );
14 cout << endl;
15 return 0;
16 }
17
18 // In printCharacters, sPtr is a pointer to a character
19 // constant. Characters cannot be modified through sPtr
20 // (i.e., sPtr is a "read-only" pointer).
21 void printCharacters( const char *sPtr )
22 {
23 for ( ; *sPtr != '\0'; sPtr++ ) // no initialization
24 cout << *sPtr;
25 }
Jelaskan apa yang terjadi jika karakter konstanta di akses menggunakan sPtr?
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
1
2 // Attempting to modify data through a
3 // non-constant pointer to constant data.
64
4 #include <iostream.h>
5
6 void f( const int * );
7
8 int main()
9 {
10 int y;
11
12 f( &y ); // f attempts illegal modification
13
14 return 0;
15 }
16
17 // In f, xPtr is a pointer to an integer constant
18 void f( const int *xPtr )
19 {
20 *xPtr = 100; // cannot modify a const object
21 }
Jelaskan apa yang terjadi jika pointer tidak konstan mencoba mengubah nilai data yang konstan?
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
20
21 // Attempting to modify a constant pointer to
22 // non-constant data
23 #include <iostream.h>
24
25 int main()
26 {
27 int x, y;
28
29 int * const ptr = &x; // ptr is a constant pointer to an
30 // integer. An integer can be modified
31 // through ptr, but ptr always points
32 // to the same memory location.
33 *ptr = 7;
34 ptr = &y;
35
36 return 0;
65
37 }
Jelaskan apa yang terjadi jika pointer konstan menunjuk data yang tidak konstan?
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
1
2 // Attempting to modify a constant pointer to
3 // constant data.
4 #include <iostream.h>
5
6 int main()
7 {
8 int x = 5, y;
9
10 const int *const ptr = &x; // ptr is a constant pointer to a
11 // constant integer. ptr always
12 // points to the same location
13 // and the integer at that
14 // location cannot be modified.
15 cout << *ptr << endl;
16 *ptr = 7;
17 ptr = &y;
18
19 return 0;
20 }
Jelaskan juga apa yang terjadi jika pointer konstan menunjuk data yang juga konstan?
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
66
2. Memahami penggunaan perintah sizeof
1
2 // Sizeof operator when used on an array name
3 // returns the number of bytes in the array.
4 #include <iostream.h>
5
6 size_t getSize( float * );
7
8 int main()
9 {
10 float array[ 20 ];
11
12 cout << "The number of bytes in the array is "
13 << sizeof( array )
14 << "\nThe number of bytes returned by getSize is "
15 << getSize( array ) << endl;
16
17 return 0;
18 }
19
20 size_t getSize( float *ptr )
21 {
22 return sizeof( ptr );
23 }
Informasi apa yang diberikan oleh perintah sizeof?
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
1
2 // Demonstrating the sizeof operator
3 #include <iostream.h>
4 #include <iomanip.h>
5
6 int main()
7 {
8 char c;
67
9 short s;
10 int i;
11 long l;
12 float f;
13 double d;
14 long double ld;
15 int array[ 20 ], *ptr = array;
16
17 cout << "sizeof c = " << sizeof c
18 << "\ sizeof(char) = " << sizeof( char )
19 << "\nsizeof s = " << sizeof s
20 << "\ sizeof(short) = " << sizeof( short )
21 << "\nsizeof i = " << sizeof i
22 << "\ sizeof(int) = " << sizeof( int )
23 << "\nsizeof l = " << sizeof l
24 << "\ sizeof(long) = " << sizeof( long )
25 << "\nsizeof f = " << sizeof f
26 << "\ sizeof(float) = " << sizeof( float )
27 << "\nsizeof d = " << sizeof d
28 << "\ sizeof(double) = " << sizeof( double )
29 << "\nsizeof ld = " << sizeof ld
30 << "\ sizeof(long double) = " << sizeof( long double )
31 << "\nsizeof array = " << sizeof array
32 << "\nsizeof ptr = " << sizeof ptr
33 << endl;
34 return 0;
35 }
Catat hasil keluaran program di atas. Untuk apa kita perlu mengetahui ukuran dari setiap tipe data?
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
68
_________________________________________________________________________________________
3. Memahami penggunaan pointer dengan array
1
2 // Using subscripting and pointer notations with arrays
3
4 #include <iostream.h>
5
6 int main()
7 {
8 int b[] = { 10, 20, 30, 40 };
9 int *bPtr = b; // set bPtr to point to array b
10
11 cout << "Array b printed with:\n"
12 << "Array subscript notation\n";
13
14 for ( int i = 0; i < 4; i++ )
15 cout << "b[" << i << "] = " << b[ i ] << '\n';
16
17
18 cout << "\nPointer/offset notation where\n"
19 << "the pointer is the array name\n";
20
21 for ( int offset = 0; offset < 4; offset++ )
22 cout << "*(b + " << offset << ") = "
23 << *( b + offset ) << '\n';
24
25
26 cout << "\nPointer subscript notation\n";
27
28 for ( i = 0; i < 4; i++ )
29 cout << "bPtr[" << i << "] = " << bPtr[ i ] << '\n';
30
31 cout << "\nPointer/offset notation\n";
32
33 for ( offset = 0; offset < 4; offset++ )
34 cout << "*(bPtr + " << offset << ") = "
35 << *( bPtr + offset ) << '\n';
36
37 return 0;
38 }
Jelaskan apa yang dimaksud dengan offset? Jelaskan penggunaan offset dalam program di atas!
_________________________________________________________________________________________
69
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
1
2 // Card shuffling and dealing program
3 #include <iostream.h>
4 #include <iomanip.h>
5 #include <stdlib.h>
6 #include <time.h>
7
8 void shuffle( int [][ 13 ] );
9 void deal( const int [][ 13 ], const char *[], const char *[] );
10
11 int main()
12 {
13 const char *suit[ 4 ] =
14 { "Hearts", "Diamonds", "Clubs", "Spades" };
15 const char *face[ 13 ] =
16 { "Ace", "Deuce", "Three", "Four",
17 "Five", "Six", "Seven", "Eight",
18 "Nine", "Ten", "Jack", "Queen", "King" };
19 int deck[ 4 ][ 13 ] = { 0 };
20
21 srand( time( 0 ) );
22
23 shuffle( deck );
24 deal( deck, face, suit );
25
26 return 0;
27 }
28
29 void shuffle( int wDeck[][ 13 ] )
30 {
31 int row, column;
32
33 for ( int card = 1; card <= 52; card++ ) {
34 do {
35 row = rand() % 4;
36 column = rand() % 13;
37 } while( wDeck[ row ][ column ] != 0 );
38
70
39 wDeck[ row ][ column ] = card;
40 }
41 }
42
43 void deal( const int wDeck[][ 13 ], const char *wFace[],
44 const char *wSuit[] )
45 {
46 for ( int card = 1; card <= 52; card++ )
47
48 for ( int row = 0; row <= 3; row++ )
49
50 for ( int column = 0; column <= 12; column++ )
51
52 if ( wDeck[ row ][ column ] == card )
53 cout << setw( 5 ) << setiosflags( ios::right )
54 << wFace[ column ] << " of "
55 << setw( 8 ) << setiosflags( ios::left )
56 << wSuit[ row ]
57 << ( card % 2 == 0 ? '\n' : '\ ' );
58 }
Jelaskan dengan singkat, apa yang dilakukan oleh program di atas? Apa yang dilakukan oleh fungsi rand()?
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
71
72
4. Memahami penggunaan pointer fungsi
1
2 // Multipurpose sorting program using function pointers
3 #include <iostream.h>
4 #include <iomanip.h>
5
6 void bubble( int [], const int, int (*)( int, int ) );
7 int ascending( int, int );
8 int descending( int, int );
9
10 int main()
11 {
12 const int arraySize = 10;
13 int order,
14 counter,
15 a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
16
17 cout << "Enter 1 to sort in ascending order,\n"
18 << "Enter 2 to sort in descending order: ";
19 cin >> order;
20 cout << "\nData items in original order\n";
21
22 for ( counter = 0; counter < arraySize; counter++ )
23 cout << setw( 4 ) << a[ counter ];
24
25 if ( order == 1 ) {
26 bubble( a, arraySize, ascending );
27 cout << "\nData items in ascending order\n";
28 }
29 else {
30 bubble( a, arraySize, descending );
31 cout << "\nData items in descending order\n";
32 }
33
34 for ( counter = 0; counter < arraySize; counter++ )
35 cout << setw( 4 ) << a[ counter ];
36
37 cout << endl;
38 return 0;
39 }
40
41 void bubble( int work[], const int size,
42 int (*compare)( int, int ) )
43 {
73
44 void swap( int *, int * );
45
46 for ( int pass = 1; pass < size; pass++ )
47
48 for ( int count = 0; count < size - 1; count++ )
49
50 if ( (*compare)( work[ count ], work[ count + 1 ] ) )
51 swap( &work[ count ], &work[ count + 1 ] );
52 }
53
54 void swap( int *element1Ptr, int *element2Ptr )
55 {
56 int temp;
57
58 temp = *element1Ptr;
59 *element1Ptr = *element2Ptr;
60 *element2Ptr = temp;
61 }
62
63 int ascending( int a, int b )
64 {
65 return b < a; // swap if b is less than a
66 }
67
68 int descending( int a, int b )
69 {
70 return b > a; // swap if b is greater than a
71 }
Jelaskan dengan singkat, apa yang dilakukan oleh program di atas? Fungsi swap() menggunakan call by value atau call
by reference?
_________________________________________________________________________________________
_________________________________________________________________________________________
_________________________________________________________________________________________
74
Bab 8 Kelas dan Data Abstraksi
1. Membuat Objek dalam Bahasa Pemrograman C++
1 #include <iostream>
2
3 using namespace std;
4
5 class Car
6 {
7 char model[30];
8 float price;
9 int mileage;
10
11 public :
12 void accept()
13 {
14 cout << "\n\nEnter the model of the car : ";
15 cin >> model;
16 cout << "Enter the price of the model : ";
17 cin >> price;
18 cout << "Enter mileage : ";
19 cin >> mileage;
20 }
21 void display()
22 {
23 cout << "\nThe model of Car is " << model;
24 cout << "\nThe price is " << price;
25 cout << "\nThe average mileage is " << mileage;
26 }
27 };
28
29 int main()
20 {
31 Car c[2];
32
33 c[0].accept();
34 c[0].display();
35 c[1].accept();
36 c[1].display();
37
38 return 0;
39 }
class Car pada program diatas memiliki 3 member variable dan 2 member function, sebutkan :
75
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Jelaskan apa yang dimaksud dengan keyword public pada program di atas :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
1 #include <iostream>
2
3 using namespace std;
4
5 class Customer
6 {
7 private :
8 char mobileNo[13];
9 char name[26];
10 char dateOfBirth[11];
11 char billingAdd[51];
12 char city[26];
13 char phoneNo[14];
14 float amountOutstanding;
15
16 public :
17 void get()
18 {
19 cout << "\nMobile phone number : ";
20 cin >> mobileNo;
21 cout << "Name : ";
22 cin >> name;
23 cout << "Date of Birth : ";
76
24 cin >> dateOfBirth;
25 cout << "Billing Address : ";
26 cin >> billingAdd;
27 cout << "City : ";
28 cin >> city;
29 cout << "Phone Number : ";
30 cin >> phoneNo;
31 cout << "Amount due : ";
32 cin >> amountOutstanding;
33 }
34 void print()
35 {
36 cout << "\nMobile phone number : " << mobileNo;
37 cout << "\nName : " << name;
38 cout << "\nDate of Birth : " << dateOfBirth;
39 cout << "\nBilling Address : " << billingAdd;
40 cout << "\nCity : " << city;
41 cout << "\nPhone Number : " << phoneNo;
42 cout << "\nAmount due : " << amountOutstanding;
43 }
44 };
45
46 int main()
47 {
48 Customer c;
49
50 c.get();
51 c.print();
52
53 return 0;
54 }
Jelaskan keyword private pada program di atas :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
77
Jika member variables pada program di atas tidak memiliki access specifier (public,/private/protected),
seperti pada program sebelumnya, lalu access specifier apa yang akan berlaku pada member variabel
tersebut?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
2. Memahami konsep enkapsulasi dan abstraksi
1 #include <iostream>
2
3 using namespace std;
4
5 class Car
6 {
7 private :
8 char model[21];
9 void honk()
10 {
11 cout << "Paaarp paarrrp!" << endl;
12 }
13 public :
14 void setModel()
15 {
16 cout << "Enter the model name : ";
17 cin >> model;
18 }
19 void displayModel()
20 {
21 cout << "The model is : " << model << endl;
22 }
23 };
24
25 int main()
26 {
27 Car ford;
28 ford.setModel();
29 ford.displayModel();
30
31 ford.honk();
32 cin >> ford.model;
33
34 return 0;
35 }
78
Jalankan program di atas, lalu catat apa yang terjadi (beserta pesan kesalahan jika terjadi kesalahan) :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Apa yang terjadi jika baris 31 dan 32 dihilangkan? Catat keluaran program, lalu jelaskan mengapa demikian :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
3. Memahami konsep variabel statik dan fungsi statik
1 #include <iostream>
2
3 using namespace std;
4
5 class myclass
6 {
7 void increment()
8 {
9 static int i = 0;
10 cout << i << endl;
11 i++;
12 }
13 public :
14 void display()
15 {
16 cout << "Before increment : ";
17 increment();
18 cout << "After the first increment : ";
19 increment();
20 cout << "After the second increment : ";
79
21 increment();
22 }
23 };
24
25 int main()
26 {
27 myclass m;
28 m.display();
29 return 0;
30 }
Jalankan program di atas lalu catat hasilnya :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Jelaskan apa yang dimaksud dengan variabel statik :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Jelaskan apa yang terjadi jika program di atas tidak menggunakan variabel statik. Seperti apa hasil keluaran
program?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
1 #include <iostream>
2
3 using namespace std;
4
5 class StaticExample
6 {
7 int data;
8 static int staticVar;
9
80
10 public :
11 static void display()
12 {
13 cout << "staticVar = " << staticVar;
14 cout << "data = " << data;
15 }
16 };
17
18 int StaticExample::staticVar = 9;
19
20 int main()
21 {
22 StaticExample::display();
23 return 0;
24 }
Jalankan program di atas lalu catat hasilnya :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Apa yang dimaksud dengan fungsi statik?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Kesimpulan apa yang dapat diambil dari program di atas?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
4. Memahami konsep akses friend
1 #include <iostream>
2
3 using namespace std;
4
5 class A
81
6 {
7 private :
8 int a;
9 friend void f1();
10 };
11
12 void f1()
13 {
14 A obj;
15 obj.a = 5;
16 cout << obj.a;
17 }
18
19 void f2()
20 {
21 A obj;
22 obj.a = 5;
23 cout << obj.a;
24 }
25
26 int main()
27 {
28 f1();
29 f2();
30 return 0;
31 }
Program di atas menggunakan fungsi friend, jalankan program dan catat hasilnya :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Apakah terjadi kesalahan? Jika ya, catat pesan kesalahannya :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Apa yang terjadi jika baris 22 dan 23 dihilangkan?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
82
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Kesimpulan apa yang bisa diambil dari program di atas mengenai keyword friend?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
1 #include <iostream>
2
3 using namespace std;
4
5 class A
6 {
7 private :
8 int i;
9 public :
10 friend class B;
11 };
12
13 class B
14 {
15 public :
16 void func()
17 {
18 A a;
19 cout << "The value of i in class A is : " << a.i << endl;
20 }
21 };
22
23 int main()
24
25 B b;
26 b.func();
27
28 return 0;
29 }
Program di atas menggunakan kelas friend, jalankan program dan catat hasilnya :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
83
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Mengapa kelas B bisa mengakses member variable yang bersifat private pada kelas A? Jelaskan :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Kesimpulan apa yang bisa diambil dari program di atas?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
84
Bab 9 Constructor dan Destructor
1. Mengidentifikasi kegunaan constructor
Setiap suatu objek dibuat, maka sejumlah memori akan dialokasikan untuk objek tersebut. Tetapi proses
pengalokasian memori tidak melakukan inisialisasi terhadap variabel yang terdapat pada objek yang dibuat.
Variabel yang terdapat dalam suatu class tidak dapat diinisialisasi pada saat pendeklarasian.
Penginisialisasian variabel seperti dibawah ini tidak dapat dilakukan:
class Calculator
{
int number1 = 10;
int number2 = 20;
}
Hal ini dapat dipecahkan dengan membuat fungsi untuk menginisialisasi harga awal (initial value) setiap
variabel. Fungsi ini kemudian dapat dipanggil segera setelah objek dibuat.
1 #include <iostream>
2
3 using namespace std;
4
5 class Calculator
6 {
7 private:
8 int number1, number2, tot;
9 public:
10 void initialize()
11 {
12 number1 = 10;
13 number2 = 20;
14 }
15
16 void add()
17 {
18 tot = number1 + number2;
19 }
20
21 void display()
22 {
23 cout << "The total is " << tot << endl;
24 }
25 };
26
27 int main()
85
28 {
29 Calculator c;
30 c.initialize();
31 c.add();
32 c.display();
33 return 0;
34 }
Ketik program di atas dan jalankan. class Calculator harus memanggil fungsi initialize() untuk
menginisialisasi number1 dan number2. Jelaskan apa yang terjadi jika fungsi initialize() tidak dipanggil?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
2. Mendeklarasikan constructor
Untuk memecahkan masalah pada program sebelumnya, C++ memungkinkan pembuatan suatu fungsi
khusus di dalam class yang akan selalu dijalankan setiap kali suatu objek dari class tersebut dibuat. Fungsi ini
disebut constructor. Constructor adalah member function dari suatu class yang akan dipanggil setiap suatu
instance dari class yang mendeklarasikan constructor tersebut dibuat. Yang membedakan constructor
dengan member function yang lain adalah constructor memiliki nama yang sama dengan nama class yang
mendeklarasikannya. Dalam mendeklarasikan constructor tidak perlu menspesifikasikan tipe nilai kembalian
(return value) karena constructor tidak mengembalikan nilai.
1 #include <iostream>
2
3 using namespace std;
4
5 class Calculator
6 {
7 private:
8 int number1, number2, tot;
9 public:
10 Calculator()
11 {
12 number1 = 10;
13 number2 = 20;
14 cout << "Constructor invoked\n";
15 }
16
17 void add()
18 {
86
19 tot = number1 + number2;
20 }
21
22 void display()
23 {
24 cout << "The total is " << tot;
25 }
26 };
27
28 int main()
29 {
30 Calculator c;
31 c.add();
32 c.display();
33 return 0;
34 }
Bandingkan program di atas dengan program sebelumnya. Sebutkan baris mana saja yang berubah :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Tuliskan hasil keluaran program, dan kesimpulan apa yang dapat diambil dari program tersebut :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Ada satu keadaan dimana constructor dari suatu kelas tidak secara otomatis dipanggil iuntuk
menginisialisasi suatu objek class yang baru dibuat. Hal ini terjadi jika suatu objek digunakan untuk
menginisialisasi objek lain, seperti contoh dibawah ini :
Calculator obj1;
obj1.input();
87
Calculator obj2 = obj1;
Dengan cara seperti di atas maka obj2 dibuat sebagai bit-by-bit copy dari obj1. Hal seperti ini disebut
sebagai memberwise initialization.
3. Mengidentifikasi kegunaan destructor
Destructor merupakan komplemen dari constructor. Destructor dipanggil pada saat sebuah instance dari
sebuah objek berakhir keberadaannya. Destructor melakukan de-inisialisasi suatu objek yang sudah tidak
digunakan lagi. Destructor akan secara otomatis dipanggil jika objek dari suatu kelas keluar dari scope-nya.
Dengan menggunakan destructor, programer tidak perlu membersihkan memori yang telah digunakan oleh
data member setiap kali suatu objek keluar dari scope.
4. Mendeklarasikan destructor
Destructor memiliki nama yang sama dengan kelas yang mendeklarasikannya, tapi diawali dengan
tanda ~ (tilde). Setiap class hanya boleh memiliki satu destructor. Destructor tidak dapat menspesifikasikan
nilai kembalian (return value) atau secara eksplisit mengembalikan nilai.
Berikut adalah contoh penggunaan destructor :
1 #include <iostream>
2
3 using namespace std;
4
5 class Calculator
6 {
7 private:
8 int number1, number2, tot;
9 public:
10 Calculator()
11 {
12 number1 = 10;
13 number2 = 20;
14 cout << "Constructor invoked";
15 cout << "\nNumber1 = " << number1;
16 cout << "\nNumber2 = " << number2;
17 }
18
19 void add()
20 {
21 tot = number1 + number2;
22 }
23
24 void display()
25 {
26 cout << "\nThe total is " << tot;
27 }
88
28
29 ~Calculator()
30 {
31 number1 = 0;
32 number2 = 0;
33 cout << "\nDestructor invoked";
34 cout << "\nNumber1 = " << number1;
35 cout << "\nNumber2 = " << number2;
36 }
37 };
38
39 int main()
40 {
41 Calculator c;
42 c.add();
43 c.display();
44 return 0;
45 }
Tuliskan hasil keluaran dari program diatas :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Destructor juga dapat dipanggil secara eksplisit seperti contoh dibawah ini :
Calculator obj;
Obj.~Calculator();
Tapi sebenarnya destructor tidak perlu dipanggil secara eksplisit karena sistem akan secara otomatis
memanggil destructor ketika suatu objek keluar dari scope. Memanggil destructor secara eksplisit adalah
teknik yang digunakan pada skenario pemrograman lanjut, bukan ditujukan untuk pemula.
Berikut ini adalah contoh program untuk mengenali scope dari life cycle suatu objek :
1 #include <iostream>
2
3 using namespace std;
4
5 class Test
6 {
89
7 public:
8 Test()
9 {
10 cout << "\nConstructor invoked";
11 }
12 ~Test()
13 {
14 cout << "\nDestructor invoked";
15 }
16 };
17
18 Test obj1;
19
20 int main()
21 {
22 cout << "\nmain begins";
23 Test obj2;
24 {
25 cout << "\nInner block begins";
26 Test obj3;
27 cout << "\nInner block ends";
28 }
29 }
Amati program diatas, tulis hasil keluarannya, serta beri penjelasan mengenai scope dan pemanggilan
constructor serta destructor :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
90
5. Menggunakan scope resolution operator
Sebelumnya member function dan constructor dari suatu program didefinisikan di dalam blok class.
Fungsi-fungsi ini sebenarnya bisa didefinisikan di luar blok class dengan menggunakan scope resolution
operator (::) untuk membuat program lebih mudah dibaca. Berikut adalah contoh penggunaan scope
resolution operator :
1 #include <iostream>
2
3 using namespace std;
4
5 class Calculator
6 {
7 private:
8 int number1, number2, tot;
9 public:
10 Calculator();
11 void add();
12 void display();
13 ~Calculator();
14 };
15
16 Calculator::Calculator()
17 {
18 number1 = 10;
19 number2 = 20;
20 cout << "Constructor invoked";
21 cout << "\nNumber1 = " << number1;
22 cout << "\nNumber2 = " << number2;
23 }
24
25 void Calculator::add()
26 {
27 tot = number1 + number2;
28 }
29
30 void Calculator::display()
31 {
32 cout << "\nThe total is " << tot;
33 }
34
35 Calculator::~Calculator()
36 {
37 number1 = 0;
38 number2 = 0;
39 cout << "\nDestructor invoked";
40 cout << "\nNumber1 = " << number1;
41 cout << "\nNumber2 = " << number2;
91
42 }
43
44 int main()
45 {
46 Calculator c;
47 c.add();
48 c.display();
49 return 0;
50 }
Jelaskan apa kegunaan baris 10 – 13 pada program di atas?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
6. Menggunakan constructor dengan parameter
Suatu objek dapat diinisialisasi dengan menggunakan default constructor dengan nilai yang ditentukan
secara hard-coded di dalam program. Tetapi bisa saja berlaku suatu keadaan dimana variabel harus di set
dengan nilai yang dimasukkan oleh user. Untuk menangani masalah seperti ini sebuah constructor dapat
dimodifikasi untuk menerima nilai yang dimasukkan oleh user pada saat program dijalankan (run-time).
Berikut adalah contoh penggunaan constructor dengan parameter :
1 #include <iostream>
2
3 using namespace std;
4
5 class Calculate
6 {
7 private:
8 int num1, num2, total;
9 public:
10 Calculate(int, int);
11 void sum();
12 };
13
14 Calculate::Calculate(int x, int y)
15 {
16 num1 = x;
17 num2 = y;
18 total = 0;
19 }
92
20
21 void Calculate::sum()
22 {
23 total = num1 + num2;
24 cout << "The sum of " << num1 << " + " << num2 << " = " << total;
25 }
26
27 int main()
28 {
29 int var1, var2;
30
31 cout << "Enter the first value : ";
32 cin >> var1;
33 cout << "Enter the second value : ";
34 cin >> var2;
35 Calculate c(var1, var2);
36 c.sum();
37 return 0;
38 }
Jalankan program di atas, lalu tuliskan keluarannya.
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Kesimpulan apa yang dapat diambil dari program di atas? Jelaskan perbedaan antara constructor dengan
parameter dengan constructor tanpa parameter. Apa yang dimaksud dengan default constructor?
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Seperti juga pada constructor, member function dari suatu class juga dapat menerima masukan nilai dari
fungsi main(), berikut contohnya :
1 #include <iostream>
93
2
3 using namespace std;
4
5 class Add
6 {
7 int num1;
8 int num2;
9 int tot;
10
11 public:
12 void sum(int, int);
13 };
14
15 void Add::sum(int x, int y)
16 {
17 cout << "\nThe sum() function has started";
18 num1 = x;
19 num2 = y;
20 tot = num1 + num2;
21 cout << "\nSum is " << tot;
22 }
23
24 int main()
25 {
26 Add a;
27
28 cout << "\nThe main() function has started";
29 a.sum(17,14);
30 cout << "\nBack in main()";
31 a.sum(-9,-26);
32 cout << "\nThe main() function is now over";
33 return 0;
34 }
Jalankan program di atas, lalu tuliskan keluarannya.
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Amati dan jelaskan apa yang dilakukan program di atas
___________________________________________________________________________________________________________
94
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
95
Bab 10 Polymorphism
1. Mengidentifikasi kegunaan constructor
Static Polymorphism
Misalkan seseorang ingin mengirim barang ke Alaska. Ia menggunakan jasa kurir untuk mengirim barang
tersebut. Jasa kurir kemudian akan melakukan kontak dengan cabang mereka yang berada di Alaska.
Misalkan orang tersebut terlalu sibuk, lalu ia memberitahu sekretarisnya untuk mengirimkan barang
tersebut, tentu sekretarisnya akan melakukan hal yang berbeda dibandingkan dengan yang dilakukan
oleh kurir (si sekretaris akan menelfon jasa kurir dan menyampaikan pesan dari bos-nya yang akan
mengirimkan barang ke Alaska). Jadi, pesan yang sama untuk mengirimkan barang ke Alaska
menghasilkan dua reaksi yang berbeda. Kesimpulannya adalah, setiap perintah/pesan akan
diinterpretasikan berbeda, tergantung dari si penerima perintah/pesan tersebut. Konsep seperti ini disebut
sebagai polymorphism, yang menggambarkan bagaimana suatu objek dengan nama yang berbeda
(jasa kurir dan sekretaris) memberikan respon yang berbeda pada suatu perintah/pesan yang sama.
Kesimpulan :
a. Jika objek A ingin objek B melakukan sesuatu, objek A memberitahu objek B dengan mengirimkan
pesan b. Objek B melakukan serangkaian pekerjaan untuk mencapai tujuan yang diminta oleh objek A;
dengan kata lain, sebuah objek merespon suatu pesan dengan menggunakan sebuah method c. Objek yang berbeda dapat menggunakan method yang berbeda untuk pesan yang sama
Dalam pemrograman, polymorphism secara umum dibagi menjadi dua bagian, static polymorphism dan
dynamic polymorphism (tidak di bahas dalam praktikum ini). Static polymorphism menggambarkan suatu
entity yang dapat memiliki bentuk fisik yang berbeda secara simultan. Konsep seperti ini analog dengan
seorang wanita yang menjadi istri, ibu, adik, anak dan direktur dalam waktu yang bersamaan.
2. Meng-overload fungsi
Function Overloading
Function overloading adalah suatu proses menggunakan nama yang sama untuk dua atau lebih fungsi.
Setiap definisi ulang dari fungsi yang di overloading harus menggunakan tipe parameter, urutan
parameter, atau jumlah parameter yang berbeda. Jumlah, tipe atau urutan parameter dari suatu fungsi
disebut function signature. Jika kita memiliki sejumlah fungsi dengan nama yang sama, compiler akan
mengidentifikasi fungsi-fungsi tersebut berdasarkan parameternya. Keuntungan memiliki beberapa fungsi
dengan nama yang sama dapat dilihat pada program berikut :
1 #include <iostream>
2
3 using namespace std;
4
5 class Overload
96
6 {
7 public:
8 int max(int, int);
9 float max(float, float);
10 };
11
12 int Overload::max(int num1, int num2)
13 {
14 if (num1 > num2)
15 return num1;
16 else
17 return num2;
18 }
19
20 float Overload::max(float num1, float num2)
21 {
22 if (num1 > num2)
23 return num1;
24 else
25 return num2;
26 }
27
28 int main()
29 {
30 Overload o;
31
32 cout << o.max(5.4F,8.6F) << endl;
33 cout << o.max(19,12) << endl;
34
35 return 0;
36 }
Catat hasil keluaran program di atas dan berikan kesimpulan mengenai kegunaan dari polymorphism :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
97
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Function Signature
Signature dari suatu fungsi didefinisikan dengan
a. Jumlah parameter yang dimiliki fungsi Contoh :
void add(int);
void add(int, float);
Pada contoh ini dua fungsi bernama add() ini berbeda karena jumlah parameternya berbeda
b. Tipe data parameter fungsi Contoh :
void display(int)
void display(char)
Pada contoh ini dua fungsi bernama display() ini berbeda karena tipe parameternya berbeda
c. Urutan tipe data dari parameter fungsi Contoh :
void display(int, char)
void display(char, int)
Pada contoh ini dua fungsi bernama display() ini berbeda karena urutan tipe parameternya
berbeda
d. Nilai return suatu fungsi TIDAK membedakan 2 fungsi dengan nama yang sama. Karena itu
deklarasi fungsi di bawah ini tidak bisa diletakkan dalam satu class yang sama void display()
char display()
Constructor Overloading
1 #include <iostream>
2
3 using namespace std;
4
5 class Calculator
6 {
7 private:
8 int number1, number2, tot;
9 public:
10 Calculator();
11 Calculator(int, int);
12 void input(int, int);
13 void add();
14 void disp();
15 };
98
16
17 Calculator::Calculator()
18 {
19 number1 = number2 = tot = 0;
20 }
21
22 Calculator::Calculator(int num1, int num2)
23 {
24 number1 = num1;
25 number2 = num2;
26 }
27
28 void Calculator::input(int num1, int num2)
29 {
30 number1 = num1;
31 number2 = num2;
32 }
33
34 void Calculator::add()
35 {
36 tot = number1 + number2;
37 }
38
39 void Calculator::disp()
40 {
41 cout << "The sum of two numbers is " << tot << endl;
42 }
43
44 int main()
45 {
46 Calculator cal1;
47 Calculator cal2(4,3);
48 Calculator *calptr;
49 calptr = new Calculator(5,10);
50
51 cal2.add();
52
53 cal2.disp();
54 calptr->add();
55 calptr->disp();
56
57 delete calptr;
58 return 0;
59 }
Catat hasil keluaran program di atas dan berikan kesimpulan mengenai program diatas :
___________________________________________________________________________________________________________
99
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
3. Memahami perlunya melakukan overloading operator
Konsep overloding fungsi dapat juga diterapkan pada operator. Yang dimaksud dengan operator
overloading adalah menambah fungsi dari operator C++ normal jika digunakan pada tipe data yang
didefinisikan oleh user (user-defined data types). Hanya operator C++ yang bersifat predefined yang dapat di
overload.
Dengan menggunakan operator overloading maka user dapat memahami notasi dengan lebih mudah
daripada dengan menggunakan fungsi karena lebih mendekati implementasi sebenarnya.
4. Meng-overload operator unary
Operator unary dapat didefinisikan sebagai member function yang tidak mengambil parameter atau
non-member function yang mengambil 1 parameter.
Berikut ini adalah contoh program sederhana untuk meng-overloading operator '-' :
1 #include <iostream>
2
3 using namespace std;
4
5 class MyOp
6 {
7 private:
8 int a;
9 int b;
10 public:
11 void operator -();
12 void accept(int, int);
13 void print();
14 };
15
16 void MyOp::operator -()
100
17 {
18 a = -a;
19 b = -b;
20 }
21
22 void MyOp::accept(int x, int y)
23 {
24 a = x;
25 b = y;
26 }
27
28 void MyOp::print()
29 {
30 cout << "a = " << a << endl;
31 cout << "b = " << b << endl;
32 }
33
34 int main()
35 {
36 MyOp m;
37
38 m.accept(26, -9);
39 m.print();
40
41 -m;
42
43 m.print();
44
45 return 0;
46 }
Catat hasil keluaran program di atas dan berikan kesimpulan mengenai program diatas :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
101
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
5. Meng-overload operator biner
Operator biner adalah operator yang bekerja dengan 2 operand. Meng-overloda operator biner sama
dengan meng-overload operator unary, hanya saja overloading operator biner memerlukan tambahan
parameter.
Berikut adalah contoh program overloading operator biner :
1 #include <iostream>
2
3 using namespace std;
4
5 class Matrix
6 {
7 private:
8 int n[2][2];
9
10 public:
11 Matrix();
12 Matrix(int, int);
13 void accept();
14 Matrix operator +(Matrix);
15 void display();
16 ~Matrix();
17 };
18
19 Matrix::Matrix()
20 {
21 int i, j;
22
23 for (i = 0; i < 2; i++)
24 for (j = 0 ; j < 2; j++)
25 n[i][j] = 0;
26 }
27
28 Matrix::Matrix(int row, int col)
29 {
30 for (i = 0; i < row; i++)
31 for (j = 0 ; j < col; j++)
32 n[i][j] = 0;
33 }
34
35 void Matrix::accept()
102
36 {
37 int i, j;
38
39 for (i = 0; i < 2; i++)
40 for (j = 0 ; j < 2; j++)
41 {
42 cout << "Data[" << i+1 << "][" << j+1 << "] = ";
43 cin >> n[i][j];
44 }
45 }
46
47 Matrix Matrix::operator +(Matrix m)
48 {
49 int i, j;
50 Matrix r;
51
52 for (i = 0; i < 2; i++)
53 for (j = 0 ; j < 2; j++)
54 r.n[i][j] = n[i][j] + m.n[i][j];
55
56 return r;
57 }
58
59 void Matrix::display()
60 {
61 int i, j;
62
63 for (i = 0; i < 2; i++)
64 for (j = 0 ; j < 2; j++)
65 cout << "Data[" << i+1 << "][" << j+1 << "] = " << n[i][j] << endl;
66 }
67
68 Matrix::~Matrix()
69 {
70 }
71
72 int main()
73 {
74 int nRow, nCol;
75
76 Matrix A(nRow,nCol), B(nRow,nCol), C(nRow,nCol);
77
78 cout << "Number of row : ";
79 cin >> nRow;
80 cout << "Number of col : ";
81 cin >> nCol;
82
103
83 cout << "\nMatrix A : \n";
84 A.accept();
85 cout << "\nMatrix B : \n";
86 B.accept();
87
88 cout << "\nMatrix A : \n";
89 A.display();
90 cout << "\nMatrix B : \n";
91 B.display();
92
93 C = A + B;
94
95 cout << "\nC = A + B";
96 cout << "\nMatrix C : \n";
97 C.display();
98
99 return 0;
100 }
Catat hasil keluaran program di atas :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
Jelaskan mengenai apa yang dilakukan oleh program di atas, dan keuntungan apa yang diperoleh dengan
menggunakan operator overloading :
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
104
___________________________________________________________________________________________________________
___________________________________________________________________________________________________________
105
Bab 11 Inheritance
1. Mendefinisikan apa yang dimaksud dengan konsep hubungan (relationship) antar kelas
dan objek
Dalam kehidupan sehari-hari terdapat banyak contoh hubungan (relationship) seperti hubungan ayah-
anak, ibu-anak atau kakak-adik. Demikian juga dalam aplikasi perangkat lunak, kelas-kelas dan objek-
objek terhubung satu sama lain. Kelas-kelas dan objek-objek saling memberi aksi dan reaksi.
Menggambarkan dinamika kelas dan objek dalam suatu program aplikasi membuat program tersebut
semakin mendekati apa yang terjadi di dunia nyata.
Dalam pendekatan berorientasi objek, objek melakukan aksi sebagai respon dari pesan yang diberikan
objek lain sebagai tingkah laku (behaviour) dari objek yang menerima pesan tersebut. Pendekatan ini
menspesifikasikan hubungan antar kelas menurut tingkah laku dari suatu kelas tertentu.
Perhatikan kemiripan dan perbedaan dari objek dan kelas berikut ini : kendaraan, mobil, supir atau mesin.
Lalu kita membuat pengamatan seperti berikut ini :
Truk adalah sejenis kendaraan
Mobil adalah jenis lain dari kendaraan
Mesin adalah bagian dari kendaraan
Supir mengendarai mobil
Dari pengamatan di atas telah diidentifikasi hubungan antar kelas dan objek.
Ada dua alasan utama untuk membuat hubungan. Pertama, hubungan antar kelas, dimana
hubungannya mengindikasikan bentuk sharing antar kelas. Sebagai contoh, truk dan mobil adalah jenis
kendaraan, berarti keduanya memiliki 4 buah roda, memiliki setir, mempunyai kapasitas penumpang dan
seterusnya. Mobil dan truk keduanya mewarisi sifat-sifat yang dimiliki oleh sebuah kendaraan. Karena itu,
hubungan antara mobil dan kendaraan, antara truk dan kendaraan adalah hubungan kelas-kelas.
Kedua, hubungan antar kelas, dimana hubungan tersebut mengindikasikan suatu keterkaitan
(connection). Contoh : salah satu bagian dari mobil adalah mesin, dan supir mengendarai sebuah mobil.
Coba perhatikan bentuk hubungan sebelumnya. Mesin adalah bagian dari kendaraan. Ketika kita
mengidentifikasi atribut dari suatu kendaraan, suatu instance dari kelas Mesin akan menjadi atribut dari
suatu kendaraan. Karena itu walaupun hubungannya terlihat seperti hubungan antar kelas, sebenarnya
itu adalah hubungan kelas-objek.
Sekarang perhatikan hubungan antara supir dengan mobil. Supir menggunakan mobil, dan tidak menjadi
bagian dari mobil seperti mesin. Bentuk seperti ini disebut hubungan kelas-kelas.
Jenis –jenis hubungan yang bisa diidentifikasi adalah :
Inheritance
Seseorang atau sesuatu mewarisi sejumlah atribut dari orang atau benda lain. Contoh :
Seorang anak mewarisi rambut hitam tebal dari ayahnya dan hidung mancung ibunya.
Composition
Sesuatu terdiri dari benda lain. Contoh : mobil terdiri dari ban, mesin, setir, pintu dan lain lain.
106
Utilization
Suatu benda menggunakan benda lain. Contoh : supir mengendarai mobil, mahasiswa
menggunakan pensil gambar.
Instantiation
Hubungan antara suatu kelas dengan perwujudannya (instance). Contoh : D 1234 AB adalah
sebuah mobil, "Supernova" adalah sebuah buku.
a. Tentukan hubungan antara pasangan-pasangan kelas di bawah ini dan beri alasan singkat :
Televisi – Speaker
_______________________________________________________________________________________________
_______________________________________________________________________________________________
_______________________________________________________________________________________________
_______________________________________________________________________________________________
_______________________________________________________________________________________________
Mamalia – Harimau
_______________________________________________________________________________________________
_______________________________________________________________________________________________
_______________________________________________________________________________________________
_______________________________________________________________________________________________
_______________________________________________________________________________________________
Bahan – Kaus
_______________________________________________________________________________________________
_______________________________________________________________________________________________
_______________________________________________________________________________________________
_______________________________________________________________________________________________
_______________________________________________________________________________________________
Cangkir – Teh
_______________________________________________________________________________________________
_______________________________________________________________________________________________
_______________________________________________________________________________________________
_______________________________________________________________________________________________
_______________________________________________________________________________________________
Komputer – Mikroprosesor
_______________________________________________________________________________________________
_______________________________________________________________________________________________
_______________________________________________________________________________________________
107
_______________________________________________________________________________________________
_______________________________________________________________________________________________
b. Untuk objek-objek di bawah ini buatlah hirarki dan generalisir yang mungkin : Mixer, VCR, TV Berwarna,
Mesin Cuci, Stereo
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
c. Identifikasi kelas dan hubungan utilization dari suatu department store berikut ini :
Terdapat beberapa counter barang, yang masing-masing dijaga oleh seorang penjual yang
menawarkan satu jenis produk tertentu. Pembeli menghampiri counter mana saja yang produknya
akan dibeli. Penjual akan memberikan barang tersebut dan menerima pembayarannya.
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
108
___________________________________________________________________________________________________
___________________________________________________________________________________________________
___________________________________________________________________________________________________
2. Memahami konsep inheritance dan data hiding
Dalam C++, inheritance adalah properti dimana suatu objek dari kelas turunan (derived class) memiliki
salinan data dan fungsi yang dimiliki oleh kelas yang menurunkannya (base class). Dalam istilah orientasi-
objek, sebuah base class disebut superclass dan derived class disebut subclass.
Kelas yang mewarisi atau menurunkan atribut dari kelas lain disebut derived class and yang menurunkan
kelas tersebut disebut base class. Setiap instance dari derived class mewarisi atribut-atribut yang dimiliki
base class. Karena itu, derived class memiliki jumlah atribut yang lebih banyak daripada yang dimiliki oleh
base class. Sebuah derived class dapat saja memodifikasi sebagian atau semua atribut yang dimiliki oleh
base class.
Sebagai tambahan, lebih dari satu kelas dapat mewarisi atribut dari satu base class, dan derived class
bisa menjadi base class untuk kelas lain. Proses ini memungkinkan terjadinya proses reusability program.
Setelah sebuah kelas didefinisikan dan di-debug, kelas tersebut dapat digunakan untuk kelas turunannya,
hal ini menghemat waktu dan pekerjaan.
Kegunaan inheritance :
Mengurangi redundancy pada program
Memudahkan pengembangan program, karena program diletakkan pada satu tempat, yaitu base
class, sehingga perubahan pada base class akan secara otomatis mengubah sifat-sifat dari derived
class karena derived class secara otomatis akan mewarisi sifat-sifat baru dari base class.
Menambah fungsi dari kelas yang ada dengan menambahkan fungsi ke dalam subclass.
Untuk membatasi akses derived class pada data dan fungsi yang dimiliki oleh base class, terdapat
beberapa pembatas akses (access specifier) :
public
Dengan access specifier ini, semua anggota dari base class yang diturunkan pada derived
class, yang bersifat private akan tetap bersifat private, yang protected tetap protected dan
yang public tetap public. protected
Semua anggota dari base class yang diturunkan pada derived class, yang bersifat private
akan tetap private, yang protected tetap protector dan yang public akan menjadi
protected. Programer biasanya menggunakan bentuk ini untuk melakukan inheritance. private
Semua anggota dari base class yang diturunkan pada derived class, yang bersifat private,
protected dan public akan bersifat private. Bentuk inheritance seperti ini disebut komposisi
(composition) antara base class dengan derived class, yang berarti derived class hanya
memiliki satu instance dari base class.
Berikut adalah ilustrasi dari tiga jenis inheritance, untuk setiap kasus, access specifier-nya berbeda.
109
CASE 1 CASE 2 CASE 3
class BASE
{
private :
int a, b;
protected :
int c, d;
public :
int e;
int Fn();
};
class BASE
{
private :
int a, b;
protected :
int c, d;
public :
int e;
int Fn();
};
class BASE
{
private :
int a, b;
protected :
int c, d;
public :
int e;
int Fn();
};
class DERIVED : public BASE
{
private :
int p, q;
protected :
int r, s;
public :
int t;
int D();
};
class DERIVED : protected
BASE
{
private :
int p, q;
protected :
int r, s;
public :
int t;
int D();
};
class DERIVED : private BASE
{
private :
int p, q;
protected :
int r, s;
public :
int t;
int D();
};
Berikut adalah representrasi visual dari objek dari derived class, dengan satu objek untuk tiap kasus.
a b p q private
members a b p q
private
members
a b c d p q
e Fn()
c d r s protected
members
c d e r s
Fn()
protected
members r s
e Fn() t D() public
members t D()
public
members t D()
Objek dari
Derived
Class pada
CASE 1 -
public
access
specifier
Objek dari
Derived
Class pada
CASE 1 -
protected
access
specifier
Objek dari
Derived
Class pada
CASE 1 -
private
access
specifier
Berikut ini adalah contoh program sederhana yang menggunakan inheritance :
1 #include <iostream>
2
110
3 using namespace std;
4
5 class furniture
6 {
7 protected:
8 char color[12];
9 int width;
10 int height;
11 };
12
13 class bookshelf:public furniture
14 {
15 private:
16 int no_shelves;
17
18 public:
19 void accept()
20 {
21 cout << "\nEntering bookshelf details\n";
22 cout << "Enter color : ";
23 cin >> color;
24 cout << "Enter width : ";
25 cin >> width;
26 cout << "Enter height : ";
27 cin >> height;
28 cout << "Enter No. of shelves : ";
29 cin >> no_shelves;
30 }
31 void display()
32 {
33 cout << "\nDetails of the bookshelf\n");
34 cout << "Color is " << color << endl;
35 cout << "Width is " << width << endl;
36 cout << "Height is " << height << endl;
37 cout << "Number of shelves is " << no_shelves << endl;
38 }
39 };
40
41 class chair:public furniture
42 {
43 private:
44 int no_legs;
45
46 public:
47 void accept()
48 {
49 cout << "\nEntering chair details\n";
111
50 cout << "Enter color : ";
51 cin >> color;
52 cout << "Enter width : ";
53 cin >> width;
54 cout << "Enter height : ";
55 cin >> height;
56 cout << "Enter No. of legs : ";
57 cin >> no_legs;
58 }
59 void display()
60 {
61 cout << "\nDetails of the chair\n");
62 cout << "Color is " << color << endl;
63 cout << "Width is " << width << endl;
64 cout << "Height is " << height << endl;
65 cout << "Number of legs is " << no_legs << endl;
66 }
67 };
68
69 int main()
70 {
71 bookshelf bs;
72 chair c;
73 bs.accept();
74 c.accept();
75 bs.display();
76 c.display();
77
78 return 0;
79 }
2.1 Jelaskan hirarki kelas di atas!
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
2.2 Jelaskan apa yang dilakukan program di atas :
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
112
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
2.3 Seorang programmer menulis program di bawah ini untuk mengimplementasi program grafik untuk
menggambar bentuk grafik sederhana. Programmer tersebut sudah pindah ke tempat lain, dan
sekarang Anda yang harus menyelesaikan program yang belum selesai ini. Buatlah perubahan
yang diperlukan dan ujilah program yang Anda buat :
class Shape { protected: int length; int breadth; int area; public: Shape() { length=0; breadth=0; } void setParameters() { int length, breadth; cout << "Enter length and breadth : "; cin >> length >> breadth; this.length = length; this.breadth = breadth; } void displayParameters() { cout << "Length : " << length; cout << "Breadth : " << breadth; } void draw() {
cout << "Draw the shape"; } void calculateArea() { //bagian ini harus dilengkapi
113
} }; class Rectangle: public Shape { //implement isi kelasnya }; class Circle:public Shape { //implement isi kelasnya }; int main() {
Shape *shape; cout <<”Specify what you want to draw:” cout <<”R for rectangle”<<endl; cout <<”C for circle”<<endl; char choice; cin>>choice; switch(choice) { case ‘R’: case ‘r’: shape= new Rectangle(); break; case ‘C’: case ‘c’: shape=new Circle(); } shape.setParameters(); shape.displayParameters(); shape.calculateArea(); shape.draw();
}
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
114
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________