Gambar 9.1 di samping ini mungkin menimbulkan pertanyaan. Apa hubungannya dengan judul bab di atas? Tapi tahukah anda bahwa pesawat luar angkasa seperti pada Gambar 9.1 dikendalikan oleh seperangkat komputer canggih yang sebagian aplikasi pengendalinya ditulis dengan bahasa pemrograman C++.

Gambar 9.1. Pesawat Luar Angkasa
Standar kompetensi program aplikasi menggunakan C++ terdiri atas lima kompetensi dasar. Dalam penyajian pada buku ini, setiap kompetensi dasar memuat tujuan, uraian materi, dan latihan. Rangkuman diletakkan pada akhir bab.
Kompetensi dasar pada bab ini adalah dasar-dasar pemrograman C++, menerapkan fungsi, menerapkan pointer, menerapkan konsep Class, dan merancang aplikasi berorientasi Obyek. Sebelum mempelajari kompetensi ini ingatlah kembali sistem operasi, algoritma pemrograman dasar, algoritma pemrograman lanjutan dan konsep-konsep pemrograman berorientasi obyek pada bab-bab sebelumnya.
Pada bagian akhir, tercantum soal-soal latihan yang disusun dari soal-soal yang mudah hingga soal-soal yang sulit. Latihan soal ini digunakan untuk mengukur kemampuan terhadap kompetensi dasar yang ada pada bab ini. Untuk melancarkan kemampuan agar lebih baik dalam mengerjakan soal, disarankan semua soal dalam latihan ini dapat dikerjakan di sekolah dengan bimbingan guru maupun di rumah.
Tujuan
Setelah mempelajari bab ini diharapkan pembaca akan mampu:
- Menjelaskan dasar-dasar pemrograman C++
- Menerapkan fungsi o Menerapkan pointer
- Menerapkan konsep kelas
- Merancang aplikasi berorientasi obyek
1. Dasar Pemrograman C++
Bahasa C++ merupakan bahasa yang sangat populer di dunia pengembangan perangkat lunak. Seperti halnya pendahulunya yaitu Bahasa C, C++ juga dimasukkan dalam kelompok bahasa tingkat menengah (middle level language). Tujuan utama pembuatan C++ adalah untuk meningkatkan produktivitas pemrogram dalam membuat aplikasi. Keistimewaan C++ adalah karena bahasa ini telah mendukung OOP (Object Oriented Programming). Selain itu juga tersedia banyak pustaka (library) yang dapat kita gunakan untuk mempercepat pembuatan aplikasi. Pustaka ini sebagian tersedia gratis di beberapa situs internet.
Kode program dalam bahasa C++ yang kita buat tidak dapat langsung dieksekusi namun harus dikompilasi lebih dahulu dengan compiler C++ yang sesuai. Konsep kompilasi dan eksekusi program pada C++ dapat digambarkan seperti pada Gambar 9.2. Kode program yang kita buat disebut sebagai kode sumber dan merupakan file teks biasa dengan nama file yang berekstensi .cpp. Kode program ini kemudian dimasukkan ke PreProcessor. Keluaran dari PreProcessor ini adalah file yang akan dimasukkan ke dalam Compiler. Compiler akan menerjemahkan kode program dalam file tersebut menjadi bahasa assembly. Kode program program ini kemudian diproses oleh Assembler menjadi kode obyek. Jika tidak ada file pustaka (library) yang terlibat, maka kode obyek ini akan langsung dieksekusi menjadi file. Jika ada pustaka lain yang terlibat maka Link Editor akan mengkombinasikan kode obyek dan pustaka untuk membentuk file EXE.
Kita dapat mengetikkan kode-kode C++ dengan sebarang teks editor, seperti Notepad, Vi, atau yang lainnya. Namun akan lebih mudah jika kita menggunakan perangkat IDE (Integrated Development Environment) yang menyediakan secara terintegrasi teks editor dan compiler C++. Beberapa IDE yang cukup terkenal antara lain Microsoft Visual Studio, Borland C++, MingGW Developer Studio, dan lain-lain. Pada buku ini sebagian besar code ditulis dan dijalankan dengan menggunakan MingGW Developer Studio (Gambar 9.3). Lisensi IDE ini free, artinya kita bisa menggunakan tanpa diributkan dengan masalah lisensi dari perangkat lunak. Kalian dapat mendownload IDE ini dari alamat internet http://www.parinya.ca/

