Dasar Pemrograman C++
Pada bab ini, anda akan belajar tentang:
- Bagaimana menciptakan program C++
- Format umum suatu program C++
- Direktif #include
- Bagaimana memanfaatkan objek cout untuk menampilkan keluaran
- Bagaimana menempatkan komentar dalam suatu program C++
- Bagaimana dan kapan menggunakan endl
- Bagaimana mendeklarasikan dan menggunakan variabel
- Bagaimana memanfaatkan objek cin untuk menerima masukan
- Bagaimana mendefinisikan dan menggunakan suatu fungsi sederhana
Ketika anda membangun rumah sederhana, anda membutuhkan fondasi dan tulangan baja yang kokoh. Jika rumah tersebut tidak memiliki struktur yang kokoh, maka dipastikan anda akan memiliki masalah dengan keretakan, goncangan, kelembaban, dan lain-lain. Demikian pula dengan ketika anda mempelajari suatu bahasa pemrogramaman, anda diwajibkan untuk memulainya dengan struktur yang sederhana terlebih dahulu kemudian bergerak maju untuk mempelajari hal yang lebih detil. Bab ini dimaksudkan untuk memberikan struktur essensial suatu program C++ kepada anda.
Permulaan C++
Kita mulai dengan program sederhana untuk menampilkan suatu pesan. Kode 1.1.cpp menggunakan cout (diucapkan dengan “see-out”) untuk menampilkan karakter keluaran. Kode sumber tersebut memuat beberapa komentar kepada pembaca; dimulai dengan dua garis miring //, dimana kompiler akan mengabaikannya. C++ bersifat case sensitive sehingga karakter-karakter huruf besar akan dibedakan dengan huruf kecil. Sebagai contoh, jika anda mengganti cout dengan Cout atau COUT, maka kompiler akan menolak perintah ini dengan menampilkan pesan kompilasi bahwa anda menggunakan identifier atau pengenal yang tak dikenal. Ekstensi .cpp merupakan indikator bahwa program ditulis dengan program C++.
// kode1.1.cpp--menampilkan pesan
#include <iostream> // direktif PREPROSESSOR
int main() // header fungsi
{ // permulaan badan fungsi
using namespace std;
cout << "Ini pengalaman C++ ku yang pertama."; // pesan yang akan ditampilkan
cout << endl; // memulai baris baru
cout << "Aku akan semangat belajar!" << endl; // pesan lain yang dikeluarkan
return 0; // memberhentikan fungsi main()
}
Catatan Kompatibilitas
Jika anda menggunakan kompiler yang lebih tua, anda mungkin perlu menggunakan #include<iostream.h> sebagai pengganti #include<iostream>. Fungsi cin.get() digunakan untuk menampilkan keluaran program dalam suatu jendela yang tetap aktif terbuka sampai anda menekan tombol ENTER.
Screenshot tampilan program kode1.1.cpp
Elemen-elemen program
Berikut adalah elemen-elemen yang termuat dalam kode sumber kode1.1.cpp:
- Komentar yang diawali dengan prefix //
- Direktif preprosessor #include
- Direktif using namespace
- Header fungsi int main()
- Badan fungsi yang diawali dengan { dan diakhiri dengan }
- Perintah cout untuk menampilkan pesan
- Perintah return untuk memberhentikan fungsi main()
Fungsi main()
Kode1.1.cpp mengandung struktur fundamental berikut ini:
int main()
{
Statemen-statemen;
return 0;
}
Baris-baris kode di atas menyatakan fungsi main(), dan menjelaskan watak dan isi dari fungsi tersebut. Keseluruhan baris-baris kode tersebut membentuk definisi fungsi. Definisi ini memuat dua bagian: bagian pertama, int main(), adalah header fungsi, bagian kedua, yang diawali { dan ditutup dengan }, adalah badan fungsi. Pada Gambar 1.1 ditunjukkan illustrasi fungsi main() tersebut.
Statemen adalah ekspressi C++ yang diakhiri dengan titik koma (;). Statemen akhir pada fungsi main() adalah statemen return untuk mengakhiri fungsi main().
Header fungsi sebagai antarmuka
Saat ini hal penting yang telah dikemukakan sebelumnya yang perlu diingat adalah sintaks C++ mensyaratkan bahwa fungsi main() membutuhkan header fungsi: int main(). Pada umumnya, ketika suatu fungsi C++ diaktivasi, atau dipanggil oleh fungsi lain, header fungsi bertugas sebagai antarmuka antara fungsi tersebut dengan fungsi yang memanggilnya. Bagian sebelum nama fungsi disebut juga dengan tipe nilai balik fungsi; yang menjelaskan aliran informasi dari fungsi tersebut ke fungsi yang memanggilnya.
Bagian yang terdapat di dalam kurung setelah nama fungsi disebut pula dengan daftar argument atau daftar parameter.
Lebih jelasnya, dapat diperhatikan perbedaan beberapa header fungsi berikut ini:
int main()
menyatakan bahwa fungsi main() menghasilkan nilai balik integer (bilangan bulat) dan memberikannya kepada fungsi yang memanggilnya. Dapat diperhatikan pula bahwa fungsi main() juga tidak mengambil informasi apapun dari fungsi yang memanggilnya.
int main(void)
Varian header fungsi ini menggunakan tipe void. Hal ini berarti fungsi ini tidak mengambil argument apapun. Dalam C++ (bukan C), membiarkan argument kosong sama saja dengan mengisinya dengan tipe void.
void main()
Beberapa programmer lebih suka menggunakan varian header fungsi ini tanpa memakai nilai balik. Hal ini berarti fungsi main() tidak menghasilkan suatu nilai apapun. Namun rekomendasi penulis adalah meskipun varian header fungsi seperti ini dapat berjalan normal pada beberapa hardware atau sistem, namun varian ini bukanlah standard C++ karena pada beberapa sistem yang lain akan mengalami kegagalan.
Kenapa semua program C++ harus diawali dengan fungsi main()?
Yang paling ekstrim yang harus diingat adalah semua program c++ harus diawali dengan fungsi main(), bukan Main(), MAIN(), atapun maen(). Ingat bahwa C++ adalah bersifat case sensitive. Jika anda mengkompilasi suatu program C++, maka eksuksi selalu dimulai dari fungsi main(). Jika dalam program anda tidak memiliki fungsi main(), maka program anda belum sempurna dan oleh kompiler anda akan diminta untuk mendefinisikan fungsi main() yang dimaksud.
Namun terdapat pengecualian seperti pada kasus pemrograman Windows dimana anda dapat menulis suatu modul DLL (dynamic link library). Karena modul DLL merupakan program yang tidak berdiri sendiri atau standalone, maka dia tidak membutuhkan fungsi main().
Komentar-komentar C++
Ruang setelah tanda garis miring dua buah (//) merupakan ruang untuk menempatkan komentar C++. Komentar adalah catatan untuk pembaca program yang ingin mengidentifikasi seksi suatu program atau menjelaskan beberapa aspek dalam kode. Kompiler C++ mengabaikan komentar-komentar ini dan berarti bahwa dia tidak mampu memahami makna dari komentar-komentar yang diberikan.
Anda sebaiknya memanfaatkan komentar bukan hanya untuk pembaca lain yang ingin memahami program anda, namun untuk mengingatkan anda kembali setelah anda tidak membaca program anda untuk beberapa waktu.
Preprosessor C++ dan file iostream
Berikut ini adalah salah satu varian preprosessor C++:
#include <ioatream>
Direktif #include menyebabkan preprosessor C++ untuk menambahkan isi file iostream ke dalam program anda. Program anda membutuhkan sebaris kode ini agar fasilitas cin dan cout dapat digunakan.
Nama file header
Nama iostream adalah salah satu nama file header. Tradisi bahasa C mensyaratkan bahwa setiap nama file header harus diakhiri dengan ekstensi h. Namun pada perkembangannya, C++ tidak lagi menganjurkan penggunaan ekstensi tersebut. C++ menggunakan banyak sekali nama file header. Dua file header lain yang popular adalah math dan conio.
Gambar 1.2 Illustrasi penampilan string menggunakan cout
Menampilkan keluaran C++ dengan cout
Kode1.1.cpp menggunakan statemen berikut ini:
cout << "Ini pengalaman C++ ku yang pertama.";
Bagian yang dibatasi oleh dua tanda kutip merupakan string yang akan ditampilkan. Notasi << mengindikasikan bahwa statemen tersebut mengirim string kepada cout. Illustrasi cout diberikan pada Gambar 1.2.
Token dan spasi kosong
Elemen terkecil yang tak terpisahkan dalam suatu baris kode disebut juga dengan token. Pada umumnya anda harus memisahkan antara token yang satu dengan lainnya dengan spasi kosong. Beberapa karakter tunggal seperti titik koma, koma, dan kurung merupakan token yang tidak perlu dipisahkan dengan spasi kosong. Berikut ini adalah beberapa contoh dimana spasi kosong dapat digunakan dan kapan harus diabaikan.
return0; // SALAH, seharusnya return 0;
return(0); // BENAR, spasi kosong dapat diabaikan
return (0); // BENAR, spasi kosong dapat digunakan
intmain() // SALAH, spasi kosong diabaikan
int main(); // BENAR, spasi kosong diabaikan dalam ()
int main ( ); // BENAR, spasi kosong dalam ()
Gambar 1.3 Illustrasi token dan spasi kosong
Statemen C++
Program C++ merupakan kumpulan fungsi-fungsi, sedangkan fungsi merupakan sekumpulan statemen-statemen. C++ memiliki beberapa jenis statemen. Kode1.2.cpp menyediakan dua jenis statemen. Pertama, statemen deklarasi untuk menciptakan variabel, kedua, statemen assignment atau penugasan untuk menyediakan nilai kepada variabel yang telah diciptakan.
// kode1.2.cpp -- program menghitung pisang_goreng
// menggunakan dan menampilkan variabel
#include <iotstream>
using namespace std;
int main()
{
int pisang_goreng; // deklarasi variabel integer
pisang_goreng = 25; // memberikan suatu nilai kepada variabel
cout << "Saya memiliki ";
cout << pisang_goreng; // menampilkan nilai variabel
cout << " pisang goreng.";
cout << endl;
pisang_goreng = pisang_goreng - 1; // modifikasi variabel
cout << "Nyam, nyam. Sekarang saya memiliki " << pisang_goreng << " pisang_goreng." << endl;
return 0;
}
Screenshot keluaran kode1.2.cpp
Statemen deklarasi dan variabel
Semua proses dalam komputer tertata dengan sempurna. Untuk menyimpan setiap helai informasi dalam komputer, anda tak perlu repot-repot mengidentifikasi lokasi penyimpanan dan jumlah ruang penyimpanan memori yang dibutuhkan. Dalam C++, untuk mengidentifikasi jenis penyimpanan dan menyediakan label untuk lokasi penyimpanan cukup dilakukan dengan statemen deklarasi. Seperti pada kode1.2.cpp yang memiliki statemen deklarasi berikut ini:
int pisang_goreng;
Statemen ini mendeklarasikan bahwa program menggunakan penyimpanan yang cukup untuk menampung suatu variabel bertipe integer. Tipe data int dapat bernilai positif maupun negatif dan memiliki rentang nilai sesuai dengan implementasi program. Rentang nilai tipe int berada di antara -32.767 sampai 32.767. C++ memiliki berbagai tipe data dasar seperti int, short, char, long, double, dan float. Jenis-jenis tipe data ini akan dibahas pada bagian berikutnya.
Disamping memberikan tipe data, statemen deklarasi juga memberikan nama variabel. Dalam kode1.2.cpp nama variabel tersebut adalah pisang_goreng. Kompiler menggunakan nama pisang_goreng untuk mengidentifikasi nilai yang disimpan pada lokasi memori dimana variabel pisang_goreng berada. pisang_goreng disebut sebagai suatu variabel karena anda dapat mengubah-ubah nilainya. Jika anda mengabaikan statemen deklarasi variabel pisang_goreng pada kode1.2.cpp, maka kompiler C++ akan merespon dengan melaporkan suatu kesalahan atau error kompilasi. Illustrasi statemen deklarasi variabel dapat dilihat pada Gambar 1.4.
Statemen assignment atau penugasan
Statemen penugasan diperuntukkan untuk menugaskan suatu nilai ke suatu lokasi penyimpanan. Sebagai contoh statemen,
pisang_goreng = 25;
Gambar 1.4 Illustrasi statemen deklarasi variabel
menugaskan nilai integer 25 ke lokasi penyimpanan yang diwakili oleh variabel pisang_goreng. Simbol sama dengan (=) disebut sebagai operator penugasan. Salah satu fitur istimewa yang dimiliki oleh C++ (dan C) adalah anda dapat menggunakan operator penugasan secara serial seperti kode berikut ini:
int pisang_goreng;
int singkong;
int nasi_kucing;
int ikan_mas;
pisang_goreng = singkong = nasi_kucing = ikan_mas = 75;
Aliran nilai penugasan berlaku dari kanan ke kiri. Pertama, nilai 75 ditugaskan ke variabel ikan_mas, kemudian nilai ikan_mas, yang saat ini bernilai 75, diberikan ke variabel nasi_kucing, dan seterusnya. Statemen penugasan kedua yang terdapat pada kode1.2.cpp adalah
pisang_goreng = pisang_goreng - 1;
Ekspressi pada bagian sebelah kanan operator penugasan adalah contoh aritmatika. Komputer akan melakukan pengurangan nilai variabel pisang_goreng, 25-1, menjadi 24 yang disimpan kembali ke variabel pisang_goreng.
Contoh lain statemen-statemen C++
//kode1.3.cpp
#include <iostream>
int main()
{
using namespace std;
int pisang_goreng;
cout << "Ada berapa pisang goreng anda punya?" << endl;
cin >> pisang_goreng; // masukan C++
cout << "Ini ada dua lagi. ";
pisang_goreng = pisang_goreng + 2;
// baris berikutnya menggabungkan keluaran
cout << "Sekarang anda punya " << pisang_goreng << " pisang goreng." << endl;
return 0;
}
Program di atas memiliki dua fitur: penggunaan cin untuk membaca masukan dari papan ketik (keyboard) dan penggabungan empat statemen keluaran menjadi satu. Selanjutnya akan dijelaskan lebih detil.
Screenshot keluaran program kode1.3.cpp
Penggunaan cin
Kode1.3.cpp mendemonstrasikan nilai yang diketikkan pada papan ketik (13) ditugaskan kepada variabel pisang_goreng. Statemen berikut ini melakukan penugasan tersebut.
cin >> pisang_goreng;
Melihat statemen ini, dapat disimpulkan bahwa aliran informasi mengalir dari cin ke variabel pisang_goreng. File header iostream mendefinisikan cin sebagai objek yang merepresentasikan aliran informasi ini. Jika cout menggunakan operator << yang dipakai untuk menyisipkan karakter-karakter dalam aliran informasi untuk ditampilkan, cin menggunakan operator >> untuk mengekstrak karakter-karakter dari aliran informasi tersebut. Dalam kasus ini, program mendeklarasikan variabel pisang_goreng bertipe integer, jadi cin mengekstrak karakter-karakter yang diketikkan dan mengubahnya menjadi bilangan bulat yang disimpan pada lokasi penyimpanan.
Penggabungan dengan cout
Fitur kedua yang dimiliki kode1.3.cpp adalah penggabungan statemen keluaran dengan cout. File header iostream mendefinisikan operator << sehingga anda dapat mengkombinasikan keluaran sebagai berikut.
cout << "Sekarang anda punya " << pisang_goreng << " pisang goreng." << endl;
Hal ini memungkinkan anda untuk menggabungkan keluaran string dengan keluaran integer dalam satu statemen. Jika diurai, statemen di atas dapat dibagi menjadi
cout << "Sekarang anda punya ";
cout << pisang_goreng ;
cout << " pisang goreng.";
cout << endl;
Jika masih ingin memanipulasi statemen penggabungan ini, berikut ini masih bisa dilakukan yang akan menghasilkan keluaran yang sama.
cout << "Sekarang anda punya "
<< pisang_goreng
<< " pisang goreng."
<< endl;
Fungsi
Karena fungsi-fungsi merupakan modul-modul yang membentuk program C++ dan sangat penting dalam pemrograman berorientasi objek, maka anda harus familiar dengan mereka. Fungsi-fungsi C++ dibagi menjadi dua jenis: pertama, mereka yang menghasilkan nilai balik, dan yang lainnya adalah mereka yang tidak memerlukan nilai balik. Anda dapat melihat contoh tiap jenis fungsi pada pustaka standard C++ dan anda juga bisa menciptakan kedua jenis fungsi tersebut secara mandiri.
x = sqrt(6.25); // menghasilkan nilai 2.5 yang ditugaskan kepada variabel x
Ekspressi sqrt(6.25) memanggil fungsi sqrt(). Ekspressi sqrt(6.25) disebut sebagai pemanggilan fungsi, sqrt() disebut sebagai fungsi yang dipanggil, dan fungsi yang didalamnya memuat pemanggilan fungsi disebut fungsi pemanggil. Hal ini dilukiskan pada Gambar 1.5.
Gambar 1.5 Proses pemanggilan suatu fungsi
Nilai yang ada di dalam kurung (dalam hal ini 6,25) adalah informasi yang dikirim atau dilewatkan ke fungsi. Suatu nilai yang dilewatkan ke suatu fungsi disebut juga dengan parameter atau argument (lihat Gambar 1.6).
Fungsi sqrt() menemukan jawaban sebesar 2,5 dan mengirim kembali nilai yang didapat kepada fungsi pemanggil. Suatu nilai yang dikirim kembali ke fungsi pemanggil disebut sebagai return value atau nilai balik. Hemat kata bisa dikatakan bahwa argument adalah informasi yang dikirim ke suatu fungsi dan nilai balik adalah nilai yang dikirim kembali ke fungsi pemanggil. Untuk lebih jelasnya, dapat diperhatikan pada Gambar 1.6.
Prototipe fungsi dimaksudkan untuk mendeklarasikan fungsi, sama seperti pendeklarasian variabel. Hal ini menceritakan jenis fungsi yang ada. Sebagai contoh, pustaka C++ mendefinisikan fungsi sqrt() untuk mengambil argument sebuah bilangan pecahan dan menghasilkan nilai balik dengan tipe data pecahan (double). Prototipe fungsi sqrt() dituliskan sebagai berikut.
Gambar 1.6 Sintaks panggil fungsi
double sqrt(double); // prototipe fungsi
Kata double sebelum nama fungsi sqrt menyatakan bahwa fungsi sqrt() akan menghasilkan nilai balik bertipe double atau bilangan pecahan. Kata double yang ada di dalam kurung sqrt() menyatakan bahwa fungsi tersebut memerlukan argument bertipe double pula. Jadi prototipe ini mendeskripsikan sqrt() sesuai dengan kode berikut ini.
double x; // deklarasi x sebagai variabel bertipe double
x = sqrt(6.25);
Berikut adalah salah satu implementasi fungsi sqrt() untuk menghitung akar kuadrat atas suatu nilai.
//kode1.4.cpp
#include <iostream>
#include <math>
int main()
{
using namespace std;
double luas;
cout << "Masukkan luas suatu tempat, dalam meter persegi: ";
cin >> luas;
double sisi;
sisi = sqrt(luas);
cout << "Ini ekivalen dengan bujursangkar dengan panjang sisi " << sisi << " meter." << endl;
cout << "Tidak sulit kan!" << endl;
return 0;
}
Variasi-variasi fungsi
Sebagian fungsi memerlukan lebih dari satu argument. Argument-argument ini dipisahkan dengan koma. Sebagai contoh, fungsi matematika pow() memerlukan dua argument dan memberikan nilai balik sebesar argument pertama yang dipangkatkan dengan argument kedua. Fungsi tersebut memiliki prototipe sebagai berikut:
double pow(double, double); // prototipe suatu fungsi dengan dua argument
Screenshot keluaran program kode1.4.cpp
Jika anda ingin menghitung 4^6, maka anda bisa menggunakan fungsi ini sebagai berikut:
jawaban = pow(4.0, 6.0); // panggil fungsi dengan dua argument
Sementara itu, ada pula fungsi yang tidak memerlukan satu argument pun. Salah satu fungsi dari pustaka C adalah rand() yang tidak memerlukan argument dan yang menghasilkan keluaran bilangan acak bertipe integer. Prototipe fungsi tersebut adalah sebagai berikut:
int rand(void); // prototipe suatu fungsi tanpa argument
Katakunci void menyatakan bahwa fungsi rand() tidak memerlukan argument. Jika anda mengabaikan void dan membiarkannya kosong, maka kompiler C++ menginterpretasikannya sebagai fungsi tanpa argument. Anda bisa menggunakan fungsi ini seperti di bawah ini.
tebakan = rand(void); // panggil fungsi tanpa argument
Ada juga fungsi yang tidak menghasilkan nilai balik. Misalnya fungsi yang bertugas hanya untuk menampilkan suatu nilai pada layar monitor. Jenis fungsi seperti ini memiliki prototipe dengan kata kunci void.
void = tampil(double); // prototipe fungsi tanpa menghasilkan nilai balik
Fungsi-fungsi yang didefinisikan sendiri oleh user
Pustaka C memiliki lebih dari 140 fungsi. Jika sesuai dengan kebutuhan anda, anda bisa memakainya. Namun dalam banyak kasus, anda harus membuat fungsi sendiri untuk menyelesaikan masalah komputasi anda. Berikut ini salah contoh fungsi buatan sendiri (tidak ada dalam pustaka C/C++).
//kode1.5.cpp
#include<iostream>
void irwan(int); // prototipe fungsi irwan()
int main()
{
using namespace std;
irwan(3); // panggil fungsi irwan()
cout << "Pilih satu integer: ";
int ulang;
cin >> ulang;
irwan(ulang); // panggil irwan() kembali
cout << "Selesai!" << endl;
return 0;
}
void irwan(int n) // definisi fungsi irwan()
{
cout << "Irwan mengatakan sit-up " << n << " kali." << endl;
} // fungsi void tidak memerlukan nilai balik
Fungsi main() memanggil fungsi irwan() dua kali, yang pertama dengan argument 3 dan yang kedua dengan argument variabel ulang. Program tersebut juga memasukkan variabel ulang dari pengguna.
Screenshot keluaran program kode1.5.cpp
Format fungsi
Definisi fungsi irwan() pada kode1.5.cpp mengikuti format yang sama dengan fungsi main(). Pertama, terdapat header fungsi. Kemudian, yang diapit oleh {}, terdapat tubuh fungsi. Anda dapat mengeneralisasi format suatu fungsi sebagai berikut:
tipe nama_fungsi(daftar_argument)
{
statemen-statemen;
}
Adapun definisi-definisi fungsi berurutan dalam satu file diillustrasikan pada Gambar 1.7.
Header fungsi
Fungsi
irwan() pada kode 1.5.cpp memiliki header:
void irwan(int);
Kata void berarti fungsi irwan() tidak menghasilkan nilai balik. Jadi pemanggilan fungsi irwan() tidak menghasilkan suatu nilai yang bisa ditugaskan ke suatu variabel di dalam fungsi main(). Pemanggilan fungsi yang pertama adalah:
irwan(3); // valid untuk fungsi bertipe void
Karena fungsi irwan() tidak menghasilkan nilai balik, maka anda tidak bisa melakukan hal berikut ini:
dompu = irwan(3); // tidak valid untuk fungsi bertipe void
Gambar 1.7 Definisi-definisi fungsi-fungsi berurutan di dalam suatu file
Kesimpulan
Program C++ memiliki satu atau lebih modul yang disebut dengan fungsi. Program memulai eksekusi diawali dengan fungsi bernama main() (semua huruf kecil), jadi pastikan anda memiliki nama fungsi ini di dalam program anda. Suatu fungsi terdiri-dari header dan tubuh. Header fungsi menceritakan tentang tipe data dari nilai balik yang dihasilkan. Tubuh suatu fungsi terdiri-dari statemen-statemen C++ yang diapit oleh kurung kurawal {}. Ada beberapa jenis statemen di dalam C++ yaitu:
- Statemen deklarasi: statemen deklarasi yang menjelaskan nama dan tipe variabel yang digunakan dalam suatu fungsi.
- Statemen penugasan: statemen penugasan menggunakan operator sama dengan (=) untuk menugaskan suatu nilai ke suatu variabel.
- Panggil fungsi: Pemanggilan fungsi yang mengaktivasi suatu fungsi. Ketika fungsi yang dipanggil berhenti, maka program kembali ke statemen berikutnya di dalam fungsi pemanggil.
- Prototipe fungsi: Suatu prototipe fungsi mendeklarasikan tipe suatu fungsi, berikut dengan jumlah dan tipe argument yang dimiliki fungsi tersebut.
- Statemen balik: Suatu statemen balik mengirim kembali nilai yang dihasilkan oleh fungsi yang dipanggil kepada fungsi yang memanggil.