Belajar C++ dari Awal
By Muhammad Fathoni
Kamis, 31 Januari 2013
0 comments
Tulisan ini mungkin
sebaiknya menjadi tulisan awal pada BLOG ini. Namun secara tidak
sengaja tulisan ini terlupakan karena saya pikir tanpa membaca tulisan
ini pun, banyak diantara kita sudah punya alasan sendiri-sendiri untuk
memulai belajar C++, salah satunya adalah karena pemrograman C++
umumnya harus dipelajari oleh teman-teman yang mengambil jurusan
seperti Sistem informasi, Teknologi Informasi dan Komputerisasi
Akuntansi. Bahasa ini menjadi bahasa pengantar untuk pengenalan dunia
pemrograman. Dulu sewaktu memulai belajar pemrograman, alasan utama
saya juga karena kami diharuskan menggunakan bahasa pemrograman C/C++
untuk mengimplementasikan teori Algoritma dan Struktur Data (ASD).
Bahasa Pemrograman Mana Yang Harus Saya Pelajari ?
Sekarang saya belajar C++ dan saya
juga akan mulai belajar bahasa pemrograman yang lain seperti Java,
Delphi, Visual Basic dan mulai berpikir bahasa pemrograman mana yang
sebaiknya saya kuasai agar mempermudah saya dalam mencari pekerjaan
setelah lulus nanti. Pada saat ini pemrograman Java sedang menjadi
Idola. Bagi yang menguasai pemrograman satu ini bisa dipastikan akan
mudah mendapatkan pekerjaan. Dalam dunia pemrograman kita dituntut untuk
bisa belajar pemrograman sesuai dengan tuntutan proyek. “Jika
konsumen menginginkan Java maka kita harus pakai java, jika konsumen
menginginkan Visual Basic maka kita juga harus menggunakan Visual Basic
walaupun sebelumnya kami tidak mempunyai pengalaman dengan Visual
Basic“, ungkapan seorang progremer.
Saya menyimpulkan bahwa sebaiknya kita benar menguasai betul
konsep pemrograman dan logikanya, karena dengan demikian kita akan bisa
belajar dengan cepat bahasa pemrograman yang lain.
Apakah bahasa C/C++ bisa dibutuhkan juga dalam dunia kerja ?
Jawabannya adalah Ya. Teman-teman bisa browsing dan cari informasi
tentang lowongan kerja sebagai programmer C++, tentu teman-teman akan
menemukan. Di Jerman misalnya, perusahaan yang bergerak dibidang
embedded system umumnya mencari programmer C++ dan gaji yang ditawarkan
juga tidak tanggung-tanggung. Menurut saya hal ini sangat beralasan,
karena untuk membuat program pada embedded system, dibutuhkan
orang-orang yang betul-betul menguasai bagaimana memanajemen program
sehingga bisa berjalan dengan cepat dan juga bisa menggunakan memori
yang tersedia dengan baik. Jika hal ini tidak diperhatikan, error yang
akan muncul adalah runtime error yang sulit dimengerti jika dibandingkan dengan compiletime error.
Apakah program C/C++ digunakan juga untuk membuat aplikasi canggih yang ada saat ini?
Jawabannya lagi-lagi IYA. Saya yakin teman-teman tahu tentang aplikasi google earth, skype. Aplikasi ini dibuat menggunakan QT yang menggunakan C++ sebagai modul intinya.
Belajarlah dengan giat dan jangan mudah putus asa, perbanyak latihan dan baca buku
Mari Berlatih Bahasa C++
Tulisan tentang “Mari Belatih Bahasa C++” adalah seri belajar bahasa pemrograman C++ dari awal yang ditujukkan untuk teman-teman yang baru belajar pemrograman. Harapannya adalah denganmengikuti seri ini, teman-teman akan belajar menggunakan pengetahuan yang sudah dipelajari di bangku kuliah atau pelajari lewat materi yang disediakan di website ini, untuk menyelesaikan persoalan mulai dari yang tingkat dasar sampai dengan tingkat lanjut. Dengan berlatih, mudah-mudahan kemampuan pemrograman teman-teman akan bisa semakin baik.
Download Artikel dan Contoh Source Code
Pengenalan Bahasa C++ (Bagian 1)
Pada tulisan ini, kita akan belajar tentang :
* Bagaimana instalasi IDE Dev-C++
* Menulis dan memahami program “Halo Dunia”
* Memahami struktur program, Namespace, cout, cin, parameter pada fungsi main
Download Artikel
Pengenalan Bahasa C++ (Bagian 2)
Pada bagian ini kita akan belajar lebih dalam lagi tentang struktur dasar dari program C/C++. Topik pembahasan meliputi:
* Penjelasan maksud dari setiap bagian pada struktur dasar
* Pesan kesalahan apa yang terjadi jika kita tidak mengikuti struktur dasar ini.
* Contoh program yang mengikuti struktur dasar ini, membuat sendiri fungsi faktorial dan tambah (Download Source Code)
Download Artikel
Pengenalan Bahasa C++ (Bagian 3)
Pada bagian ini khusus membahas tentang konsep variabel. Pembahasan meliputi:
* Apa itu variabel
* Tipe data dari variabel
* Aturan pemberian nama variabel
* Bagaimana mendeklarasikan variabel
* Memahami variabel sebagai pointer
* Bagaimana mendeklarasikan dan menggunakan variabel sebagai pointer
* Program untuk menampilkan nilai bilangan genap
* Program menggunakan pointer
Download Source Code
Download Artikel
Pengenalan Bahasa C++ (Bagian 4)
Pada pembahasan ini kita akan belajar tentang Array. Pembahasan meliputi:
* Konsep Array
* Mendeklarasikan Array berdimensi 1, 2, dan N-dimensi
* Memberikan nilai ke Array
* Menampilkan isi Array
* Contoh program Input Output menggunakan Array. Pada program ini user bisa menentukan jumlah data yang bisa disimpan ke dalam Array, menentukan isi dari Array dan program akan
menampilkan semua isi Array tersebut ke layar
Download Artikel
Pengenalan Bahasa C++ (Bagian 5)
Di dalam bahasa C++ terdapat 3 (tiga) metode yang bisa digunakan untuk membuat perulangan yaitu, for, while atau dengan do … while. Ketiga perulangan ini membutuhkan pengontrol jalannya
perulangan yang disebut kondisi. Selama kondisi benar, perulangan akan terus dikerjakan.
Tulisan ini membahas dengan detail aspek penting yang perlu diperhatikan dalam membuat perulangan. Berikut ini adalah garis besar topik yang dibahas:
* Konsep kondisi
* Mengenal operator logika
* perulangan dengan for
* perulangan dengan while
* perulangan dengan do … while
* perbedaan antara perulangan dengan while dan do … while
Download Artikel
Pengenalan Bahasa C++ (Bagian 6)
Di dalam kehidupan ini seringkali kita diperhadapkan dengan pengambilan keputusan. Dan setiap keputusan selalu dihadapkan dengan konsekuensi. Jika saya memutuskan untuk melakukan ‘A’ maka
konsekuensinya adalah nasib saya akan menjadi ‘B’ namun jika saya melakukan C maka nasib saya akan menjadi ‘B+’ .
Di dalam struktur pemrograman bahasa C/C++, ilustrasi di atas dapat dituliskan sebagai berikut:
jika (saya melakukan A) maka
{
…..nasib_saya = B
} namun
jika (saya melakukan C) maka
{
…..nasib_saya = B+
}
Konsep inilah yang dikenal dengan istilah percabangan.
Pembahasan di dalam tulisan ini meliputi:
1. Percangan dengan if tanpa else
2. Percabangan dengan if dengan else
3. Percabangan dengan switch
4. Konsep Scope. Konsep ini sangat penting untuk memahami konsep lokalitas dari sebuah variabel.
5. Contoh Program, dimana penjelasan diawali dengan menjelaskan permasalahan yang hendak dipecahkan, algoritma yang digunakan dan diakhiri dengan penyelesaian.
Download Artikel
Pengenalan Bahasa C++ (Bagian 7)
Pada tulisan ini akan dibahas khusus tentang fungsi dan merupakan pelengkap penjelasan dari tulisan Pengenalan Bahasa C++ (bagian 2). Penjelasan disertai dengan ilustrasi berupa gambar dengan
penekanan pada bagian-bagian penting yang perlu diperhatikan saat mengimplementasikan prototipe sebuah fungsi.
Download Materi
Pengenalan Bahasa C++ (Bagian 8)
Operasi file adalah operasi yang berhubungan dengan file. Pada tulisan ini akan diberikan penjelasan tentang bagaimana membaca file (per baris dan per kata), membuat file baru, dan membuat duplikasi
dari sebuah file.
Download Artikel & Source Code
Pengenalan Bahasa C++ (Bagian 9)
Pengantar
Salah satu keunggulan C++ dibandingkan C adalah dukungan yang baik akan Object Oriented Programming (OOP). Saat bekerja dengan OOP, kita pasti akan berhadapan dengan yang dinamakan class
karena merupakan template / cetakan dari sebuah objek. Di Ambon, makanan khas kami adalah Sagu. Untuk membuat sagu kami biasanya menggunakan porna. Sagu yang masih mentah, disebut Sagu
manta, akan dimasukkan ke dalam porna ini untuk kemudian dibakar. Dari sebuah porna kita bisa memperoleh beberapa buah sagu. Setelah sagu menjadi masak dan disiap dimakan, porna yang sudah
dipakai bisa dipakai lagi untuk membuat sagu yang lain. Untuk itu porna bisa juga kita pahami sebagai template / cetakan untuk membuat objek yang disebut Sagu bakar.
Bentuk Umum Sebuah Class
class nama_kelas
{
};
Berikut ini adalah beberapa catatan penting yang perlu diperhatikan dari bentuk umum ini:
* kata kunci class, menunjukkan bahwa kita hendak membuat sebuah kelas dan harus ditulis menggunakan huruf kecil.
* nama_kelas adalah nama dari kelas yang hendak kita buat. Sebaiknya nama ini bisa melukiskan fungsi dari kelas tersebut. Sebagai contoh, kita hendak membuat kelas untuk menyimpan data diri dari
seorang mahasiswa, maka sebaiknya nama kelas yang digunakan adalah Mahasiswa atau DataMahasiswa. Perlu juga untuk diperhatikan aturan pemberian nama kelas: (1) Selalu dimulai dengan huruf
Besar, misal Mahasiswa (2) Jika terdapat lebih dari satu suku kata maka setiap suku kata selalu dimulai dengan huruf besar, misal DataMahasiswa.
* Jangan melupakan tanda titik koma ‘;’ untuk mengakhiri deklarasi dari sebuah kelas.
Posisi Penulisan Class dan Fungsi Utama
Andaikan kita akan mendeklarasikan kelas di dalam sebuah file yang terdapat fungsi utama, maka struktur program kita adalah sebagai berikut:
#include< …>
#include
using namespace std;
class Mahasiswa
{
};
class Dosen
{
};
…
int main()
{
//body fungsi utama
return 0;
}
Class Sebagai Tipe Data
Selama ini kita sudah mengenal beberapa macam tipe data seperti int, float, double dll. Kelas juga bisa digunakan sebagai tipe data dari sebuah variable. Sebagai contoh, andaikan kita mempunyai kelas
dengan nama Mahasiswa dan kita hendak mendeklarasikan sebuah variabel bertipe Mahasiswa maka penulisannya adalah sebagai berikut:
Mahasiswa mhs;
Pendeklarasian sebuah variabel yang memiliki tipe kelas tertentu bisa juga dipahami sebagai proses pembuatan objek. Pada contoh di atas kita memiliki sebuah objek dengan nama mhs.
Membuat Objek
Pembuatan objek bisa dilakukan dengan mendeklarasikan sebuah varibel bertipe kelas tertentu seperti yang sudah dijelaskan di atas. Bisa juga dilakukan dengan menggunakan pointer, seperti berikut:
Mahasiswa *mhs1 = new Mahasiswa();
Keunggulan menggunakan pointer adalah kita bisa membuat objek pada saat program dijalankan – runtime. Penting untuk diingat setiap objek yang sudah diciptakan (menggunakan pointer) harus dihapus
jika sudah tidak dibutuhkan lagi menggunakan perintah delete.
delete (mhs);
Membuat Sebuah Class
Sebuah kelas bisa memiliki variabel/attribute dan fungsi/method. Setiap variabel dan fungsi ini memiliki beberapa sifat seperti private, protected dan public. Ketiga sifat ini disebuh access specifiers dan
digunakan untuk menentukan siapa yang berhak mengakses variabel dan fungsi.
Berikut ini adalah bentuk umum sebuah kelas yang berisi variabel, fungsi dan access specifiers:
class Mahasiswa
{
private:
// deklarasi variabel dan fungsi yang bersifat private
…
protected:
//deklarasi variabel dan fungsi yang bersifat protected
…
public:
//deklarasi variabel dan fungsi yang bersifat public
…
};
Mengenal Konstruktor dan Destruktor
Di dalam sebuah kelas terdapat dua buah fungsi/method spesial. Disebut spesial karena kita tidak akan pernah memanggil fungsi tersebut secara langsung namun fungsi ini akan dijalankan secara otomatis.
Fungsi Konstruktor (constructor) adalah fungsi yang dipanggil pada saat pembuatan sebuah objek. Sedangkan fungsi Destruktor (destructor) adalah fungsi yang dipanggil pada saat penghancuran sebuah
objek.
Pertanyaan yang menarik bagi kita adalah “kapan sih sebuah objek dihancurkan” ? Jawabannya adalah saat objek itu sudah tidak lagi digunakan. Untuk objek yang dibuat menggunakan pointer, objek ini
akan dihancurkan hanya pada saat kita memanggil perintah delete. Sedangkan untuk objek yang dibuat tanpa menggunakan pointer, objek tersebut akan dihancurkan jika keluar dari scope objek / variabel
tersebut. Pembahasan tentang scope sudah pernah dibahas sebelumnya. Agar lebih memahami cobalah memahami source code yang disertakan pada tulisan ini.
Sifat spesial yang lain dari kedua fungsi ini adalah nama. Kedua fungsi memiliki nama yang sama dengan nama kelas. Namun yang membedakan, untuk fungsi Destruktor ditambahkan tanda ‘cacing’
didepan nama fungsi. Sebagai contoh, jika kita mempunyai kelas dengan nama Mahasiswa maka nama fungsi konstruktor dari kelas ini adalah Mahasiswa() sedangkan nama fungsi destruktor dari kelas ini
adalah ~Mahasiswa(). Kedua fungsi ini biasanya bersifat public.
Dengan demikian bentuk umum dari sebuah kelas adalah sebagai berikut:
class Mahasiswa
{
private:
// deklarasi variabel dan fungsi yang bersifat private
…
protected:
//deklarasi variabel dan fungsi yang bersifat protected
…
public:
//deklarasi variabel dan fungsi yang bersifat public
Mahasiswa()
{
//body dari konstruktor
}
~Mahasiswa()
{
//body dari destruktor
}
};
Download Artikel & Source Code
Pengenalan Bahasa C++ (Bagian 10)
Tulisan kali ini akan membahas lebih lanjut bagaimana membuat konstruktor dari sebuah kelas. Akan dibahas pula lebih mendalam tentang perbedaan access specifier seperti private, public, protected.
Pembahasan disertai juga dengan source code yang menunjukkan bagaimana membuat proses inheritance (pewarisan) dan bagaimana pengaruh access specifier ini di dalam proses tersebut.
Download Artikel + Source Code
Pengenalan Bahasa C++ (Bagian 11)
Di dalam pemrograman berorientasi objek (PBO) umumnya semua variabel/atribut diletakan pada bagian private.
view plainprint?
1. class A
2. {
3. private:
4. int x;
5. };
view plainprint?
1. class A
2. {
3. private:
4. int x;
5. };
Hal ini berarti variabel-variabel ini hanya bisa diakses dari dalam kelas itu sendiri. Misalnya dari dalam salah satu method/fungsi yang berada di dalam kelas.
view plainprint?
1. class A
2. {
3. private:
4. int x;
5.
6. public:
7. void fungsi()
8. {
9. // variabel x, bersifat private
10. // jadi hanya bisa dipanggil dari dalam
11. // kelas A
12. x = 5;
13. }
14.
15. };
1. class A
2. {
3. private:
4. int x;
5.
6. public:
7. void fungsi()
8. {
9. // variabel x, bersifat private
10. // jadi hanya bisa dipanggil dari dalam
11. // kelas A
12. x = 5;
13. }
14.
15. };
penggunaan variabel ini dari luar kelas, misal memanggil dari fungsi main, tidak bisa dilakukan.
1. int main()
2. {
3. A myObjek;
4. // Error. x bersifat private utk kelas A
5. myObjek.x = 6;
6. }
1. int main()
2. {
3. A myObjek;
4. // Error. x bersifat private utk kelas A
5. myObjek.x = 6;
6. }
Untuk bisa menggunakan (mengubah atau melihat) sebuah variabel yang bersifat private di dalam sebuah kelas, biasanya dilakukan menggunakan fungsi setter dan getter.
Artikel Selengkapnya + Source Code
Mari Berlatih Bahasa C++ (Bagian 1)
Program membalikan kata adalah salah satu tugas yang saya dapatkan di lab, ketika mulai belajar C/C++. Tugas ini sangat bagus untuk mengetahui sebaik mana pengetahuan kita tentang ARRAY, dalam
hal ini STRING. Untuk bisa menyelesaikan tugas ini, pemahaman tentang VARIABEL, PERULANGAN dan INPUT-OUPUT dengan C++ sangat dibutuhkan.
Saran:
Jangan melihat dulu source code. Cobalah membaca lagi petunjuk tugas dan menjalankan contoh program yang disediakan. Jika sudah selesai atau mengalami masalah dalam menyelesaikan tugas ini,
silahkan membuka source code.
Download Petunjuk dan Source Code
Mari Berlatih Bahasa C++ (Bagian 2)
Saat bekerja dengan ARRAY, hal yang perlu diperhatikan adalah jangan sampai memberikan data ke dalam ARRAY melebihi kapasitas yang disediakan. Jika hal ini dilanggar maka masalah yang dihadapi
adalah buffer overflow. Tujuan dari tugas kali ini adalah membuat suatu sistem “Input Kalimat” di mana user hanya bisa menyimpan data ke dalam ARRAY sebanyak tempat yang sudah ditentukan
sebelumnya.
Saran:
Jangan melihat dulu source code. Cobalah membaca lagi petunjuk tugas dan menjalankan contoh program yang disediakan. Jika sudah selesai atau mengalami masalah dalam menyelesaikan tugas ini,
silahkan membuka source code.
Download Petunjuk & Source Code
Mari Berlatih Bahasa C++ (Bagian 3)
Tugas kali ini merupakan pengembangan dari tugas sebelumnya, Input Kalimat, dengan penekanan pada pembuatan fungsi. Disarankan teman-teman untuk membaca artikel tentang fungsi, pengenalan
bahasa C++ (bagian 7).
Saran:
Jangan melihat dulu source code. Cobalah membaca lagi petunjuk tugas dan menjalankan contoh program yang disediakan. Jika sudah selesai atau mengalami masalah dalam menyelesaikan tugas ini,
silahkan membuka source code.
Download Petunjuk & Source Code
Implementasi Array dengan Vector
Pengantar
Array adalah variabel dengan sifat khusus yaitu mampu menyimpan nilai lebih dari satu dalam waktu yang bersamaan. Setiap nilai ini disimpan pada alamat tertentu yang biasa disebut indeks. Ingat indeks
selalu dimulai dari 0 (nol). Membuat program menggunakan array sudah pernah dijelaskan sebelumnya, namun kelamahan dari pendekatan ini adalah kita harus sangat memperhatikan berapa jumlah data
yang disimpan ke dalam array. Jika data yang dimasukkan ke dalam array melebihi kemampuan yang disediakan maka akan menimbulkan masalah buffer overflow.
Pada tulisan ini diperkenalkan bagaimana membuat array menggunakan salah satu tipe data yang disebut vector. Dengan menggunakan tipe data ini, jumlah data yang dimasukkan sangat fleksibel,
tergantung dari keinginan kita. Kita tidak perlu mendeklarasikan secara eksplisit berapa jumlah data yang bisa disimpan ke dalam array. Tipe data ini menyediakan sebuah fungsi yang bisa dipakai untuk
mengetahui sebarapa banyak jumlah data yang telah tersimpan, disebut size(). Terdapat juga fungsi yang digunakan untuk menambahkan data ke dalam array, disebut push_back().
Lebih Jauh Tentang Vector
Secara formal, Vector dikenal sebagai container / wadah dan diperkenalkan dalam C++. Kita tidak akan menemukan Vector di dalam bahasa C. Vector adalah wadah yang bisa menampung semua jenis
tipe data, sehingga yang perlu kita lakukan hanyalah menentukan tipe data apa yang hendak disimpan sedangkan cara untuk bekerja dengan data tersebut adalah sama untuk semua tipe data.
Untuk bisa menggunakan vector, kita perlu memberitahukan compiler bahwa kita menggunakan pustaka vector
#include<vector>
Contoh kita ingin bekerja dengan tipe data int, maka yang perlu kita lakukan adalah mendefinisikan variabel yang bertipe vector of int, seperti berikut:
vector<int> myVariable;
Jika ingin bekerja dengan tipe data float maka definisinya seperti berikut:
vector<float> myVariable;
Kita juga bisa bekerja dengan class (ingat class juga bisa digunakan sebagai tipe data) maka definisinya seperti berikut:
vector<nama_class> myVariable;
Untuk mengetahui jumlah data yang disimpan, kita bisa menggunakan fungsi size() seperti berikut:
myVariable.size();
Andaikan kita bekerja dengan tipe data int, maka cara menambahkan data ke dalam vector adalah seperti berikut:
myVariable.push_back(5);
atau bisa juga seperti berikut:
int data = 10;
myVariable.push_back(data);
atau bisa juga seperti berikut:
int data_baru = 0;
cout << “Input data baru : “;
cin >> data_baru;
myVariable.push_back(data_baru);
Untuk mengakses data tertentu yang tersimpan, cara yang digunakan sama persis dengan penggunaan array. Misal untuk menampilkan data pada indeks ke-5 (ingat indeks selalu dimulai dari 0);
cout << myVariable[5];
Pada source code yang diberikan, terdapat contoh sederhana bagaimana menyimpan data ke dalam array menggunakan cara yang sudah kita kenal dan bagaimana caranya jika hal tersebut kita buat
menggunakan vector.
Download Artikel & Source Code
Mengenal Fungsi Swap
Pengantar
Fungsi swap adalah fungsi yang digunakan untuk menukarkan dua buah nilai. Fungsi ini sangat dibutuhkan ketika kita hendak membuat aplikasi pengurutan data (sorting). Pada pemrograman C++, fungsi
ini sudah tersedia dengan fleksibilitas yang tinggi. Artinya bisa digunakan untuk menukar dua buah nilai dengan tipe data yang bermacam-macam. Walaupun sudah tersedia dan tinggal pakai, tidak ada
salahnya kita belajar bersama-sama bagaimana membuat fungsi ini. Contoh penggunaan fungsi swap yang sudah tersedia juga akan tersedia pada source code yang diberikan.
Sekilas Tentang Pointer
Pointer sudah pernah dibahas pada tulisan, pengenalan bahasa C++ (bagian 3). Pada bagian ini akan dijelaskan secara singkat penggunaan sederhana dari pointer.
Konsep penting yang perlu diingat adalah, pointer biasanya digunakan untuk menunjuk ke variabel yang lain. Untuk itu pointer membutuhkan alamat dari variabel yang ditunjuk. Setelah mengetahui alamat,
dengan menggunakan pointer kita bisa mengubah nilai dari variabel yang ditunjuk.
Kita sudah tahu bahwa untuk membuat sebuah variabel, kita perlu menentukan tipe dari variabel dan kita juga perlu memperhatikan aturan pemberian nama dari variabel tersebut. Misal kita akan membuat
variabel dengan nama data dan bertipe int, maka kita dapat menulisnya sebagai berikut:
int data;
Jika kita hendak membuat pointer. Kita cukup mendambahkan tanda bintang setelah tipe data.
int* myPointer;
pada deklarasi ini, kita membuat sebuah pointer dengan nama myPointer. Pointer ini hanya bisa menunjuk ke variabel yang bertipe int.
Seperti yang sudah dijelaskan sebelumnya, untuk menunjuk sebuah variabel, pointer membutuhkan alamat dari variabel yang hendak ditunjuk. Dengan menggunakan tanda ‘&’ kita bisa mendapatkan
alamat dari sebuah variabel. Berikut ini ditunjukkan bagaimana caranya myPointer bisa menunjuk ke alamat dari data.
myPointer = &data;
Variabel sebenarnya hanya merupakan nama lain dari alamat dimemori. Kita tentu akan lebih mudah mengingat nama seperti data dari pada sebuah alamat dimemori, 0x22ff5c.
Sekarang diandaikan kita memberikan nilai 10 (sepuluh) pada variabel data
data = 10;
pernyataan tersebut sebenarnya, kita menyimpan nilai 10 ke alamat tertentu dimemori yang diwakili dengan nama data. Karena myPointer telah menunjuk ke alamat dari data, ini berarti myPointer juga
menunjuk ke nilai 10.
Untuk mengakses (misal membaca) nilai yang ditunjuk oleh pointer, kita bisa menggunakan tanda ‘*’ didepan nama dari pointer.
cout<< *myPointer ;
Keluaran dari pernyataan ini adalah angka 10 akan tercetak ke layar. Keluaran ini akan sama jika kita menampilkan nilai dari variabel data.
cout<< data;
Kita juga bisa mengubah nilai yang ditunjuk oleh pointer, seperti berikut:
*myPointer = 15;
Setelah pernyataan diatas maka keluaran dari kedua pernyataan berikut akan sama persis yaitu menampilkan angka 15.
cout << data;
cout << *myPointer;
Membuat Fungsi Swap
Untuk membuat sebuah fungsi, kita bisa memulai dengan membayangkan bagaimana caranya kita memanggil fungsi yang akan kita pakai. Sebagai contoh fungsi swap yang akan kita buat dipanggil
dengan cara sebagai berikut:
int a = 5;
int b= 7;
mySwap(&a,&b);
cout << a; // harapannya tertampil 7
cout << b; // harapannya tertampil 5
berangkat dari skenario di atas, tampak bahwa fungsi swap memiliki dua buah parameter pointer dengan tipe int. Untuk itu bentuk fungsi kita kira-kira seperti berikut:
void mySwap (int* x, int* y)
{
//body dari swap
…
}
pada kasus ini kita tidak membutuhkan nilai kembalian sehingga tipe data dari return value dibuat void. Kenapa tidak butuh ? Silahkan melihat lagi skenario yang kita buat di atas.
Karena fungsi kita hendak menukarkan nilai x dan nilai y (ingat x dan y adalah pointer, sehingga kita butuh tanda * untuk mengubah nilai), maka kita membutuhkan sebuah penampung (variabel
tambahan) untuk melakukan proses penukaran ini.
Buf = *x;// buf bernilai x
*x = *y; // x bernilai y
*y = buf;// y bernilai x
pada contoh diatas, penampung yang kita pakai adalah Buf. Karena Buf dipakai untuk menampung nilai bertipe int, maka Buf juga harus dideklarasikan bertipe int.
int Buf;
Dengan demikian bentuk fungsi kita selengkapnya, kira-kira seperti berikut:
void swap (int* x, int* y)
{
//body dari swap
int Buf;
Buf = *x;
*x = *y;
*y = Buf;
}
Pemanggilan fungsi dengan cara mengirimkan alamat dari variabel, dikenal dengan istilah passing parameter by reference.
Di dalam bahasa C++, diperkenalkan teknik baru untuk pengiriman parameter berupa reference dengan menggunakan tanda ‘&’. Dengan menggunakan teknik ini, cara pemanggilan fungsi swap bisa
diskenariokan sebagai berikut:
int a = 5;
int b= 7;
swap(a,b); // perhatikan tanda & dihilangkan
cout << a;
cout << b;
Perubahan juga perlu dilakukan pada fungsi kita sebagai berikut:
void swap (int& x, int& y) //perhatikan tanda &
{
//body dari swap
int Buf;
Buf = x;// tanda * juga dihilangkan
x = y;
y = Buf;
}
Download Article & Source Code
Membangkitkan Bilangan Acak
Terdapat dua fungsi yang dibutuhkan untuk membangkitkan bilangan acak srand() dan rand(). Fungsi srand() dibutuhkan untuk menentukan “bibit” dari bilangan acak yang akan dibangkitkan. Sama seperti
kalau kita menanam tumbuhan, bibit yang berbeda tentu akan menghasilkan tambuhan dewasa yang berbeda pula. Sedangkan fungsi rand() digunakan untuk menampilkan bilangan acak yang dihasilkan
dari “bibit” yang diberikan ke fungsi srand().
Bentuk umum dari fungsi srand() adalah:
view plainprint?
1. srand(bibit);
view plainprint?
1. srand(bibit);
Sebagai Contoh:
view plainprint?
1. srand(4);
view plainprint?
1. srand(4);
Bentuk umum dari fungsi rand() adalah:
view plainprint?
1. rand() % n;
view plainprint?
1. rand() % n;
Bilangan acak yang dihasilkan oleh fungsi rand() adalah dari 0 s/d (n-1).
Sebagai contoh:
view plainprint?
1. rand() % 10;
view plainprint?
1. rand() % 10;
Perintah di atas akan menghasilkan bilangan antara 0 s/d 9.
Seperti yang sudah dijelaskan sebelumnya, jika kita menggunakan “bibit” yang sama maka hasil yang diperoleh dari bibit ini pastilah sama. Untuk membuktikan, cobalah menjalankan program berikut
berkali-kali dan perhatikan tampilan dilayar:
view plainprint?
1. #include<iostream>
2. using namespace std;
3.
4. int main()
5. {
6. srand(5);
7. int data = rand() % 10;
8. cout << data << endl;
9. cin.get();
10. }
view plainprint?
1. #include<iostream>
2. using namespace std;
3.
4. int main()
5. {
6. srand(5);
7. int data = rand() % 10;
8. cout << data << endl;
9. cin.get();
10. }
Agar bisa membangkitkan bilangan yang benar-benar acak, kita harus memberikan “bibit” yang berbeda-beda pula kepada fungsi srand(). Salah satu cara yang bisa dilakukan adalah memberikan “bibit”
menggunakan fungsi time(), seperti berikut:
view plainprint?
1. srand(time(NULL));
view plainprint?
1. srand(time(NULL));
Sekarang, cobalah jalankan program berikut beberapa kali, dan perhatikan keluaran yang ditampilkan ke layar.
view plainprint?
1. #include<iostream>
2. using namespace std;
3.
4. int main()
5. {
6. srand(time(NULL));
7. int data = rand() % 10;
8. cout << data << endl;
9. cin.get();
10. }
view plainprint?
1. #include<iostream>
2. using namespace std;
3.
4. int main()
5. {
6. srand(time(NULL));
7. int data = rand() % 10;
8. cout << data << endl;
9. cin.get();
10. }
Fungsi rand() umumnya digunakan untuk membangkitkan bilangan acak yang bertipe bilangan bulat. Cobalah mencari solusi bagaimana membuat bilangan acak “pecahan” antara 0 dan 1 ?
Menampilkan Tabel ASCII
Perhatikan program berikut:
view plainprint?
1. #include <iostream>
2. using namespace std;
3.
4. int main()
5. {
6. int data = 48;
7. for(int i=0;i<=9;i++) {
8. cout << char(data+i) << ” “;
9. }
10. cout << endl;
11. }
view plainprint?
1. #include <iostream>
2. using namespace std;
3.
4. int main()
5. {
6. int data = 48;
7. for(int i=0;i<=9;i++) {
8. cout << char(data+i) << ” “;
9. }
10. cout << endl;
11. }
Program diatas akan menampilkan angka dari 0 s/d 9. Ide dibalik program sederhana di atas adalah menampilkan informasi yang bernilai desimal (48 s/d 57) dalam bentuk karakter ke layar.
Representasi desimal dalam bentuk karakter bisa dilihat pada tabel ASCII.
Program berikut akan menampilkan semua isi tabel ASCII.
view plainprint?
1. #include <iostream>
2. using namespace std;
3.
4. int main()
5. {
6. for(int i=0;i<=255;i++) {
7. cout << char(i) << ” “;
8. if(i%15==0) {
9. cout << endl;
10. }
11. }
12. cout << endl;
13. }
view plainprint?
1. #include <iostream>
2. using namespace std;
3.
4. int main()
5. {
6. for(int i=0;i<=255;i++) {
7. cout << char(i) << ” “;
8. if(i%15==0) {
9. cout << endl;
10. }
11. }
12. cout << endl;
13. }
#include
/* membuat linked list */
typedef struct myLinkedList {
char nim[10];
char nama[35];
int nilai;
myLinkedList *next;
};
myLinkedList *head;
/* keadaan awal */
void init() {
head = NULL;
}
/* fungsi untuk mengecek linked list
* apakah kosong atau tidak
* jika kosong maka bernilai 1
* jika tidak kosong maka bernilai 0
*/
int paKosong() {
if (head == NULL) return 1;
else return 0;
}
/**
* fungsi untuk menambahkan data dari depan node
*/
void tambahDepan() {
myLinkedList *baru;
baru = new myLinkedList;
cout << “Masukkan Data lengkap di bawah ini : ” <<>> baru->nim;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
baru->next = head;
head = baru;
}
}
/**
* fungsu untuk menambahkan data dari depan node
*/
void tambahBelakang() {
myLinkedList *baru, *bantu;
baru = new myLinkedList;
cout << “Masukkan Data lengkap di bawah ini : ” <<>> baru->nim;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
bantu = head;
while (bantu->next != NULL) {
bantu = bantu->next;
}
bantu->next = baru;
}
}
/**
* fungsi untuk menghapus dari depan node
*/
void hapusDepan() {
myLinkedList *hapus;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
hapus = head;
data = hapus->nim;
head = head->next;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout <<>
/**
* fungsi untuk menghapus dari belakang node
*/
void hapusBelakang() {
myLinkedList *hapus, *bantu;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
bantu = head;
while(bantu->next->next != NULL) {
bantu = bantu->next;
}
hapus = bantu->next;
data = hapus->nim;
bantu->next = NULL;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout <<>
cout << “Tekan Enter untuk kembali ke Menu!”; getch(); }
/**
* fungsi untuk menampilkan data linked list
*/
void tampilData() {
int no = 1;
myLinkedList *bantu;
bantu = head;
if (paKosong() == 0) {
while (bantu != NULL) {
cout << “No. : ” <<>nim <<>nama <<>nilai <<>
no++;
bantu = bantu->next;
}
cout <<>
} else {
cout << “Data masih kosong ” <<>
/**
* fungsi Menu, Untuk menentukan linked list mana
* yang dipilih
*/
int menu() {
int pilihan;
cout << “+———————-+\n”; cout << “| MENU PILIHAN |\n”; cout << “+———————-+\n”; cout << “| 1. Tambah Depan |\n”; cout << “| 2. Tambah Belakang |\n”; cout << “| 3. Hapus Depan |\n”; cout << “| 4. Hapus Belakang |\n”; cout << “| 5. Tambah Tengah |\n”; cout << “| 6. Hapus Tengah |\n”; cout << “| 7. TampilData |\n”; cout << “| 8. Keluar |\n”; cout << “+———————-+\n”; cout << “| PILIHAN ANDA ? [ ] |\n”; cout << “+———————-+\n”;
cin >> pilihan;
return pilihan;
}
/**
* fungsi operasi data
*/
void operasiData() {
int pilih;
do {
pilih = menu();
switch (pilih) {
case 1 :
tambahDepan();
break;
case 2 :
tambahBelakang();
break;
case 3 :
hapusDepan();
break;
case 4 :
hapusBelakang();
break;
case 5 :
tampilData();
break;
case 6:
cout << “Terima kasih coy!!!”; break; } } while (pilih != 6); }
// ROGRAM UTAMA
void main() {
init();
operasiData();
}
Tulisan tentang “Mari Belatih Bahasa C++” adalah seri belajar bahasa pemrograman C++ dari awal yang ditujukkan untuk teman-teman yang baru belajar pemrograman. Harapannya adalah denganmengikuti seri ini, teman-teman akan belajar menggunakan pengetahuan yang sudah dipelajari di bangku kuliah atau pelajari lewat materi yang disediakan di website ini, untuk menyelesaikan persoalan mulai dari yang tingkat dasar sampai dengan tingkat lanjut. Dengan berlatih, mudah-mudahan kemampuan pemrograman teman-teman akan bisa semakin baik.
Download Artikel dan Contoh Source Code
Pengenalan Bahasa C++ (Bagian 1)
Pada tulisan ini, kita akan belajar tentang :
* Bagaimana instalasi IDE Dev-C++
* Menulis dan memahami program “Halo Dunia”
* Memahami struktur program, Namespace, cout, cin, parameter pada fungsi main
Download Artikel
Pengenalan Bahasa C++ (Bagian 2)
Pada bagian ini kita akan belajar lebih dalam lagi tentang struktur dasar dari program C/C++. Topik pembahasan meliputi:
* Penjelasan maksud dari setiap bagian pada struktur dasar
* Pesan kesalahan apa yang terjadi jika kita tidak mengikuti struktur dasar ini.
* Contoh program yang mengikuti struktur dasar ini, membuat sendiri fungsi faktorial dan tambah (Download Source Code)
Download Artikel
Pengenalan Bahasa C++ (Bagian 3)
Pada bagian ini khusus membahas tentang konsep variabel. Pembahasan meliputi:
* Apa itu variabel
* Tipe data dari variabel
* Aturan pemberian nama variabel
* Bagaimana mendeklarasikan variabel
* Memahami variabel sebagai pointer
* Bagaimana mendeklarasikan dan menggunakan variabel sebagai pointer
* Program untuk menampilkan nilai bilangan genap
* Program menggunakan pointer
Download Source Code
Download Artikel
Pengenalan Bahasa C++ (Bagian 4)
Pada pembahasan ini kita akan belajar tentang Array. Pembahasan meliputi:
* Konsep Array
* Mendeklarasikan Array berdimensi 1, 2, dan N-dimensi
* Memberikan nilai ke Array
* Menampilkan isi Array
* Contoh program Input Output menggunakan Array. Pada program ini user bisa menentukan jumlah data yang bisa disimpan ke dalam Array, menentukan isi dari Array dan program akan
menampilkan semua isi Array tersebut ke layar
Download Artikel
Pengenalan Bahasa C++ (Bagian 5)
Di dalam bahasa C++ terdapat 3 (tiga) metode yang bisa digunakan untuk membuat perulangan yaitu, for, while atau dengan do … while. Ketiga perulangan ini membutuhkan pengontrol jalannya
perulangan yang disebut kondisi. Selama kondisi benar, perulangan akan terus dikerjakan.
Tulisan ini membahas dengan detail aspek penting yang perlu diperhatikan dalam membuat perulangan. Berikut ini adalah garis besar topik yang dibahas:
* Konsep kondisi
* Mengenal operator logika
* perulangan dengan for
* perulangan dengan while
* perulangan dengan do … while
* perbedaan antara perulangan dengan while dan do … while
Download Artikel
Pengenalan Bahasa C++ (Bagian 6)
Di dalam kehidupan ini seringkali kita diperhadapkan dengan pengambilan keputusan. Dan setiap keputusan selalu dihadapkan dengan konsekuensi. Jika saya memutuskan untuk melakukan ‘A’ maka
konsekuensinya adalah nasib saya akan menjadi ‘B’ namun jika saya melakukan C maka nasib saya akan menjadi ‘B+’ .
Di dalam struktur pemrograman bahasa C/C++, ilustrasi di atas dapat dituliskan sebagai berikut:
jika (saya melakukan A) maka
{
…..nasib_saya = B
} namun
jika (saya melakukan C) maka
{
…..nasib_saya = B+
}
Konsep inilah yang dikenal dengan istilah percabangan.
Pembahasan di dalam tulisan ini meliputi:
1. Percangan dengan if tanpa else
2. Percabangan dengan if dengan else
3. Percabangan dengan switch
4. Konsep Scope. Konsep ini sangat penting untuk memahami konsep lokalitas dari sebuah variabel.
5. Contoh Program, dimana penjelasan diawali dengan menjelaskan permasalahan yang hendak dipecahkan, algoritma yang digunakan dan diakhiri dengan penyelesaian.
Download Artikel
Pengenalan Bahasa C++ (Bagian 7)
Pada tulisan ini akan dibahas khusus tentang fungsi dan merupakan pelengkap penjelasan dari tulisan Pengenalan Bahasa C++ (bagian 2). Penjelasan disertai dengan ilustrasi berupa gambar dengan
penekanan pada bagian-bagian penting yang perlu diperhatikan saat mengimplementasikan prototipe sebuah fungsi.
Download Materi
Pengenalan Bahasa C++ (Bagian 8)
Operasi file adalah operasi yang berhubungan dengan file. Pada tulisan ini akan diberikan penjelasan tentang bagaimana membaca file (per baris dan per kata), membuat file baru, dan membuat duplikasi
dari sebuah file.
Download Artikel & Source Code
Pengenalan Bahasa C++ (Bagian 9)
Pengantar
Salah satu keunggulan C++ dibandingkan C adalah dukungan yang baik akan Object Oriented Programming (OOP). Saat bekerja dengan OOP, kita pasti akan berhadapan dengan yang dinamakan class
karena merupakan template / cetakan dari sebuah objek. Di Ambon, makanan khas kami adalah Sagu. Untuk membuat sagu kami biasanya menggunakan porna. Sagu yang masih mentah, disebut Sagu
manta, akan dimasukkan ke dalam porna ini untuk kemudian dibakar. Dari sebuah porna kita bisa memperoleh beberapa buah sagu. Setelah sagu menjadi masak dan disiap dimakan, porna yang sudah
dipakai bisa dipakai lagi untuk membuat sagu yang lain. Untuk itu porna bisa juga kita pahami sebagai template / cetakan untuk membuat objek yang disebut Sagu bakar.
Bentuk Umum Sebuah Class
class nama_kelas
{
};
Berikut ini adalah beberapa catatan penting yang perlu diperhatikan dari bentuk umum ini:
* kata kunci class, menunjukkan bahwa kita hendak membuat sebuah kelas dan harus ditulis menggunakan huruf kecil.
* nama_kelas adalah nama dari kelas yang hendak kita buat. Sebaiknya nama ini bisa melukiskan fungsi dari kelas tersebut. Sebagai contoh, kita hendak membuat kelas untuk menyimpan data diri dari
seorang mahasiswa, maka sebaiknya nama kelas yang digunakan adalah Mahasiswa atau DataMahasiswa. Perlu juga untuk diperhatikan aturan pemberian nama kelas: (1) Selalu dimulai dengan huruf
Besar, misal Mahasiswa (2) Jika terdapat lebih dari satu suku kata maka setiap suku kata selalu dimulai dengan huruf besar, misal DataMahasiswa.
* Jangan melupakan tanda titik koma ‘;’ untuk mengakhiri deklarasi dari sebuah kelas.
Posisi Penulisan Class dan Fungsi Utama
Andaikan kita akan mendeklarasikan kelas di dalam sebuah file yang terdapat fungsi utama, maka struktur program kita adalah sebagai berikut:
#include< …>
#include
using namespace std;
class Mahasiswa
{
};
class Dosen
{
};
…
int main()
{
//body fungsi utama
return 0;
}
Class Sebagai Tipe Data
Selama ini kita sudah mengenal beberapa macam tipe data seperti int, float, double dll. Kelas juga bisa digunakan sebagai tipe data dari sebuah variable. Sebagai contoh, andaikan kita mempunyai kelas
dengan nama Mahasiswa dan kita hendak mendeklarasikan sebuah variabel bertipe Mahasiswa maka penulisannya adalah sebagai berikut:
Mahasiswa mhs;
Pendeklarasian sebuah variabel yang memiliki tipe kelas tertentu bisa juga dipahami sebagai proses pembuatan objek. Pada contoh di atas kita memiliki sebuah objek dengan nama mhs.
Membuat Objek
Pembuatan objek bisa dilakukan dengan mendeklarasikan sebuah varibel bertipe kelas tertentu seperti yang sudah dijelaskan di atas. Bisa juga dilakukan dengan menggunakan pointer, seperti berikut:
Mahasiswa *mhs1 = new Mahasiswa();
Keunggulan menggunakan pointer adalah kita bisa membuat objek pada saat program dijalankan – runtime. Penting untuk diingat setiap objek yang sudah diciptakan (menggunakan pointer) harus dihapus
jika sudah tidak dibutuhkan lagi menggunakan perintah delete.
delete (mhs);
Membuat Sebuah Class
Sebuah kelas bisa memiliki variabel/attribute dan fungsi/method. Setiap variabel dan fungsi ini memiliki beberapa sifat seperti private, protected dan public. Ketiga sifat ini disebuh access specifiers dan
digunakan untuk menentukan siapa yang berhak mengakses variabel dan fungsi.
Berikut ini adalah bentuk umum sebuah kelas yang berisi variabel, fungsi dan access specifiers:
class Mahasiswa
{
private:
// deklarasi variabel dan fungsi yang bersifat private
…
protected:
//deklarasi variabel dan fungsi yang bersifat protected
…
public:
//deklarasi variabel dan fungsi yang bersifat public
…
};
Mengenal Konstruktor dan Destruktor
Di dalam sebuah kelas terdapat dua buah fungsi/method spesial. Disebut spesial karena kita tidak akan pernah memanggil fungsi tersebut secara langsung namun fungsi ini akan dijalankan secara otomatis.
Fungsi Konstruktor (constructor) adalah fungsi yang dipanggil pada saat pembuatan sebuah objek. Sedangkan fungsi Destruktor (destructor) adalah fungsi yang dipanggil pada saat penghancuran sebuah
objek.
Pertanyaan yang menarik bagi kita adalah “kapan sih sebuah objek dihancurkan” ? Jawabannya adalah saat objek itu sudah tidak lagi digunakan. Untuk objek yang dibuat menggunakan pointer, objek ini
akan dihancurkan hanya pada saat kita memanggil perintah delete. Sedangkan untuk objek yang dibuat tanpa menggunakan pointer, objek tersebut akan dihancurkan jika keluar dari scope objek / variabel
tersebut. Pembahasan tentang scope sudah pernah dibahas sebelumnya. Agar lebih memahami cobalah memahami source code yang disertakan pada tulisan ini.
Sifat spesial yang lain dari kedua fungsi ini adalah nama. Kedua fungsi memiliki nama yang sama dengan nama kelas. Namun yang membedakan, untuk fungsi Destruktor ditambahkan tanda ‘cacing’
didepan nama fungsi. Sebagai contoh, jika kita mempunyai kelas dengan nama Mahasiswa maka nama fungsi konstruktor dari kelas ini adalah Mahasiswa() sedangkan nama fungsi destruktor dari kelas ini
adalah ~Mahasiswa(). Kedua fungsi ini biasanya bersifat public.
Dengan demikian bentuk umum dari sebuah kelas adalah sebagai berikut:
class Mahasiswa
{
private:
// deklarasi variabel dan fungsi yang bersifat private
…
protected:
//deklarasi variabel dan fungsi yang bersifat protected
…
public:
//deklarasi variabel dan fungsi yang bersifat public
Mahasiswa()
{
//body dari konstruktor
}
~Mahasiswa()
{
//body dari destruktor
}
};
Download Artikel & Source Code
Pengenalan Bahasa C++ (Bagian 10)
Tulisan kali ini akan membahas lebih lanjut bagaimana membuat konstruktor dari sebuah kelas. Akan dibahas pula lebih mendalam tentang perbedaan access specifier seperti private, public, protected.
Pembahasan disertai juga dengan source code yang menunjukkan bagaimana membuat proses inheritance (pewarisan) dan bagaimana pengaruh access specifier ini di dalam proses tersebut.
Download Artikel + Source Code
Pengenalan Bahasa C++ (Bagian 11)
Di dalam pemrograman berorientasi objek (PBO) umumnya semua variabel/atribut diletakan pada bagian private.
view plainprint?
1. class A
2. {
3. private:
4. int x;
5. };
view plainprint?
1. class A
2. {
3. private:
4. int x;
5. };
Hal ini berarti variabel-variabel ini hanya bisa diakses dari dalam kelas itu sendiri. Misalnya dari dalam salah satu method/fungsi yang berada di dalam kelas.
view plainprint?
1. class A
2. {
3. private:
4. int x;
5.
6. public:
7. void fungsi()
8. {
9. // variabel x, bersifat private
10. // jadi hanya bisa dipanggil dari dalam
11. // kelas A
12. x = 5;
13. }
14.
15. };
1. class A
2. {
3. private:
4. int x;
5.
6. public:
7. void fungsi()
8. {
9. // variabel x, bersifat private
10. // jadi hanya bisa dipanggil dari dalam
11. // kelas A
12. x = 5;
13. }
14.
15. };
penggunaan variabel ini dari luar kelas, misal memanggil dari fungsi main, tidak bisa dilakukan.
1. int main()
2. {
3. A myObjek;
4. // Error. x bersifat private utk kelas A
5. myObjek.x = 6;
6. }
1. int main()
2. {
3. A myObjek;
4. // Error. x bersifat private utk kelas A
5. myObjek.x = 6;
6. }
Untuk bisa menggunakan (mengubah atau melihat) sebuah variabel yang bersifat private di dalam sebuah kelas, biasanya dilakukan menggunakan fungsi setter dan getter.
Artikel Selengkapnya + Source Code
Mari Berlatih Bahasa C++ (Bagian 1)
Program membalikan kata adalah salah satu tugas yang saya dapatkan di lab, ketika mulai belajar C/C++. Tugas ini sangat bagus untuk mengetahui sebaik mana pengetahuan kita tentang ARRAY, dalam
hal ini STRING. Untuk bisa menyelesaikan tugas ini, pemahaman tentang VARIABEL, PERULANGAN dan INPUT-OUPUT dengan C++ sangat dibutuhkan.
Saran:
Jangan melihat dulu source code. Cobalah membaca lagi petunjuk tugas dan menjalankan contoh program yang disediakan. Jika sudah selesai atau mengalami masalah dalam menyelesaikan tugas ini,
silahkan membuka source code.
Download Petunjuk dan Source Code
Mari Berlatih Bahasa C++ (Bagian 2)
Saat bekerja dengan ARRAY, hal yang perlu diperhatikan adalah jangan sampai memberikan data ke dalam ARRAY melebihi kapasitas yang disediakan. Jika hal ini dilanggar maka masalah yang dihadapi
adalah buffer overflow. Tujuan dari tugas kali ini adalah membuat suatu sistem “Input Kalimat” di mana user hanya bisa menyimpan data ke dalam ARRAY sebanyak tempat yang sudah ditentukan
sebelumnya.
Saran:
Jangan melihat dulu source code. Cobalah membaca lagi petunjuk tugas dan menjalankan contoh program yang disediakan. Jika sudah selesai atau mengalami masalah dalam menyelesaikan tugas ini,
silahkan membuka source code.
Download Petunjuk & Source Code
Mari Berlatih Bahasa C++ (Bagian 3)
Tugas kali ini merupakan pengembangan dari tugas sebelumnya, Input Kalimat, dengan penekanan pada pembuatan fungsi. Disarankan teman-teman untuk membaca artikel tentang fungsi, pengenalan
bahasa C++ (bagian 7).
Saran:
Jangan melihat dulu source code. Cobalah membaca lagi petunjuk tugas dan menjalankan contoh program yang disediakan. Jika sudah selesai atau mengalami masalah dalam menyelesaikan tugas ini,
silahkan membuka source code.
Download Petunjuk & Source Code
Implementasi Array dengan Vector
Pengantar
Array adalah variabel dengan sifat khusus yaitu mampu menyimpan nilai lebih dari satu dalam waktu yang bersamaan. Setiap nilai ini disimpan pada alamat tertentu yang biasa disebut indeks. Ingat indeks
selalu dimulai dari 0 (nol). Membuat program menggunakan array sudah pernah dijelaskan sebelumnya, namun kelamahan dari pendekatan ini adalah kita harus sangat memperhatikan berapa jumlah data
yang disimpan ke dalam array. Jika data yang dimasukkan ke dalam array melebihi kemampuan yang disediakan maka akan menimbulkan masalah buffer overflow.
Pada tulisan ini diperkenalkan bagaimana membuat array menggunakan salah satu tipe data yang disebut vector. Dengan menggunakan tipe data ini, jumlah data yang dimasukkan sangat fleksibel,
tergantung dari keinginan kita. Kita tidak perlu mendeklarasikan secara eksplisit berapa jumlah data yang bisa disimpan ke dalam array. Tipe data ini menyediakan sebuah fungsi yang bisa dipakai untuk
mengetahui sebarapa banyak jumlah data yang telah tersimpan, disebut size(). Terdapat juga fungsi yang digunakan untuk menambahkan data ke dalam array, disebut push_back().
Lebih Jauh Tentang Vector
Secara formal, Vector dikenal sebagai container / wadah dan diperkenalkan dalam C++. Kita tidak akan menemukan Vector di dalam bahasa C. Vector adalah wadah yang bisa menampung semua jenis
tipe data, sehingga yang perlu kita lakukan hanyalah menentukan tipe data apa yang hendak disimpan sedangkan cara untuk bekerja dengan data tersebut adalah sama untuk semua tipe data.
Untuk bisa menggunakan vector, kita perlu memberitahukan compiler bahwa kita menggunakan pustaka vector
#include<vector>
Contoh kita ingin bekerja dengan tipe data int, maka yang perlu kita lakukan adalah mendefinisikan variabel yang bertipe vector of int, seperti berikut:
vector<int> myVariable;
Jika ingin bekerja dengan tipe data float maka definisinya seperti berikut:
vector<float> myVariable;
Kita juga bisa bekerja dengan class (ingat class juga bisa digunakan sebagai tipe data) maka definisinya seperti berikut:
vector<nama_class> myVariable;
Untuk mengetahui jumlah data yang disimpan, kita bisa menggunakan fungsi size() seperti berikut:
myVariable.size();
Andaikan kita bekerja dengan tipe data int, maka cara menambahkan data ke dalam vector adalah seperti berikut:
myVariable.push_back(5);
atau bisa juga seperti berikut:
int data = 10;
myVariable.push_back(data);
atau bisa juga seperti berikut:
int data_baru = 0;
cout << “Input data baru : “;
cin >> data_baru;
myVariable.push_back(data_baru);
Untuk mengakses data tertentu yang tersimpan, cara yang digunakan sama persis dengan penggunaan array. Misal untuk menampilkan data pada indeks ke-5 (ingat indeks selalu dimulai dari 0);
cout << myVariable[5];
Pada source code yang diberikan, terdapat contoh sederhana bagaimana menyimpan data ke dalam array menggunakan cara yang sudah kita kenal dan bagaimana caranya jika hal tersebut kita buat
menggunakan vector.
Download Artikel & Source Code
Mengenal Fungsi Swap
Pengantar
Fungsi swap adalah fungsi yang digunakan untuk menukarkan dua buah nilai. Fungsi ini sangat dibutuhkan ketika kita hendak membuat aplikasi pengurutan data (sorting). Pada pemrograman C++, fungsi
ini sudah tersedia dengan fleksibilitas yang tinggi. Artinya bisa digunakan untuk menukar dua buah nilai dengan tipe data yang bermacam-macam. Walaupun sudah tersedia dan tinggal pakai, tidak ada
salahnya kita belajar bersama-sama bagaimana membuat fungsi ini. Contoh penggunaan fungsi swap yang sudah tersedia juga akan tersedia pada source code yang diberikan.
Sekilas Tentang Pointer
Pointer sudah pernah dibahas pada tulisan, pengenalan bahasa C++ (bagian 3). Pada bagian ini akan dijelaskan secara singkat penggunaan sederhana dari pointer.
Konsep penting yang perlu diingat adalah, pointer biasanya digunakan untuk menunjuk ke variabel yang lain. Untuk itu pointer membutuhkan alamat dari variabel yang ditunjuk. Setelah mengetahui alamat,
dengan menggunakan pointer kita bisa mengubah nilai dari variabel yang ditunjuk.
Kita sudah tahu bahwa untuk membuat sebuah variabel, kita perlu menentukan tipe dari variabel dan kita juga perlu memperhatikan aturan pemberian nama dari variabel tersebut. Misal kita akan membuat
variabel dengan nama data dan bertipe int, maka kita dapat menulisnya sebagai berikut:
int data;
Jika kita hendak membuat pointer. Kita cukup mendambahkan tanda bintang setelah tipe data.
int* myPointer;
pada deklarasi ini, kita membuat sebuah pointer dengan nama myPointer. Pointer ini hanya bisa menunjuk ke variabel yang bertipe int.
Seperti yang sudah dijelaskan sebelumnya, untuk menunjuk sebuah variabel, pointer membutuhkan alamat dari variabel yang hendak ditunjuk. Dengan menggunakan tanda ‘&’ kita bisa mendapatkan
alamat dari sebuah variabel. Berikut ini ditunjukkan bagaimana caranya myPointer bisa menunjuk ke alamat dari data.
myPointer = &data;
Variabel sebenarnya hanya merupakan nama lain dari alamat dimemori. Kita tentu akan lebih mudah mengingat nama seperti data dari pada sebuah alamat dimemori, 0x22ff5c.
Sekarang diandaikan kita memberikan nilai 10 (sepuluh) pada variabel data
data = 10;
pernyataan tersebut sebenarnya, kita menyimpan nilai 10 ke alamat tertentu dimemori yang diwakili dengan nama data. Karena myPointer telah menunjuk ke alamat dari data, ini berarti myPointer juga
menunjuk ke nilai 10.
Untuk mengakses (misal membaca) nilai yang ditunjuk oleh pointer, kita bisa menggunakan tanda ‘*’ didepan nama dari pointer.
cout<< *myPointer ;
Keluaran dari pernyataan ini adalah angka 10 akan tercetak ke layar. Keluaran ini akan sama jika kita menampilkan nilai dari variabel data.
cout<< data;
Kita juga bisa mengubah nilai yang ditunjuk oleh pointer, seperti berikut:
*myPointer = 15;
Setelah pernyataan diatas maka keluaran dari kedua pernyataan berikut akan sama persis yaitu menampilkan angka 15.
cout << data;
cout << *myPointer;
Membuat Fungsi Swap
Untuk membuat sebuah fungsi, kita bisa memulai dengan membayangkan bagaimana caranya kita memanggil fungsi yang akan kita pakai. Sebagai contoh fungsi swap yang akan kita buat dipanggil
dengan cara sebagai berikut:
int a = 5;
int b= 7;
mySwap(&a,&b);
cout << a; // harapannya tertampil 7
cout << b; // harapannya tertampil 5
berangkat dari skenario di atas, tampak bahwa fungsi swap memiliki dua buah parameter pointer dengan tipe int. Untuk itu bentuk fungsi kita kira-kira seperti berikut:
void mySwap (int* x, int* y)
{
//body dari swap
…
}
pada kasus ini kita tidak membutuhkan nilai kembalian sehingga tipe data dari return value dibuat void. Kenapa tidak butuh ? Silahkan melihat lagi skenario yang kita buat di atas.
Karena fungsi kita hendak menukarkan nilai x dan nilai y (ingat x dan y adalah pointer, sehingga kita butuh tanda * untuk mengubah nilai), maka kita membutuhkan sebuah penampung (variabel
tambahan) untuk melakukan proses penukaran ini.
Buf = *x;// buf bernilai x
*x = *y; // x bernilai y
*y = buf;// y bernilai x
pada contoh diatas, penampung yang kita pakai adalah Buf. Karena Buf dipakai untuk menampung nilai bertipe int, maka Buf juga harus dideklarasikan bertipe int.
int Buf;
Dengan demikian bentuk fungsi kita selengkapnya, kira-kira seperti berikut:
void swap (int* x, int* y)
{
//body dari swap
int Buf;
Buf = *x;
*x = *y;
*y = Buf;
}
Pemanggilan fungsi dengan cara mengirimkan alamat dari variabel, dikenal dengan istilah passing parameter by reference.
Di dalam bahasa C++, diperkenalkan teknik baru untuk pengiriman parameter berupa reference dengan menggunakan tanda ‘&’. Dengan menggunakan teknik ini, cara pemanggilan fungsi swap bisa
diskenariokan sebagai berikut:
int a = 5;
int b= 7;
swap(a,b); // perhatikan tanda & dihilangkan
cout << a;
cout << b;
Perubahan juga perlu dilakukan pada fungsi kita sebagai berikut:
void swap (int& x, int& y) //perhatikan tanda &
{
//body dari swap
int Buf;
Buf = x;// tanda * juga dihilangkan
x = y;
y = Buf;
}
Download Article & Source Code
Membangkitkan Bilangan Acak
Terdapat dua fungsi yang dibutuhkan untuk membangkitkan bilangan acak srand() dan rand(). Fungsi srand() dibutuhkan untuk menentukan “bibit” dari bilangan acak yang akan dibangkitkan. Sama seperti
kalau kita menanam tumbuhan, bibit yang berbeda tentu akan menghasilkan tambuhan dewasa yang berbeda pula. Sedangkan fungsi rand() digunakan untuk menampilkan bilangan acak yang dihasilkan
dari “bibit” yang diberikan ke fungsi srand().
Bentuk umum dari fungsi srand() adalah:
view plainprint?
1. srand(bibit);
view plainprint?
1. srand(bibit);
Sebagai Contoh:
view plainprint?
1. srand(4);
view plainprint?
1. srand(4);
Bentuk umum dari fungsi rand() adalah:
view plainprint?
1. rand() % n;
view plainprint?
1. rand() % n;
Bilangan acak yang dihasilkan oleh fungsi rand() adalah dari 0 s/d (n-1).
Sebagai contoh:
view plainprint?
1. rand() % 10;
view plainprint?
1. rand() % 10;
Perintah di atas akan menghasilkan bilangan antara 0 s/d 9.
Seperti yang sudah dijelaskan sebelumnya, jika kita menggunakan “bibit” yang sama maka hasil yang diperoleh dari bibit ini pastilah sama. Untuk membuktikan, cobalah menjalankan program berikut
berkali-kali dan perhatikan tampilan dilayar:
view plainprint?
1. #include<iostream>
2. using namespace std;
3.
4. int main()
5. {
6. srand(5);
7. int data = rand() % 10;
8. cout << data << endl;
9. cin.get();
10. }
view plainprint?
1. #include<iostream>
2. using namespace std;
3.
4. int main()
5. {
6. srand(5);
7. int data = rand() % 10;
8. cout << data << endl;
9. cin.get();
10. }
Agar bisa membangkitkan bilangan yang benar-benar acak, kita harus memberikan “bibit” yang berbeda-beda pula kepada fungsi srand(). Salah satu cara yang bisa dilakukan adalah memberikan “bibit”
menggunakan fungsi time(), seperti berikut:
view plainprint?
1. srand(time(NULL));
view plainprint?
1. srand(time(NULL));
Sekarang, cobalah jalankan program berikut beberapa kali, dan perhatikan keluaran yang ditampilkan ke layar.
view plainprint?
1. #include<iostream>
2. using namespace std;
3.
4. int main()
5. {
6. srand(time(NULL));
7. int data = rand() % 10;
8. cout << data << endl;
9. cin.get();
10. }
view plainprint?
1. #include<iostream>
2. using namespace std;
3.
4. int main()
5. {
6. srand(time(NULL));
7. int data = rand() % 10;
8. cout << data << endl;
9. cin.get();
10. }
Fungsi rand() umumnya digunakan untuk membangkitkan bilangan acak yang bertipe bilangan bulat. Cobalah mencari solusi bagaimana membuat bilangan acak “pecahan” antara 0 dan 1 ?
Menampilkan Tabel ASCII
Perhatikan program berikut:
view plainprint?
1. #include <iostream>
2. using namespace std;
3.
4. int main()
5. {
6. int data = 48;
7. for(int i=0;i<=9;i++) {
8. cout << char(data+i) << ” “;
9. }
10. cout << endl;
11. }
view plainprint?
1. #include <iostream>
2. using namespace std;
3.
4. int main()
5. {
6. int data = 48;
7. for(int i=0;i<=9;i++) {
8. cout << char(data+i) << ” “;
9. }
10. cout << endl;
11. }
Program diatas akan menampilkan angka dari 0 s/d 9. Ide dibalik program sederhana di atas adalah menampilkan informasi yang bernilai desimal (48 s/d 57) dalam bentuk karakter ke layar.
Representasi desimal dalam bentuk karakter bisa dilihat pada tabel ASCII.
Program berikut akan menampilkan semua isi tabel ASCII.
view plainprint?
1. #include <iostream>
2. using namespace std;
3.
4. int main()
5. {
6. for(int i=0;i<=255;i++) {
7. cout << char(i) << ” “;
8. if(i%15==0) {
9. cout << endl;
10. }
11. }
12. cout << endl;
13. }
view plainprint?
1. #include <iostream>
2. using namespace std;
3.
4. int main()
5. {
6. for(int i=0;i<=255;i++) {
7. cout << char(i) << ” “;
8. if(i%15==0) {
9. cout << endl;
10. }
11. }
12. cout << endl;
13. }
Contoh Coding Stack Dengan Linked List
#include#include
/* membuat linked list */
typedef struct myLinkedList {
char nim[10];
char nama[35];
int nilai;
myLinkedList *next;
};
myLinkedList *head;
/* keadaan awal */
void init() {
head = NULL;
}
/* fungsi untuk mengecek linked list
* apakah kosong atau tidak
* jika kosong maka bernilai 1
* jika tidak kosong maka bernilai 0
*/
int paKosong() {
if (head == NULL) return 1;
else return 0;
}
/**
* fungsi untuk menambahkan data dari depan node
*/
void tambahDepan() {
myLinkedList *baru;
baru = new myLinkedList;
cout << “Masukkan Data lengkap di bawah ini : ” <<>> baru->nim;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
baru->next = head;
head = baru;
}
}
/**
* fungsu untuk menambahkan data dari depan node
*/
void tambahBelakang() {
myLinkedList *baru, *bantu;
baru = new myLinkedList;
cout << “Masukkan Data lengkap di bawah ini : ” <<>> baru->nim;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
bantu = head;
while (bantu->next != NULL) {
bantu = bantu->next;
}
bantu->next = baru;
}
}
/**
* fungsi untuk menghapus dari depan node
*/
void hapusDepan() {
myLinkedList *hapus;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
hapus = head;
data = hapus->nim;
head = head->next;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout <<>
/**
* fungsi untuk menghapus dari belakang node
*/
void hapusBelakang() {
myLinkedList *hapus, *bantu;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
bantu = head;
while(bantu->next->next != NULL) {
bantu = bantu->next;
}
hapus = bantu->next;
data = hapus->nim;
bantu->next = NULL;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout <<>
cout << “Tekan Enter untuk kembali ke Menu!”; getch(); }
/**
* fungsi untuk menampilkan data linked list
*/
void tampilData() {
int no = 1;
myLinkedList *bantu;
bantu = head;
if (paKosong() == 0) {
while (bantu != NULL) {
cout << “No. : ” <<>nim <<>nama <<>nilai <<>
no++;
bantu = bantu->next;
}
cout <<>
} else {
cout << “Data masih kosong ” <<>
/**
* fungsi Menu, Untuk menentukan linked list mana
* yang dipilih
*/
int menu() {
int pilihan;
cout << “+———————-+\n”; cout << “| MENU PILIHAN |\n”; cout << “+———————-+\n”; cout << “| 1. Tambah Depan |\n”; cout << “| 2. Tambah Belakang |\n”; cout << “| 3. Hapus Depan |\n”; cout << “| 4. Hapus Belakang |\n”; cout << “| 5. Tambah Tengah |\n”; cout << “| 6. Hapus Tengah |\n”; cout << “| 7. TampilData |\n”; cout << “| 8. Keluar |\n”; cout << “+———————-+\n”; cout << “| PILIHAN ANDA ? [ ] |\n”; cout << “+———————-+\n”;
cin >> pilihan;
return pilihan;
}
/**
* fungsi operasi data
*/
void operasiData() {
int pilih;
do {
pilih = menu();
switch (pilih) {
case 1 :
tambahDepan();
break;
case 2 :
tambahBelakang();
break;
case 3 :
hapusDepan();
break;
case 4 :
hapusBelakang();
break;
case 5 :
tampilData();
break;
case 6:
cout << “Terima kasih coy!!!”; break; } } while (pilih != 6); }
// ROGRAM UTAMA
void main() {
init();
operasiData();
}