Gambar 9.2. Proses kompilasi pada C++

Gambar 9.3. MingGW Developer Studio
2. Kerangka Program C++
#include <iostream> using namespace std; void nama_fungsi() { //kode untuk nama_fungsi
.....;
}
// Fungsi utama int main() {
// kode bagian main/utama
.....; return 0;
}
Perhatikan kode program di atas. Kode program terdiri dari beberapa bagian seperti berikut:
- Bagian untuk mendaftarkan file atau kondisi tertentu. Bagian ini selalu diawali dengan tanda #.
- Bagian pendefinisian fungsi. Diawali dengan kata kunci void diikuti nama fungsi. Bagian ini boleh tidak ada jika kita tidak membuat fungsi.
- Bagian main(). Pada kode program biasanya dimulai dengan int main(). Bagian ini harus ada pada setiap program karena merupakan fungsi utama.
- Bagian yang dimulai dengan tanda { dan diakhiri dengan tanda }, baik pada bagian void maupun main, disebut blok kode.
3. Header File (.h)
File header yaitu file dengan ekstensi .h merupakan file yang berisi fungsifungsi dan telah dikompilasi sebelumnya. File ini biasanya berisi fungsi-fungsi tertentu yang nantinya akan kita gunakan dalam kode program yang kita buat. Sebagai contoh file iostream.h mempunyai sejumlah fungsi untuk menampilkan output dan menangkap input seperti cout dan cin.
Ada dua model penulisan file header, yaitu dengan dituliskan lengkap dengan ekstensinya dan tidak. Bentuk pertama adalah model penulisan untuk compiler C++ lama (Contoh 9.1). Bentuk kedua merupakan bentuk yang didukung oleh Compiler C++ standar (Contoh 9.2).
Contoh 9.1. Penulisan file header pada Compiler C++ lama
#include <iostream.h>
Int main() {
...
return 0;
}
Contoh 9.2. Penulisan file header pada Compiler C++ standar
#include <iostream> using namespace std; Int main() {
...
return 0;
}
4. Komentar
Komentar pada C++ dapat dilakukan dengan dua cara, yaitu pertama, dengan tanda // dan diletakkan sebelum komentar dan kedua dengan tanda /* yang ditutup dengan */. Cara pertama digunakan jika komentar hanya terdiri dari satu baris, sedangkan cara kedua jika komentar lebih dari satu baris.
Contoh 9.3. Komentar dengan tanda
// program pertama #include <iostream> int main( ){
cout << "Hello World"; // cetak "Hello World" di layar }
Contoh 9.4. Komentar dengan tanda /* .. */..
/* Program pertama
Ditulis oleh ARM
Tanggal 17-11-2007 */ #include <iostream> int main( ){
std::cout << "Hello World"; // cetak "Hello World" di layar }
5. Identifier
Identifier atau nama dari variabel atau konstanta pada C++ secara umum sama mengikuti aturan umum penamaan yang telah dijelaskan pada Bab 5. Ada satu tambahan yang cukup penting dalam pembuatan identifier pada C++ yaitu, bersifat case sensitif. Variabel dengan nama namaguru berbeda dengan variabel NamaGuru.
Ada dua cara untuk mendeklarasikan konstanta. Pertama, dengan menggunakan preprocessor directive #define. Kedua, dengan menggunakan kata kunci const. Ketiklah program berikut ini, kemudian periksalah hasil dari eksekusinya.
Contoh 9.5. Pendeklarasian konstanta
#include <iostream> #define potongan 0.1; using namespace std;
int main() {
const float hargaPerUnit = 2500; int jumlahUnit;
float hargaTotal, hargaDiskon, diskon; cout << "Masukkan jumlah unit pembelian : "; cin >> jumlahUnit;
hargaTotal = jumlahUnit * hargaPerUnit; diskon = hargaTotal * potongan; hargaDiskon = hargaTotal - diskon; cout << "Total harga pembelian = " << hargaTotal << endl;
cout << "Diskon = " << diskon << endl; cout << "Harga Diskon = " << hargaDiskon; return 0; }
Pada contoh di atas, terdapat dua konstanta yaitu potongan dan hargaPerUnit yang masing-masing dideklarasikan dengan cara berbeda.
Deklarasi variabel dilakukan dengan cara menyebutkan lebih dahulu tipe datanya kemudian diikuti dengan nama variabelnya seperti pada contoh 9.5. Pada contoh tersebut ada beberapa variabel yang telah didefinisikan lebih dahulu yaitu jumlahUnit, hargaTotal, hargaDiskon dan diskon. Masingmasing dengan tipe datanya sendiri. Untuk beberapa variabel yang tipe datanya sama, kita dapat menggabungkan dalam satu baris dengan tanda pemisah koma. Perhatikan pada contoh di atas. hargaTotal, hargaDiskon dan diskon sama-sama mempunyai tipe data float sehingga penulisannya digabung.
Kalian harus mendeklarasikan dengan lengkap seluruh variabel atau konstanta yang akan dipakai lebih dahulu sebelum menggunakan. Kalau tidak maka program tidak akan dapat dieksekusi.
6. Tipe data
Seperti telah dijelaskan pada Bab 5, tipe data tergantung dari yang disediakan oleh bahasa pemrograman. Pada C++ tipe data dasar yang disediakan dapat dilihat pada tabel berikut. Kalau kalian perhatikan tipe-tipe ini sama persis dengan Java. Hal ini karena Java sebenarnya banyak mengambil elemen-elemen bahasa pemrograman dari C++.
Tabel 9.1. Tipe data pada C++
| Tipe Data | Keterangan |
|-----------|-------------------------------------------------------------------------------------------------------------------------|
| int | Tipe data bilangan bulat dengan ukuran 4 bytes |
| long | Tipe data bilangan bulat namun lebih besar dari int. |
| float | Tipe data bilangan pecahan |
| double | Tipe data bilangan pecahan namun lebih besar dari float |
| char | Tipe data karakter yang berisi huruf, angka atau simbolsimbol (alphanumeric) sepanjang berada pada tanda “ “ atau ‘ ‘. |
| bool | Tipe data boolean |
| short | Tipe data bilangan bulat dengan ukuran 2 bytes |
Tipe data bentukan yang tersedia pada C++ adalah array, struct dan enum. Array akan kita bahas pada bagian lain di bab ini. Sedangkan struct dan enum telah kita singgung di Bab 5. Namun begitu cara penulisannya belum kita ulas. Cobalah ketikkan kode-kode program pada contoh berikut ini kemudian eksekusi untuk melihat hasilnya.
Contoh 9.6. Penggunaan tipe data struct
#include <iostream> using namespace std;
int main() {
struct Guru { char* NIP; char* Nama; char* Alamat;
};
Guru A;
A.NIP = "132 232 477";
A.Nama = "Syafiq";
A.Alamat = "Perum. Dirgantara Permai";
// Menampilkan nilai yang diisikan ke layar cout<<A.NIP<<endl; cout<<A.Nama<<endl; cout<<A.Alamat<<endl;
return 0; }
Contoh 9.6. Penggunaan tipe data enum
#include <iostream> using namespace std;
enum JENIS_KELAMIN { Pria, Wanita }; int main() { struct Guru { char* NIP; char* Nama; JENIS_KELAMIN JK;
} A;
A.NIP = "132 232 477";
A.Nama = "Syafiq";
A.JK = Pria;
cout<<"NIP : "<<A.NIS<<endl; cout<<"Nama : "<<A.Nama<<endl; cout<<"Jenis Kelamin : "<<A.JK<<endl;
return 0;
}
7. Operator
Seperti halnya pada VB dan Java yang telah anda pelajari, C++ juga menyediakan banyak operator yang dapat kita gunakan untuk membantu memecahkan masalah tertentu. Secara umum banyak kemiripan antara Java dengan C++ dalam penyediaan operator. Operator-operator yang tersedia pada C++ dapat dilihat pada Tabel 9.2.
Tabel 9.2. Operator pada C++
| Jenis Operator | Fungsi | Contoh |
|---------------------|---------------------------------------------------|------------------------------------------|
| Operator assignment | | |
| = | Memasukkan (assign) nilai ke dalam suatu variabel | C = 5 |
| Operator unary | | |
| + | Membuat nilai positif | X = +10 |
| - | Membuat nilai negatif | Y = -12 |
| ++ | Menaikkan nilai variabel satu nilai | ++C (pre-increment) C++ (post-increment) |
| -- | Menurunkan nilai variabel satu nilai | --C (pre-increment) C-- (post-increment) |
| Operator Binary | | |
| + | Penjumlahan | 3 + 5 = 8 |
| - | Pengurangan | 7 – 2 = 5 |
| * | Perkalian | 5 * 2 = 10 |
| / | Pembagian | 6 / 3 = 2 |
| % | Sisa hasil bagi (modulus) | 5 / 2 = 1 |
| Operator Logika | | |
| && | AND | 1 && 1 = 1 |
| \|\| | OR | 1 \|\| 0 = 1 |
| ! | NOT | !0 = 1 |
| Operator Relasional | | |
| > | Lebih besar | (5 > 4) = 1 |
| < | Lebih kecil | (5 < 4) = 0 |
| >= | Lebih besar atau sama dengan | (4 >= 4) = 1 |
| <= | Lebih kecil atau sama dengan | (5 <= 4) = 0 |
| == | Sama dengan | (5 ==4) = 0 |
| != | Tidak sama dengan | (5 != 4) = 1 |
| Operator Bitwise | | |
| & | AND | 1 & 0 = 0 |
| \| | OR | 1 \| 0 = 1 |
| ^ | XOR | 1 ^ 1 = 0 |
| ~ | NOT | ~0 = 1 |
| Operator Ternary | | |
| ?: | Digunakan operand jika melibatkan tiga | 1 & 0 = 0 |
8. Struktur Kontrol Program
Struktur kontrol program pada C++ secara umum sama dengan VB dan Java yang telah kalian pelajari. Yang berbeda adalah sintaks penulisannya. Untuk percabangan, C++ menyediakan perintah if (tanpa then) dan switch ... case. Sedangkan untuk pengulangan, C++ menyediakan perintah for, while, dan do-while. Selain itu, pada pengulangan juga menyediakan fasilitas break dan continue. Secara berurutan berikut ini akan disampaikan kode-kode program untuk menerapkan struktur kendali. Ketikkan kode-kode tersebut, kemudian jalankan dan amati apa yang terjadi.
Contoh 9.7. Penggunaan struktur percabangan if sederhana
#include <iostream> using namespace std;
int main() { int bil;
cout<<"Masukkan sebuah bilangan bulat : "; cin>>bil;
// Melakukan pengecekan bilangan dengan operator modulus if (bil % 2 == 0) {
cout<<bil<<" adalah bilangan genap" << endl;
} else {
cout<<bil<<" adalah bilangan ganjil" << endl;
} return 0; }
Pada contoh di atas kita menggunakan if untuk memeriksa apakah suatu bilangan genap atau ganjil. Operator yang kita gunakan adalah modulus (%). Perhatikan cara penulisan struktur if dan else.
Contoh 9.8. Penggunaan struktur percabangan if tiga kondisi
#include <iostream> using namespace std; int main() { int bil;
cout<<"Masukkan sebuah bilangan bulat : "; cin>>bil; if (bil > 0) {
cout<<bil<<" adalah bilangan POSITIF";
} else if (bil < 0) {
cout<<bil<<" adalah bilangan NEGATIF";
} else {
cout<<"ini bilangan NOL";
} return 0; }
Contoh 9.8. merupakan pengembangan dari Contoh 9.7. Struktur pemilihan dikembangkan menjadi tiga kondisi dengan menambahkan else. Apabila pemilihan lebih dari tiga kondisi atau banyak, C++ menyediakan perintah switch ... case untuk memudahkan proses pemilihan. Perhatikan contoh berikut.
Contoh 9.9. Penggunaan struktur percabangan dengan switch ... case
#include <iostream> using namespace std;
int main() { int bil;
cout<<"Masukkan sebuah bilangan (1 s/d 5) : "; cin>>bil; switch (bil) {
case 1 : cout<<"Bilangan anda adalah : SATU"; break;
case 2 : cout<<"Bilangan anda adalah : DUA"; break;
case 3 : cout<<"Bilangan anda adalah : TIGA"; break;
case 4 : cout<<"Bilangan anda adalah : EMPAT"; break;
case 5 : cout<<"Bilangan anda adalah : LIMA"; break;
default : cout<<"Anda memasukkan di luar batas";
} return 0; }
Contoh 9.9. adalah contoh percabangan dengan switch untuk konversi dari bilangan angka ke teks. Perhatikan bagaimana penulisan switch dan case.
Seperti juga pada Java, pengulangan dengan for digunakan jika kita mengetahui dengan pasti berapa banyak pengulangan akan dilakukan. Berikut contoh penggunaan pengulangan dengan for.
Contoh 9.10. Penggunaan struktur pengulangan dengan for
#include <iostream> using namespace std;
int main() { int C, J;
cout<<"Cetak angka dari kecil ke besar :"<<endl; for (C=0; C<10; C+3) { cout<<C+1<<endl;
} cout<<endl;
cout<<"Cetak angka dari besar ke kecil"<<endl; for (J=10; J>0; J--) { cout<<J<<endl;
} return 0; }
Contoh 9.10. merupakan contoh penggunaan for untuk kasus sederhana. Ada dua pengulangan for di atas, yaitu mencetak angka dari 1 sampai dengan 10 dan dari 10 sampai dengan 1. Perhatikan penggunaan increment ++ dan --. Cara penulisan di atas sangat mirip dengan penulisan pada Java yang telah kalian pelajari sebelumnya. Pada contoh 9.11 berikut ini, pengulangan for dikembangkan menjadi sedikit lebih rumit dengan menerapkan for bersarang.
Contoh 9.11. Penggunaan struktur pengulangan dengan for bersarang
#include <iostream> using namespace std;
int main() { for (int j=1; j<=4; j++) { for (int k=1; k<=3; k++) { cout<<k+j<<' ';
} cout<<endl;
} return 0; }
Ada dua pengulangan pada contoh 9.11. Yang pertama dengan menggunakan j sebagai variabel counter. Sedangkan yang kedua dengan variabel counter k yang bersarang di dalam pengulangan j. Menurut kalian, bagaimanakah output dari kode program di atas?
Penggunaan while pada pengulangan, tidak berbeda jauh dengan apa yang telah kalian pelajari pada Java maupun VB. Perhatikan contoh 9.12 dan 9.13 berikut ini.
Contoh 9.12. Penggunaan struktur pengulangan dengan while sederhana
#include <iostream> using namespace std;
int main() {
int C;
C = 1; // inisialisasi nilai C
while (C<10) {
cout<<"Saya tidak nakal lagi"<<endl; C++; // increment
} return 0; }
Contoh 9.13. Penggunaan struktur pengulangan dengan while bersarang
#include <iostream> using namespace std;
int main() {
int x, y;
x = 1; //inisialisasi variabel x
while (x<=4){
y = 1; //inisialisasi variabel y while (y<=3){ cout<<y+x<<' '; y++; } cout<<endl; x++;
} return 0;
}
Perhatikan contoh 9.12 di atas, bagaimanakah menurut kalian output dari kode program tersebut. Coba bandingkan dengan contoh 9.11. Cobalah memindahkan inisialisasi untuk variabel y. Letakkan setelah inisialisasi variabel x. Bagaimanakah hasilnya?
Bentuk berikutnya dari pengulangan pada C++ adalah dengan menggunakan do-while. Agak sedikit berbeda dengan while, kondisi pemeriksaan pada do-while diletakkan di akhir badan loop. Contoh 9.14 memberikan gambaran bagaimana do-while digunakan dalam C++.
Contoh 9.14. Penggunaan struktur pengulangan dengan do-while
#include <iostream> using namespace std;
int main() { int J = 5; int K; do { K = 1; do {
cout<<K*J<<' ';
K++; } while (K <= J); cout<<endl; J--;
} while (J >= 1);
return 0; }
Contoh 9.14 terlihat menampilkan kode program yang cukup rumit. Namun bila kita cermati, ini adalah kode program dengan pengulangan do while yang bersarang. Perhatikan cara penulisan dan alur logika programnya. Dowhile yang luar menggunakan variabel counter J dan ini adalah pengulangan dari besar ke kecil (perhatikan J diinisialisasi dengan nilai 10 dan syarat kondisi pada while J >=1). Sedangkan do-while yang dalam variabel counter nya adalah K dengan pengulangan dari kecil ke besar. Bagaimanakah hasil dari eksekusi kode program di atas? Perhatikan output di bawah ini. Cobalah untuk menelusuri kode program sehingga kalian benar-benar mengerti mengapa output program bisa menjadi seperti ini.
5 10 15 20 25
4 8 12 16
3 6 9
2 4
1
9. Input/Output
Sampai dengan bagian ini, kalian telah cukup banyak latihan kode pemrograman C++. Namun kita belum sekalipun mempelajari statement input / output pada C++. Sebenarnya kalau kalian jeli, kalian telah secara tidak langsung mempelajari pernyataan input dan output. Perintah cout dan cin yang telah kalian gunakan adalah pernyataan input / output yang paling sering digunakan.
Baik perintah cout dan cin digolongkan sebagai stream yang termasuk dalam kelas iostream. Karena itulah setiap kali kita ingin menggunakan dua perintah tersebut kita harus memanggil file header iostream di awal program.
Stream adalah peralatan logika yang berguna untuk mendapatkan atau memberikan informasi. Stream berhubungan dengan perangkat keras seperti keyboard, layar monitor, printer melalui sistem I/O.
Perintah cin merupakan stream untuk input standar. Perintah ini akan merekam apa yang kita ketikkan dari keyboard. Perhatikan cara penulisannya pada contoh 9.15.
Contoh 9.15. Penggunaan cin dan cout
#include <iostream> using namespace std;
int main() { int bil1, bil2;
//cin bagian satu
cout<<"Masukkan bilangan pertama : "; cin>>bil1;
cout<<"Masukkan bilangan kedua : "; cin>>bil2;
cout<<"Hasil kali kedua bilangan = "<<bil1*bil2<<endl;
//cin bagian dua
cout<<"Masukkan dua buah bilangan : "; cin>>bil1>>bil2;
cout<<"Hasil kali kedua bilangan = "<<bil1*bil2<<endl;
return 0; }
Perintah cin dapat digunakan untuk memasukkan data satu per satu seperti pada contoh 9.15 (lihat bagian di bawah //cin bagian satu) atau memasukkan data secara langsung berurutan (lihat bagian di bawah //cin bagian dua). Perintah cin harus diikuti operator >>.
Perintah cout adalah perintah melakukan output standar yaitu pada layar monitor. Perintah cout harus diikuti operator <<. Perhatikan contoh 9.15 di atas. cout dapat digunakan untuk mencetak langsung karakter (ditandai dengan " dan diakhiri dengan ") atau isi variabel. Seperti halnya cin, cout dapat digunakan untuk output satu persatu atau berurutan sekaligus. Pada contoh di atas pernyataan endl adalah pernyataan untuk mencetak baris baru.