Upload
satrya-pusaka
View
58
Download
1
Embed Size (px)
DESCRIPTION
teknik informatika
Citation preview
BAB I
Pendahuluan
1.1 LATAR BELAKANG
C++ adalah suatu bahasa pemrograman yang sangat populer dan telah banyak
digunakan untuk melakukan pengembangan aplikasi di berbagai bidang , seperti :
telekomunikasi ,embedded,system,bisnis, hiburan, dalam bahasa C/C++, tanda ++
digunakan untuk menunjukkan suatu tingkat (+ 1) sehingga C ++ artinya c+1 atau dapat
diartikan sebagai bahasa peningkatan dari bahasa sebelumnya, yaitu bahasa C.
Bahasa C adalah bahasa computer yang semakin popular. Dikembangkan oleh
Dennis Richie dan Ken Thompson pada tahun 1972. c merupakan perbaikan atas bahasa
B yang disusun oleh Ken Thmpson pada tahun 1970. c itu sendiri baru mulai dikenal uas
sejak 1978 setelah terbitnya buku The C Programming Language oleh Brian Kernighan
dan Dennis Richie. Sejak itu C semakin berkembang dan banyak diminati oleh
programmer hingga sekarang.
Ditengah semaraknya bisnis dibidang teknologi informasi, saat ini banyak sekali
bermunculan bahasa pemrograman baru dan development toll yang dikembangkan dan
ditawarkan untuk memudahkan kita dalam pembuatan aplikasi / program . meskipun
demikian berdasarkan survey yang dilakukan oleh suatu badan diluar negeri pada akhir
2004 menyatakan bahwa beberapa bahasa pemrograman yang berada dijajaran atas dan
banyak sekali digunakan adalah java, C ++ , C, C#,php,dan delphi. Memang bagi
sebagian besar progremer pemula, tentu hal ini akan menjadi keadaan yang dilematis .
namun, dengan beberapa alasan yang kuat ternyata banyak progremer profesional
menjatuhkan pilihannya poada c++.
Page | 1
Abstrak – Perkembangan teknologi saat ini amatlah sangat cepat. Maka kebutuhan
akan barang elektronik seiring naik dengan perkembangan teknoologi tersebut. Untuk itu
manusia perlu menciptakan alat untuk membantunya dalam melakukan tugas – tugas
yang membebaninya. Dengan alat elektronik tersebut, manusia kan terbantu sedikit
meringankan beban pekerjaannya. Bkan hanya dalam perangkat keras saja tapi juga
perangkat lunaknya. Manusia akan sangat perlu suatu printah –perintah yang dapat
menghubungkan keinginanya dengan computer ataupun mesin sekalipun. Perintah
perintah itu diterjemahkan dalam bahasa – bahasa yang dimengerti mesin. Bahasa
manusia merupakan bahasa tingkat tinggi yang tidak dimengerti oleh mesin, sedangkan
bahasa yang dimengerti mesin adalah bahasa tingkat renddah yaitu bahasa assemble.
Salah satu bahasa mesin adalah bahasa C.
Saat ini, C++ telah mengalami evolusi melalui proses standarisasi yang dilakukan
oleh ANSI (american national standards intenational), ISO (international standard
organization), yaitu dengan menambahkan fitur-fitur baru yang belum didukung oleh C+
+ klasik (original).
1.2 Kelebihan dan kekurangan bahasa pemrograman C++
C++ itu pada dasarnya bahasa C juga, kemampuan C yang utama itu adalah seperti :
Kode bahasa C++ dengan portabilitas dan fleksibilitas yang tinggi untuk semua
jenis komputer.
bahasa Standard-nya ANSI bisa dipakai diberbagai platform.
kecepatan program jika dibanding dengan program yang sama buatan bahasa lain,
relatif lebih cepat.
Bahasa C++ tersedia hampir di semua jenis komputer.
Page | 2
Bahasa C++ hanya menyediakan sedikit kata-kata kunci (hanya terdapat 48 kata
kunci).
Dukungan pustaka fungsi dan kelas yang banyak sehingga memungkinkan
pembuatan aplikasi makro.
C++ adalah bahasa yang terstruktur, dengan demikian akan lebih mendukung OOP.
Bahasa C++ termasuk bahasa tingkat menengah dan lebih dekat dengan bahasa
mesin.
Kode program bersifat reuseable, sehingga dapat digunakan kembali pada project
lain dengan hanya menggunakan library dan file header.
C++ dapat membuat aplikasi graphic processor berkualitas tinggi.
Jika dibandingkan dengan VB atau Delphi C++ memang tidak se-RAD dua bahasa
tersebut , dan cenderung lebih rumit. Namun
dari perbandingan tersebut, sudah jelas pasti ada trade-off, seperti kecepatan, efisiensi
kode, pengstrukturan kode.
Tidak hanya kelebihan-kelebihan yang dimiliki oleh C++, tetapi juga memiki kekurangan
seperti:
C++ tidak murni OOP sehingga kurang cocok untuk mengajarkan Konsep OOP
karena kaidah-kaidah OOP dapat dilanggar. Dan
di C++ ada konsep pointer yang sangat membingunkan, ini salah satu alasan
mengapa C++ menjadi momok yg paling tidak disukai.
C++ walapun tidak terpengaruh oleh Sistem Operasi tetapi tool untuk
developmentnya harus spesific pada salah satu
sistem operasi contoh Visual Studio hanya dapat berjalan di Windows. Alasan ini
juga nantinya akan dapat menurunkan minat terhadap sistem operasi yang lain
contohnya Linux. Apabila dalam praktiknya menggunakan Visual Studio maka
otomatis akan menggunakannya juga dan pada akhirnya malas untuk mencoba
sistem operasi yang lain.
Page | 3
Implementasi C++ dalam teknologi IT pada saat sekarang sudah sangat sedikit
sekali.
“susah” untuk membuat sesuatu dengan C++ sehingga kepeminatannya dalam
memperdalam Programming akhirnya harus kandas.
kecuali dengan inisitif sendiri mempelajari bahasa/teknologi lain.
Page | 4
BAB II
Pembahasan
2.1 Pengenalan Model Data, Perintah Masukan dan Keluaran
Pada C++ terdapat 2 jenis I/O dasar, yaitu:
a. Cout (Character In) : standart masukkan
b. Cout (Character Out) : standart kekuaran
Pengenalan Tipe Data
Borland C++ memiliki 7 tipe data dasar
Tabel 2.1. Tipe Data
Tipe
Data
Ukuran
Memori Jangkauan Nilai
Jumlah
Digit
Char 1 Byte -128 s.d 127
Int 2 Byte -32768 s.d 32767
Page | 5
Short 2 Byte -32768 s.d 32767
Long 4 Byte -2,147,435,648 s.d 2,147,435,647
Float 4 Byte 3.4 x 10-38 s.d 3.4 x 10+38 5 – 7
Double 8 Byte 1.7 x 10-308 s.d 1.7 x 10+308 15 – 16
Long
Double 10 Byte 3.4 x 10-4932 s.d 1.1 x 10+4932 19
Tipe Data Tambahan
Unsigned digunakan bila data yang digunakan hanya data yang positif saja.
Tabel 2.2. Tipe Data Tambahan
Tipe
Data
Jumlah
Memori Jangkauan Nilai
Unsigned Integer 2 Byte 0 – 65535
Unsigned Character 1 Byte 0 – 255
Unsigned Long Integer 4 Byte 0 – 4,294,967,295
Page | 6
Konstanta
Konstanta adalah suatu nilai yang sifatnya tetap. Secara garis besar konstanta
dapat dibagi menjadi dua bagian, yaitu
Konstanta Bilangan
Konstanta Teks
Konstanta Bilangan
Dalam hal ini konstanta bilangan dibagi menjadi tiga kelompok, antara lain;
1. Konstanta Bilangan Bulat (Integer).
Adalah bilangan yang tidak mengandung nilai desimal.
Contoh : 1, 2, 3, 100
2. Konstanta Desimal Berpresisi Tunggal ( Floating Point )
Konstanta Floating Point, mempunyai bentuk penulisan, yaitu :
Bentuk Desimal ( contoh : 5.57 )
Bentuk Eksponensial / Bilangan Berpangkat ( contoh : 4.22e3 à 4.22 x
103 )
3. Konstanta Desimal Berpresisi Ganda ( Double Precision )
Konstanta Double Precision, pada prinsipnya sama seperti Konstanta Floating
Point, tetapi Konstanta Double Precision mempunyai daya tampung data lebih
besar.
Page | 7
Konstanta Teks
Dalam hal ini konstanta teks dibagi menjadi dua kelompok, antara lain;
1. Data Karakter (Character).
Data karakter hanya terdiri dari sebuah karakter saja yang diapit oleh tanda kutip
tunggal ( ‘ ). Data karakter dapat berbentuk abjad ( huruf besar atau kecil ),
angka, notasi atau simbol.
Contoh : ‘Y’ ‘y’ ‘9’ ‘&’ dan lain-lain.
2. Data Teks (String).
Data String merupakan rangkaian dari beberapa karakter yang diapit oleh tanda
kutip ganda ( “ ).
Contoh : “Virusland”, “Jakarta”, “AMIK BSI”, “Y” dan lain-lain.
Deklarasi Konstanta
Bentuk deklarasi konstanta diawali dengan reserved word const.
Bentuk penulisannya :
Contoh const x = 89;
Page | 8
const nama-konstanta = nilai konstanta;
Variabel
Adalah suatu tempat menampung data atau konstanta dimemori yang mempunyai
nilai atau data yang dapat berubah-ubah selama proses program.
Dalam pemberian nama variabel, mempunyai ketentuan-ketentuan antara lain ;
Tidak boleh ada spasi ( contoh : gaji bersih ) dan dapat menggunakan tanda garis
bawah ( _ ) sebagai penghubung (contoh : gaji_bersih).
Tidak boleh diawali oleh angka dan menggunakan operator aritmatika.
variabel, dibagi menjadi dua jenis kelompok, yaitu :
1. a. Variabel Numerik
2. b. Variabel Teks
Variabel Numerik
Variabel numerik ini dibagi menjadi menjadi 3 (tiga) macam :
Bilangan Bulat atau Integer
Bilangan Desimal Berpresisi Tunggal atau Floating Point.
Bilangan Desimal Berpresisi Ganda atau Double Precision.
Variabel Text
Character ( Karakter Tunggal )
o String ( Untuk Rangkaian Karakter )
Page | 9
Deklarasi Variabel
Adalah proses memperkenalkan variabel kepada Borland C++ dan pendeklarasian
tersebut bersifat mutlak karena jika tidak diperkenalkan terlebih dulu maka Borland C++
tidak menerima variabel tersebut.
Deklarasi Variabel ini meliputi tipe variabel, seperti : integer atau character dan nama
variabel itu sendiri. Setiap kali pendeklarasian variabel harus diakhiri oleh tanda titik
koma ( ; ).
Tabel 2.3. Deklarasi Variabel
TIPE VARIABEL SIMBOL DEKLARASI
Integer int
Floating Point float
Double Precision double
Karakter char
Unsigned Integer unsigned int
Unsigned Character unsigned char
Long Integer long int
Unsigned Long Integer unsigned long int
Bentuk penulisannya :
Page | 10
Contoh Deklarasi int nama_mahasiswa;
char grade;
float rata_rata ;
int nilai;
Page | 11
Tipe data nama variabel;
BAB II
2.1 Pengenalan model perintah Masukan dan Keluaran
1. Perintah Masukan
Perintah standar input yang disediakan oleh Borland C++, diantaranya adalah :
scanf()
gets()
cout()
getch
getche()
a. scanf()
Fungsi scanf() digunakan untuk memasukkan berbagai jenis data.
Bentuk Umum dari fungsi ini adalah :
Page | 12
scanf(“penentu format”, &nama-
variabel);
Keterangan simbol & merupakan pointer yang digunakan untuk
menunjuk kealamat variabel memori yang dituju.
Tabel 2.7. Penentu Format scanf()
TIPE DATA Penentu Format Untuk scanf()
Integer%d
Floating Point
Bentuk Desimal%e atau %f
Bentuk Berpangkat%e atau %f
Double Precision%lf
Character%c
String%s
Unsigned Integer%u
Long Integer%ld
Long Unsigned Integer %lu
Page | 13
Unsigned Hexadecimal Integer%x
Unsigned Octal Integer%o
Contoh-11
# include <stdio.h>
# include <conio.h>
main()
{
int a, b, c = 0 ;
clrscr();
printf(“Masukan Nilai A = “); scanf(“%d”,&a);
printf(“Masukan Nilai B = “); scanf(“%d”,&b);
c = a + b;
printf(“Hasil Penjumlahan = %d”,c);
}
b. gets()
Page | 14
Fungsi gets() digunakan untuk memasukkan data string. Bentuk
Umum dari fungsi ini adalah :
Perbedaan antara scanf() dengan gets() adalah :
Tabel 2.8. Perbedaan scanf() dengan gets()
scanf() gets()
Tidak dapat menerima string yang
mengandung spasi atau tab dan dianggap
sebagai data terpisah
Dapat menerima string yang
mengandung spasi atau tab dan masing
dianggap sebagai satu kesatuan data.
Contoh-12
# include <stdio.h>
# include <conio.h>
main()
{
char nm1[20];
char nm2[20];
clrscr();
puts(“Masukan nama ke – 1 = “);
gets(nm1);
Page | 15
gets(nama-variabel-array);
printf(“Masukan nama ke – 2 = “);
scanf(“%s”,&nm2);
printf(“\n\n”);
puts(“Senang Berkenalan Dengan Anda ..”);
puts(nm1);
printf(“Senang Berkenalan Dangan Anda ..%s”, nm1);
puts(“Senang Berkenalan Dangan Anda ..”);
puts(nm1);
printf(“\n\n”);
puts(“Senang Berkenalan Dangan Anda ..”);
puts(nm2);
printf(“Senang Berkenalan Dangan Anda ..%s”, nm2);
}
c. cout ()
Fungsi cin() merupakan sebuah objeck didalam C++ digunakan
untuk memasukkan suatu data. Untuk menggunakan fungsi cin() ini, harus
menyertakan file header iostream.h .
Contoh-13
# include <stdio.h>
Page | 16
# include <conio.h>
# include <iostream.h>
main()
{
float a, b, c;
clrscr();
cout<<”Masukan Nilai A : “;
cin>>a;
cout<<”Masukan Nilai B : “;
cin>>b;
c = a + b;
cout<<”Masukan Nilai C : “<<c<<endl;
}
d. getch ()
Fungsi getch() (get character and echo) dipakai untuk membaca
sebuah karakter dengan sifat karakter yang dimasukkan tidak perlu
diakhiri dengan menekan tombol ENTER, dan karakter yang dimasukan
Page | 17
tidak akan ditampilkan di layar. File header yang harus disertakan
adalah conio.h.
Contoh-14
# include <stdio.h>
# include <conio.h>
main()
{
char kar;
clrscr();
printf(“Masukan Sebuah Karakter Bebas = “);
kar = getch();
printf(“\nTadi Anda Memasukan karakter %c”, kar);
getch();
}
e. getche()
Fungsi getche()dipakai untuk membaca sebuah karakter dengan
sifat karakter yang dimasukkan tidak perlu diakhiri dengan menekan
tombol ENTER, dan karakter yang dimasukan ditampilkan di layar. File
header yang harus disertakan adalah conio.h.
Contoh-15
# include <stdio.h>
Page | 18
# include <conio.h>
main()
{
char kar;
clrscr();
printf(“Masukan Sebuah Karakter Bebas = “);
kar = getche();
printf(“\nTadi Anda Memasukan karakter %c”, kar);
getch ();
}
Selain itu kedua fungsi ini dapat digunakan untuk menahan agar
tidak langsung balik kembali kedalam listing program dan hasil dari
program yang di eksekusi dapat dilihat tanpa menekan tombol ALT – F5.
Karena fungsigetch() merupakan fungsi masukkan, jadi sebelum program
keluar harus menginputkan satu buah karakter.
2. Perintah Keluaran
Perintah standar output yang disediakan oleh Borland C++, diantaranya adalah :
printf()
puts()
putchar()
Page | 19
cout()
a. printf()
Fungsi printf() merupakan fungsi keluaran yang paling umum
digunakan untuk menampilkan informasi kelayar.
printf(“string-kontrol“, argumen-1, argumen-2, …);
Bentuk Penulisan
String-Kontrol dapat berupa keterangan yang akan ditampilkan pada layar
beserta penentu format. Penentu format dipakai untuk memberi tahu
kompiler mengenai jenis data yang dipakai dan akan ditampilkan.
Argumen ini dapat berupa variabel, konstanta dan ungkapan.
Tabel 2.4. Penentu Format Printf()
TIPE DATA
Penentu Format
Untuk printf()
Integer%d
Floating Point
Bentuk Desimal%f
Bentuk Berpangkat%e
Bentuk Desimal dan Pangkat %g
Page | 20
Double Precision%lf
Character%c
String%s
Unsigned Integer%u
Long Integer%ld
Long Unsigned Integer%lu
Unsigned Hexadecimal Integer%x
Unsigned Octal Integer%o
Contoh-1
#include <stdio.h>
#include <conio.h>
main()
{
Page | 21
int a = 7;
char b = ‘G’;
clrscr();
printf(“%c Merupakan Abjad Yang Ke – %d”, b, a);
}
Penggunaan Penentu Lebar Field
Bila ingin mencetak atau menampilkan data yang bertipe data FLOAT
atau pecahan, tampilan yang tampak biasanya kurang bagus. Hal tersebut
dapat diatur lebar field-nya dan jumlah desimal yang ingin dicetak.
Contoh-2
#include <stdio.h>
#include <conio.h>
main()
{
float a = 7.50, b = 243.21;
clrscr();
printf(“Bilangan A = %f \n”, a);
Page | 22
printf(“Bilangan B = %f”, b);
}
Output yang akan dihasilkan, jika tidak menggunakan panentu lebar field
adalah
Bilangan A = 7.500000
Bilangan B = 243.210007
Contoh-3
#include <stdio.h>
#include <conio.h>
main()
{
float a = 7.50, b = 243.21;
clrscr();
printf(“Bilangan A = %4.1f \n”, a);
printf(“Bilangan B = %4.1f”, b);
Page | 23
}
Output yang akan dihasilkan, jika menggunakan panentu lebar field adalah
Bilangan A = 7.5
Bilangan B = 243.2
Penggunaan Escape Sequences.
Escape Sequences menggunakan notasi “ \ ” ( back slash ) jika karakter
terdapat notasi “\” ini sebagai karakter “escape” ( menghindar).
Beberapa Escape Sequences lainnya antara lain :
Tabel 2.5. Escape Sequences
ESCAPE SEQUENCES PENGERTIAN
\bBackspace
\fFormfeed
\nBaris Baru
\rCarriage Return
\tTab ( default = 8 karakter )
Page | 24
\’Tanda kutip tunggal ( ‘ )
\”Tanda Kutip Ganda ( ” )
\\Backslash
\xaa
Kode ASCII dalam hexadecimal.
( aa menunjukkan angka ASCII ybs )
\aaa Kode ASCII dalam octal. (aaa menunjukkan
angka ASCII ybs )
Contoh-3
#include <stdio.h>
#include <conio.h>
main()
{
float a = 7.50, b = 43.21, c = 3.21;
float d = 17.50, e = 47.41, f = 3.1;
clrscr();
printf(“%8.2f\t %8.2f\t %8.2f “, a, b, c);
printf(“\n%8.2f\t%8.2f\t%8.2f “, d, e, f);Page | 25
b. puts()
Perintah puts() sebenarnya sama dengan printf(), yaitu digunakan
untuk mencetak string ke layar. puts()berasal dari kata PUT STRING
Perbedaan antara printf() dengan puts() adalah :
Tabel 2.6. Perbedaan fungsi puts() dengan printf()
printf() puts()
Harus menentukan tipe data untuk
data string, yaitu %s
Tidak Perlu penentu tipe data
string, karena fungsi ini
khusus untuk tipe data
string.
Untuk mencetak pindah baris,
memerlukan notasi ‘ \n ‘
Untuk mencetak pindah baris
tidak perlu notasi ‘ \n ‘ ,
karena sudah dibeikan
secara otomatis.
Contoh-4
#include <stdio.h>
#include <conio.h>
main()
{
Page | 26
char a[4] = “BSI”;
clrscr();
puts(“Saya Kuliah di. “);
puts(a);
}
c. putchar()
Perintah putchar() digunakan untuk menampilkan sebuah karakter
ke layar. Penampilan karakter tidak diakhiri dengan pindah baris.
Contoh-5
#include <stdio.h>
#include <conio.h>
main()
{
clrscr();
putchar(‘B’);
putchar(‘S’);
putchar(‘I’);
}
Page | 27
d. cout()
Fungsi cout() merupakan sebuah objeck didalam Borland C++
digunakan untuk menampilkan suatu data kelayar. Untuk menggunakan
fungsi cout() ini, harus menyertakan file header iostream.h .
Contoh-6
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
main()
{
float a, b, c;
a=7.5; b=8.4; c=0
clrscr();
cout<<”Masukan Nilai A : “<<a;
cout<<”Masukan Nilai B : “<<b;
c = a + b;
cout<<”Masukan Nilai C : “<<c;
getch();
Page | 28
}
Fungsi Manipulator
Manipulator pada umumnya digunakan untuk mengatur tampilan layar,
untuk mengguakan manipulator ini file header yang harus disertakan file
header iomanip.h . Ada beberapa fungsi manipulator yang disediakan oleh
Borland C++, antara lain.
endl
end
flush()
dec()
hex()
oct()
setbase()
setw()
setfill()
setprecision()
setosflags()
Berikut akan dibahas beberapa fungsi manipulator, diantaranya :
a. endl
Endl merupakan suatu fungsi manipulator yang digunakan untuk
menyisipkan karakter NewLine atau mengatur pindah baris. Fungsi ini
sangat berguna untuk piranti keluaran berupa file di disk. File header
yang harus disertakan adalah file header iostream.h .
Contoh-7
# include <stdio.h>
# include <conio.h>
# include <iostream.h>
main()
{
Page | 29
float a, b, c;
a=7.5; b=8.4; c=0
clrscr();
cout<<”Masukan Nilai A : “<<a<<endl;
cout<<”Masukan Nilai B : “<<b<<endl;
c = a + b;
cout<<”Masukan Nilai C : “<<c<<endl;
getch();
}
b. ends
Ends merupakan suatu fungsi manipulator yang digunakan untuk
menambah karakter null ( nilai ASCII NOL ) kederetan suatu karakter.
Fungsi ini akan berguna untuk mengirim sejumlah karakter kefile
didisk atau modem dan mangakhirinya dengan karakter NULL.. File
header yang harus disertakan adalah file header iostream.h .
Contoh-8
# include <stdio.h>
# include <conio.h>
# include <iostream.h>
main()
{
Page | 30
int a, b, c, d;
clrscr();
cout<<”Masukan Nilai A : “; cin>>a;
cout<<”Masukan Nilai B : “; cin>>b;
c = a % b;
d = a * b;
cout<<”Hasil dari C = A % B adalah “<<c<<ends;
cout<<”Hasil dari D = A * B adalah “<<d<<ends;
getch();
}
c. dec, oct dan hex
Dec, oct dan hex merupakan suatu fungsi manipulator yang digunakan
untuk menampilkan data dalam bentuk desimal, oktal dan hexadesimal.
File header yang harus disertakan adalah file header iomanip.h .
Contoh-9
# include <stdio.h>
# include <conio.h>
# include <iostream.h>
# include <iomanip.h>
void main()
Page | 31
{
int nilai = 10;
clrscr();
cout<<”Nilai = “<<nilai<<endl;
cout<<”Nilai ke Octal = “<<oct<<nilai<<endl;
cout<<”Nilai ke Hexadesimal = “<<hex<<nilai<<endl;
cout<<”Nilai ke Desimal = “<<dec<<nilai<<endl;
getch();
}
d. setprecision ()
Fungsi setprecision() merupakan suatu fungsi manipulator yang
digunakan untuk mengatur jumlah digit desimal yang ingin
ditampilkan. Fungsi ini biasa pada fungsi cout(), file header yang harus
disertakan adalah file header iomanip.h .
Contoh-10
# include <stdio.h>
# include <conio.h>
# include <iostream.h>
# include <iomanip.h>
void main()
Page | 32
{
float a, b, c;
a = 25.77;
b = 23.45;
clrscr();
c = a * b;
cout<<setiosflags(ios::fixed);
cout<<setprecision(1)<<c<<endl;
cout<<setprecision(2)<<c<<endl;
cout<<setprecision(3)<<c<<endl;
cout<<setprecision(4)<<c<<endl;
cout<<setprecision(5)<<c<<endl;
getch();
Page | 33
2.2 Kondisi Pada C++
Kondisi digunakan untuk mengambl keputusan berdasarkan suatu kondisi yg
mMnuhi syarat yg telah ditentukan dlm suatu program jika suatu nilai memenuhi kondisi
maka nilai bernilai benar jika tidak maka bernilai salah.
Penyeleksian kondisi dapat digunakan untuk mengambil keputusan berdasarkan
suatu kondisi yang memenuhi syarat yang telah ditentukan dalam suatu program jika
suatu nilai memenuhi kondisi maka nilai bernilai benar jika tidak maka nilai bernilai
salah. Untuk menguji setiap kondisi diperlukan pembanding yang biasa sama satu sama
lain, lebih besar, lebih kecil, atau tidak sama dengan yang lainnya. Untuk mengujinya
dibutuhkan operator yang dapat menyatakan kondisi tersebut.
Pernyataan kondisi “if…..”
Kondisi if digunakan untuk menyeleksi suatu kondisi tunggal. Bila proses yang
diseleksi terpenuhi atau bernilai benar, maka pernyataan yang ada di dalam blok if akan
diproses dan dikerjakan. Bentuk umum struktur kondisi if adalah:
if (kondisi)…..
Contoh program 1 :
Kondisi If Tunggal
/*contoh program kondisi if untuk memeriksa suatu kondisi*/
#include
Page | 34
#include
void main()
{
float nilai;
cout <> nilai;
if ( nilai >= 65 )
cout << “ Selamat ANDA LULUS !!!! ujian \n ”; getch(); }
Pernyataan kondisi “if……….Else………” Dalam structure kondisi if……..else
digunkan jika kondisi yang diperiksa bernilai benar atau terpenuhi maka pernyataan
pertama yang dilaksanakan dan jika kondisi yang diperiksa bernilai salah maka
pernyataan yang kedua yang dilaksanakan. Bentuk umunya adalah sebagai berikut:
Contoh program :
#include #include void main( ) { float nilai; clrscr ( ); cout <> nilai;
if ( nilai > 65 )
cout << “ Selamat Anda LULUS !!!! ujian \n ”;
else
cout( “ Anda TIDAK LULUS !!!! ujian \n ”;
getch();
}
Bentuk If Tersarang (Nested If)
Dalam berbagai persoalan, seringkali suatu bentuk seleksi bertingkat diperlukan. Bentuk
seperti ini dinamakan Nested If.
Nested If berarti dalam satu blok statemet if terdapat statement If yang lain.Pernyataan If
tersaarang menyebabkan eksekusi sebuah pernyataan dikondisikan pada dua atau
Page | 35
beberapa klausa bersyarat, dimana kebeadaan blok If yang lebih dalam ditentukan oleh
blok If di luarnya.
Bentuk If Tersarang (Nested If)
Bentuk struktur penulisan If tersarang :
if (ekspresi pengujian 1)
{
if (ekspresi pengujian 2)
{
Pernyatan yang akan dieksekusi jika ekspresi 1 dan ekspresi 2 bernilai logika benar
}
}
Structur kondisi “switch… case…default…”
Struktur kondisi switch…case…default digunakan untuk penyeleksian kondisi dengan
kemungkinan yang terjadi cukup banyak. Struktur ini akan melaksanakan salah satu dari
beberapa pernyataan ‘case’ tergantung nilai kondisi yang ada di dalam switch.
Selanjutnya prose diteruskan hingga ditemukan pernyataan ‘break’. Jika tidak ada nilai
pada case yang sesuai dengan nilai kondisi, maka proses akan diteruskan kepada
pernyataan yang ada dibawah ‘default’.
Bentuk umum dari structure kondisi ini adalah:
switch(kondisi)
{
Page | 36
case 1 : pernyataan-1;
break;
case2 : pernyataan-2;
break;
….
….
case n : pernyataan-n;
break;
default : pernyataan-m
}
Page | 37
2.3 Perulangan Dalam Bahasa C++
Perulangan adalah suatu atau serangkaian bentuk kegiatan mengulang suatu
statement sampai batas yang diinginkan.
Macam-Macam Perulangan dan bentuk umumnya ada 3 yaitu:
Perulangan FOR
Digunakan untuk mengulang suatu proses yang telah diketahui jumlah perulangannya.
Bentuk umumnya:
for( awal ; kondisi ; counter )
{
Statementl;
Statement2;
}
Statement3;
Perulangan WHILE
Digunakan bila jumlah perulangannya belum diketahui.
Bentuk umumnya:
while( expression )
Page | 38
{
Statementl;
Statement2;
}
Statement3;
Perulangan DO WHILE
Perulangan DO WHILE dan WHILE hampir sama, perbedaannya dengan while, do ...
while memiliki pengecekan kondisi yang terletak setelah statement perulangan.
Bentuk umumnya:
do
{
Statementl;
Statement2;
}
while( expression )
Statement3;
Page | 39
2.4 ARRAY
Variabel Larik atau lebih dikenal dengan ARRAY adalah adalah Tipe terstruktur
yang terdiri dari sejumlah komponenkomponen yang mempunyai tipe yang sama. Suatu
Array mempunyai jumlah komponen yang banyaknya tetap. Banyaknya komponen dalam
suatu larik ditunjukan oleh suatu indek untuk membedakan variabel yang satu dengan
variabel yang lainnya. Variabel array dalam C++, dapat digolongkan menjadi tiga buah
dimensi :
1. Array Berdimensi Satu.
2. Array Berdimensi Dua
3. Array Berdimensi Tiga.
1. Array Berdimensi Satu
Cara mendeklarasikan variabel array sama seperti deklarasi variabel yang lainnya,
hanya saja diikuti oleh suatu indek yang menunjukan jumlah maksimum data
yang disediakan.
Bentuk umum pendeklarasian array :
Tipe-Data Nama_Variabel[Ukuran]
Keterangan :
Type Data : Untuk menyatakan type datayang digunakan.Page | 40
Ukuran : Untuk menyatakan jumlah maksimum elemen array.
Contoh Pendeklarasian Array
float Nil_Akhir[6];
float è type data, Nil_Akhir è elemen array, [6] èJumlah elemen Array
Suatu array dapat digambarkan sebagai kotak panjang yang berisi kotak-kotak
kecil didalam kotak panjang tersebut.
Subscript atau Index array pada C++, selalu dimulai dari Nol ( 0 )
Bentuk umum pengaksesan dengan bentuk :
Nama_Array[Subscript/Index]
Contoh :
Nil_Akhir[3];
Nil_Akhir[1];
Nil_Akhir[0];
Inisialisasi Array Dimensi Satu
Inisialisasi adalah memberikan nilai awal terhadap suatu variabel. Bentuk
pendefinisian suatu array dapat dilihat dari contoh berikut :
Tipe_data nama_array[jml_elemen] = { nilai array };
Contoah Program :
/* —————————- */
/* Program Array Satu Dimensi */
/* —————————- */
Page | 41
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
#include<iomanip.h>
main()
{
int i;
char nama[5][20];
float nilai1[5];
float nilai2[5];
float hasil[5];
clrscr();
for(i=1;i<=2;i++)
{
cout<<”Data Ke – “<<i<<endl;
cout<<”Nama Siswa : “;
gets(nama[i]);
cout<<”Nilai Teori : “;
cin>>nilai1[i];
Page | 42
cout<<”Nilai Praktek : “;
cin>>nilai2[i];
hasil[i] = (nilai1[i] * 0.40)+
(nilai2[i] * 0.60);
cout<<endl;
}
cout<<”——————————————”;
cout<<”——-”<<endl;
cout<<”No. Nama Siswa Nilai Nilai “;
cout<<”Hasil”<<endl;
cout<<” Mid Tes FInal “;
cout<<”Ujian”<<endl;
cout<<”——————————————”;
cout<<”——-”<<endl;
for(i=1;i<=2;i++)
{
cout<<setiosflags(ios::left)<<setw(4)<<i;
cout<<setiosflags(ios::left)<<setw(20)<<nama[i];
cout<<setprecision(2)<<” “<<nilai1[i];
Page | 43
cout<<setprecision(2)<<” “<<nilai2[i];
cout<<setprecision(2)<<” “<<hasil[i]<<endl;
}
cout<<”————————-
—————–”;
cout<<”——-”<<endl;
getch();
}
2. Array Berdimensi Dua
Array dimensi dua tersusun dalam bentuk baris dan kolom, dimana indeks
pertama menunjukan baris dan indeks kedua menunjukan kolom. Array dimensi
dua dapat digunakan seperti pendatan penjualan, pendataan nilai dan lain
sebagainya.
Bentuk Umum pendeklarasian array :
Tipe-Data Nama_Variabel[index-1][Index-2]
Keterangan :
Type Data : Untuk menyatakan type data yang digunakan.
Index-1 : Untuk menyatakan jumlah baris
Index-2 : Untuk menyatakan jumlah kolom
Inisialisasi Array Dimensi Dua
Page | 44
Inisialisasi adalah memberikan nilai awal terhadap suatu variabel. Bentuk
pendefinisian suatu array dapat dilihat dari contoh berikut :
Tipe_data nama_array[jml_elemen] = { nilai array };
Contoh Pendeklarasian Array
Sebagai contoh pendeklarasian yang akan kita gunakan adalah pengolahan data
penjualan, berikut dapat anda lihat pada tabel berikut :
Jenis
Barang
Tahun
2001 2002 2003
Printer 150 159 230
Keyboard 100 125 150
Monitor 210 125 156
Jika anda lihat dari tabel diatas maka dapat dituliskan kedalam array dimensi dua
berikut :
int data_jual[3][3];
Keterangan :
[3] Jumlah Kolom, [3] Jumlah Baris, data_jual : Nama Array, int : Tipe data
elemen array
Bentuk umum pengaksesan dengan bentuk :
Nama_Array[Index-1][Index-2]
Contoh Program :
/* —————- */
/* Array Dimensi 2 */
/* —————- */
#include<conio.h>Page | 45
#include<stdio.h>
#include<iostream.h>
#include<iomanip.h>
main()
{
int i, j;
int data_jual[4][4];
clrscr();
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
cout<<”Data Ke – “<<i<<” “<<j<<endl;
cout<<”Jumlah Penjulan : “;
cin>>data_jual[i][j];
}
}
cout<<”Data Penjualan Pertahun”<<endl;
cout<<”———————–”<<endl;
Page | 46
cout<<”NO 2001 2002 2003″<<endl;
cout<<”———————–”<<endl;
for(i=1;i<=3;i++)
{
cout<<setiosflags(ios::left)<<setw(5)<<i;
for(j=1;j<=3;j++)
{
cout<<setiosflags(ios::right)<<setw(4);
cout<<data_jual[i][j];
cout<<” “;
}
cout<<endl;
}
cout<<”———————–”<<endl;
getch();
}
Page | 47
3. Array Bredimensi 3"Array 3 dimensi" kedalam progam menampilkan daftar peserta klub eropa yang ikut berkompetisi dalam liga champions. Untuk bentuk umum array dimensi 3 pada bahasa C adalah sebagai berikut :tipe_data nama_variabel[jumlah_baris][jumlah_kolom][panjang_karakter];
Langsung saja ke pengimplementasiannya ke dalam kode program bahasa C. Lihat pada tabel kode program di bawah ini. :)
1234567891011121314151617181920212223242526
/**Judul Program : Array dimensi 3*Bahasa Program : Bahasa C*Pembuat Program : Hendro Pramana Sinaga*Tanggal Pembuatan : 5 Mei 2012*/
#include <stdio.h>#include <conio.h>
main(){ char h=64, nama[5][4][22] = { "AC Milan","Barcelona","Porto","Monaco", "Liverpool","Real Madrid","CSK Moskow","PSG", "Inter Milan","Arsenal","Atletico Madrid","Ajax", "AS Roma","Manchester United","Dortmund","Valencia", "Manchester City","Bayern Munich","Napoli","Vilareal" };
printf("Liga Champions : \n\n");
for(i=0; i<5; i++) {
Page | 48
272829303132333435363738394041
++h; printf("Grup %c \n", h);
for(s=0; s<4; s++) { printf(" %d. %s \n", s+1, nama[i][s]); } printf("\n"); }
getch();
}
Jika contoh kode program di atas kita eksekusi, maka hasil yang ditampilkan seperti gambar di bawah ini
Page | 49
2.5 Structures
Pengertian Struktur pada C++
Pengetian Struktur pada C++ adalah koleksi variabel dibawah sebuah nama, Variabel-
variabel ini dapat berbentuk berbagai type, misalnya: int, float, char dan lain-lain.
Perbedaan utama antara struktur dan array adalah bahwa dalam array memiliki tipe data
yang sma, sedangkan struktueadalah sebuah koleksi dari variabel-variabel dibawah nama
yang sma, dimana setiap elemen dapat saja memiliki tipe yang berbeda.
Mendeklarasikan Struktur dalam C++
Struktur dalam C++ dideklarasikan menggunakan keyword struct diikuti dengan nama
struktur, atau sering disebut dengan tag. Variabel-variabel strukur dideklarasikan dalam
kurung kurawal { }, setiap elemennya dipisahkan dengan tanda titik koma atau semi
colon. Bentuk umum/sintaks deklarasi struktur :
struct nama_struct
{
anggota_struktur ;
} ;
Contoh pendeklarasian struktur untuk data tanggal yang terdiri dari 3 variabel, yaitu:
tahun, bulan, dan tanggal yang kebetulan memiliki tipe sama.
1 struct data_tanggal
2 {
3 int tahun;4 int bulan;5 int tanggal;
Page | 50
6 };
Struktur merupakan kumpulan berbagai tipe data yang memiliki ukuran yang berbeda di kelompokan dalam satu deklarasi unik, dengan format sbb :
struct model_name { type1 element1; type2 element2; type3 element3; . .} object_name;
dimana model_name adalah nama untuk model tipe stukturnya dan parameter optional object_name merupakan identifier yang valid untuk objek sturktur. Diantara kurung kurawal { } berupa tipe dan sub-identifier yang mengacu ke elemen pembentuk struktur. Jika pendefinisian stuktur menyertakan parameter model_name (optional), maka parameter tersebut akan menjadi nama tipe yang valid ekuivalen dengan struktur. Contoh :
struct products { char name [30]; float price;} ;
products apple;products orange, melon;
Page | 51
Didefinisikan model struktur products dengan dua field : name dan price, dengan tipe yang berbeda. Kemudian tipe struktur tadi (products) digunakan untuk mendeklarasikan tiga objek : apple, orange dan melon.
Ketika dideklarasikan, products menjadi tnama tipe yang valid seperti tipe dasar int, char atau short dan dapat mendeklarasikan objects (variables) dari tipe tersebut. Optional field yaitu object_name dapat dituliskan pada akhir deklarasi struktur untuk secara langsung mendeklarasikan object dari tipe struktur.
Contoh :
struct products { char name [30]; float price;} apple, orange, melon;
Sangat penting untuk membedakan antara structure model, dan structure object. model adalah type, dan object adalah variable. Kita dapat membuat banyak objects (variables) dari satu model (type).
Contoh :
// example about structures#include <iostream.h>#include <string.h>#include <stdlib.h>struct movies_t { char title [50]; int year;} mine, yours;
Page | 52
void printmovie (movies_t movie);
int main (){ char buffer [50];
strcpy (mine.title, "2001 A Space Odyssey"); mine.year = 1968;
cout << "Enter title: "; cin.getline (yours.title,50); cout << "Enter year: "; cin.getline (buffer,50); yours.year = atoi (buffer);
cout << "My favourite movie is:\n "; printmovie (mine); cout << "And yours:\n "; printmovie (yours); return 0;}
void printmovie (movies_t movie){ cout << movie.title; cout << " (" << movie.year << ")\n";}
Output :
Enter title: Alien
Enter year: 1979
My favourite movie is:
2001 A Space Odyssey (1968)Page | 53
And yours:
Alien (1979)
Contoh diatas menjelaskan bagaimana menggunakan elemen dari struktur dan struktur itu sendiri sebagai variable normal. Contoh, yours.year merupakan variable valid dengan tipe int, dan mine.title merupakan array valid dari 50 chars.
Perhatikan mine dan yours juga berlaku sebagai valid variable dari tipe movies_t ketika di-pass ke-function printmovie(). Salah satu keuntungan dari structures yaitu kita dapat mengacu pada setiap elemennya atau keseluruhan blok struktur.
Contoh :
// array of structures#include <iostream.h>#include <stdlib.h>#define N_MOVIES 5
struct movies_t { char title [50]; int year;} films [N_MOVIES];
void printmovie (movies_t movie);
int main (){ char buffer [50]; int n; for (n=0; n<N_MOVIES; n++) { cout << "Enter title: "; cin.getline (films[n].title,50); cout << "Enter year: "; cin.getline (buffer,50);
Page | 54
films[n].year = atoi (buffer); } cout << "\nYou have entered these movies:\n"; for (n=0; n<N_MOVIES; n++) printmovie (films[n]); return 0;}
void printmovie (movies_t movie){
cout << movie.title; cout << " (" << movie.year << ")\n";}
Output :
Enter title: Alien
Enter year: 1979
Enter title: Blade Runner
Enter year: 1982
Enter title: Matrix
Enter year: 1999
Enter title: Rear Window
Enter year: 1954
Enter title: Taxi Driver
Enter year: 1975
You have entered these movies:
Alien (1979)
Page | 55
Blade Runner (1982)
Matrix (1999)
Rear Window (1954)
Taxi Driver (1975)
Pointer to structureSama seperti pada tipe lainnya, struktur juga dapat ditunjuk oleh pointer. Aturannya sama untuk setiap tipe data. Pointer harus dideklarasikan sebagai pointer untuk struktur :
struct movies_t { char title [50]; int year;};
movies_t amovie;movies_t * pmovie;
amovie merupakan object dari tipe struct movies_t dan pmovie adalah pointer untuk menunjuk ke objek dari tipe struct movies_t. maka, deklarasi dibawah ini juga benar
:
pmovie = &amovie;
Contoh :
// pointers to structures#include <iostream.h>#include <stdlib.h>
struct movies_t { char title [50]; int year;};
int main (){ char buffer[50];
Page | 56
movies_t amovie; movies_t * pmovie; pmovie = & amovie;
cout << "Enter title: "; cin.getline (pmovie->title,50); cout << "Enter year: "; cin.getline (buffer,50); pmovie->year = atoi (buffer); cout << "\nYou have entered:\n"; cout << pmovie->title; cout << " (" << pmovie->year << ")\n"; return 0;}
Output :
Enter title: Matrix
Enter year: 1999
You have entered:
Matrix (1999)
Operator -> merupakan operator penunjuk yang digunakan secara khusus bersama dengan pointer untuk struktur dan pointer untuk class. Memungkinkan kita untuk tidak menggunakan tanda kurung pada setiap anggota struktur yang ditunjuk. Dalam contoh digunakan :
pmovie->title
Atau dalam penulisan yang lain :
(*pmovie).title
Page | 57
Kedua ekspresi tersebut diatas : pmovie->title dan (*pmovie).title benar dan berarti evaluasi elemen title dari struktur yang ditunjuk (pointed by) pmovie. Harus dibedakan dari :
*pmovie.title
Yang ekuivalen dengan : *(pmovie.title)
Dibawah ini merupaka tabel rangkuman, kombinasi yang mungkin terjadi antara pointer dan struktur:
Expression Description Equivalent
pmovie.title Element title of structure pmovie
pmovie->titleElement title of structure pointed by pmovie
(*pmovie).title
*pmovie.titleValue pointed by element title of structure pmovie
*(pmovie.title)
Nesting structuresStruture juga dapat berbentuk nested (bersarang) sehingga suatu elemen dari suatu struktur dapat menjadi elemen pada struktur yang lain :
struct movies_t { char title [50]; int year;}
struct friends_t { char name [50];
Page | 58
char email [50]; movies_t favourite_movie; } charlie, maria;
friends_t * pfriends = &charlie;
Setelah deklarasi diatas, dapat digunakan ekspresi sbb :
charlie.namemaria.favourite_movie.titlecharlie.favourite_movie.yearpfriends->favourite_movie.year
(Dimana 2 ekspresi terakhir ekuivalen)
User defined data types
Definition of own types (typedef).
C++ memungkinkan kita untuk mendefinisikan tipe berdasarkan tipe data yang sudah ada. Untuk itu digunakan keyword typedef, dengan format :
typedef existing_type new_type_name ;
dimana existing_type adalah tipe data dasar pada C++ dan new_type_name adalah nama dari tipe baru yang didefinisikan. Contoh :
typedef char C;typedef unsigned int WORD;typedef char * string_t;typedef char field [50];
Contoh diatas telah mendefinisikan empat tipe data baru : C, WORD, string_t dan field sebagai char, unsigned int, char* dan char[50] yang akan digunakan nanti seperti berikut :
Page | 59
C achar, anotherchar, *ptchar1;WORD myword;string_t ptchar2;field name;
UnionUnion memungkinkan bagian dari memory dapat diakses sebagai tipe data yang berbeda, walaupun pada dasarnya mereka berada pada lokasi yang sama di memory. Pendeklarasian dan penggunaanya hampir sama dengan struktur tetapi secara fungsional berbeda :
union model_name { type1 element1; type2 element2; type3 element3; . .} object_name;
Semua elemen pada deklarasi union declaration menempati tempat yang sama dimemory. Ukuran yang digunakan diambil dari tipe yang paling besar. Contoh :
union mytypes_t { char c; int i; float f; } mytypes;
Mendefinisikan tiga elemen :
mytypes.cmytypes.imytypes.f
Tiap data memiliki tipe yang berbeda, karena menempati lokasi yang sama dmemory, maka perubahan terhadap satu elemen akan mempengaruhi elemen yang lain.
Page | 60
Salah satu kegunaan union, memungkinkan untuk menggabungkan tipe dasar dengan suatu array atau struktur dari elemen yang lebih kecil. Contoh :
union mix_t{ long l; struct { short hi; short lo; } s; char c[4];} mix;
Mendefinisikan tiga nama yang memungkinkan kita untuk mengakses grup 4 bytes yang sama : mix.l, mix.s dan mix.c dan dapat digunakan menutut bagaimana kita akan mengaksesnya, sebagai long, short atau char. Tipe data yang sudah digabungkan, arrays dan structures dalam suatu union, maka dibawah ini merupakan cara pengakses-an yang berbeda :
Anonymous unionsPada C++ terdapat option unions tanpa nama (anonymous union). Jika disertakan union dalam structure tanpa nama objek(yang dituliskan setelah kurung kurawal { }) maka union akan tidak memiliki nama dan kita dapat mengakses elemennya secara langsung dengan namanya.
Page | 61
Contoh:
union
struct { char title[50]; char author[50]; union { float dollars; int yens; } price;} book;
anonymous union
struct { char title[50]; char author[50]; union { float dollars; int yens; };} book;
Perbedaan deklarasi diatas adalah program pertama diberi nama pada union (price) dan yang kedua tidak. Pada saat mengakses anggota dollars dan yens dari objek. Pada program pertama
:
book.price.dollarsbook.price.yens
Sedangkan untuk program kedua :
book.dollarsbook.yens
Page | 62
2.6 Kelas
Sebuah kelas merupakan pengembangan konsep dari struktur data: tidak hanya
data, tapi juga dapat menangani data dan fungsi.
Sebuah objek merupakan perwakilan dari sebuah kelas. Dalam perbandingan dengan
variabel, sebuah kelas akan menjadi tipe data dan objeknya menjadi variabel.
Kelas dideklarasi menggunakan kata kunci class, dengan format berikut:
class class_name
{
access_specifier_1:
member1;
access_specifier_2:
member2;
….
} object_names;
dimana class_name merupakan identifier sah untuk kelas, object_names merupakan
daftar nama opsional dari objek pada kelas ini. Isi deklarasi bisa mencakup anggota yang
meliputi deklarasi data atau fungsi, dan “optionally access specifiers“.
Seluruhnya sangat mirip dengan deklarasi pada struktur data, kecuali bahwa kita bisa
memasukkan fungsi dan anggota, tapi juga hal baru ini disebut access specifier. Access
specifier merupakan satu dari tiga kata kunci berikut: private, public, atau protected.
Specifiers ini mengatur hak akses dimana anggota dibutuhkan:
anggota private,
dapat diakses hanya oleh anggota pada kelas yang sama dan friends mereka
anggota protected bis
a diakses oelh anggota dari kelas yang sama dan friends mereka, namun juga dari
anggota turunan kelas mereka
anggota public dapat
diakses dari mana saja dimana objek terlihat.
Secara default, semua anggota kelas dideklarasi dengan kata kunci class memiliki
akses private untuk setiap anggotanya. Jadi, setiap anggota yang dideklarasi sebelum specifier
kelas lain memiliki akses private. Contohnya:
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area (void);
} rect;
Deklarasi sebuah kelas(yakni tipe) CREctangle dan sebuah objek yang dinamakan
rect.Kelas ini berisi empat anggota: dua anggota data bertipe int(anggota x dan y) dengan
akses private(secara default) dan dua anggota fungsi dengan akses
publik:set_value() dan area(), di mana sekarang baru disertakan deklarasi, belum
definisinya.
Perhatikan perbedaan antara nama kelas dan nama objek: dalam contoh
sebelumnya,Crectangle adalah nama kelas, sedangkan rect adalah nama objek dengan
tipeCrectangle. Hal ini sama dengan hubungan int dan a pada deklarasi di bawah ini:
int
a;
Dimana int merupakan nama tipe(kelas) dan a merupakan nama variabel(objek).
Setelah deklarasi sebelumnya yakni Crectangle dan rect, kita bisa mengacu dalam isi
program untuk anggota publik dari objek rect seperti mereka fungsi dan variabel normal,
dengan menambahkan nama objek diikuti dengan dot(.) dan nama anggota. Selayaknya yang
kita lakulan pada struktur data sebelumnya. Contohnya:
rect.set_values(3,4);
myarea=rect.area();
Anggota rect yang tidak dapat diakses dari isi program kita diluar kelas adalah x dany,
karena mereka dalam akses private dan mereka hanya bisa diacu dari anggota lain pada
kelas yang sama.
Ini merupakan contoh lengkap dari kelas CRectangle:
// classes example
#include <iostream>
using namespace std;
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area () {return (x*y);}
};
void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}
Area: 12
int main () {
CRectangle rect;
rect.set_values (3,4);
cout << “area: ” << rect.area();
return 0;
}
Hal baru yang paling penting dalam koding adalah operator lingkup(::, titik dua)
yang mencakup definisi set_values(). Ini digunakan untuk mendefinisi anggota kelas dari
luar definisi kelas itu sendiri.
Anda dapat memperhatikan bahwa definisi dari fungsi anggota area() telah
meliputi langsing definisi kelas CRectangle yang diberikan secara sederhana,
dimanaset_value() hanya memiliki prototype yang dideklarasi di dalam kelas,namun
definisi ini berada diluarnya. Dalan deklarasi di luar, kita harus menggunakan operator
scope(::) untuk menjelaskan bahwa kita mendefinisi sebuah fungsi yang merupakan
anggota dari kelas Crectangle dan bukan fungsi global biasa.
Operator Scope(::) menjelaskan kelas dimana anggota tersebut dideklarasi,
memperbolehkan lingkup properti yang sama seakan definisi fungsi disertakan dalan
definisi kelas. Contohnya, dalam fungsi set_values() dari koding sebelumnya.. kita bisa
menggunakan variabel x dan y, yang merupakan anggota privat kelasCrectangle, yang
berarti mereka hanya dapat diakses oleh anggota lain dari kelas tersebut.
Perbedaan antara definisi fungsi anggota kelas meliputi kelas tersebut atau
mencakup prototype dan kemudian definisinya, adalah dalan kasus pertama, fungsi akan
secara otomatis dipertimbangkan dalam fungsi anggota inline oleh compiler, dan kasus
keduam merupakan fungsi anggota normal(not-inline) , dimana dalam kenyataannya,
tidak ada perbedaan dalam behavior.
Anggota x dan y memiliki hak akses private(ingat bahwa jika tidak ada yang
dikatakan, semua anggota kelas didefinisi dengan hak akses private). Dengan
deklarasi private, kita menolak mengakses mereka dari semua tempat diluar kelas. Ini
membuat masalah, sebah kita telah mendefinisikan fungsi anggota untuk mengatur nilai
anggota dalan objek: fungsi anggota set_values();. Untuk itu, sisanya dari program
tidakmembutuhkan akses langsung untuk mereka. Mungkin dalam contoh singkat, ini
sulit untuk melihat kegunaan melindungi dua variabel tersebut, namun dalan proyek lebih
besar, akan sangat penting bahwa nilai tidak dapat dimodifikasi dalam cara yang tidak
diharapkan( tidak diharapkan dari sudut pandang objek).
satu keuntungan besa dari kelas bahwa, dalam tipe yang lain, kita dapat mendefinisi beberapa
objek padanya. Misalnya, dalan contoh sebelumnya, pada kelas Crectangle, ita dapat
mendeklarasi object rectb sebagai tambahaan pada objek rect:
// example: one class, two objects
#include <iostream>
using namespace std;
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area () {return (x*y);}
};
void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}
int main () {
CRectangle rect, rectb;
rect.set_values (3,4);
rectb.set_values (5,6);
cout << “rect area: ” << rect.area() << endl;
rect area: 12
rectb area: 30
cout << “rectb area: ” << rectb.area() << endl;
return 0;
}
Dalam kasus nyata, kelas(tipe objek) yakni Crectangle, memiliki dua objek instan : rect
dan rectb. Setiapnya memiliki anggota dan fungsi variabel/
Perhatikan bahwa memanggil rect.area() tidak memberikan hasil yang sama
dengan memanggil rectb.area(). Ini dikarenakan setiap objek kelas Crectangle memiliki
variabel x dan y tersendiri, dan hal yang sama terjadi pada anggota fungsi set_value() dan
area() yang setiapnya menggunakan variabel objeknya untuk beroperasi.
Ini merupakan konsep dasar dari pemrograman berorientasi objek : data dan
fungsi merupakan anggota objek. Kita tidak mengg lagi variabel global yang dilewatkan
dari satu fungsi ke fungsi lain sebagai parameter, melainkan kita menangani objek yang
memiliki data dan fungsi tersendiri sebagai anggotanya. Perhatikan bahawa kita tidak
harus selalum memberikan parameter setiap kali memanggil rect.area atau rectb.area.
Fungsi anggota tersebut secara langsung menggunakan anggota data dari objek rect dan
rectb.
Konstraktor dan Destrakor
Objek secara umum membutuhkan inisialisasi variabel selama proses pembuatan untuk
menjadi operativ dan mencegah mengembalikan nilai yang tidak diharapkan selama
dieksekusi. Contohnya, apa yang terjadi jika dalam contoh sebelumnya,kita memanggil
fungsi anggota area() sebeum memanggil funsi set_values()? Mungikn ktia akan
mendapatkan hasil yang tidak pasti karena anggota x dan y belum diberikan sebuah nilai.
Untukmencegah itu maka sebuah kelas akan disertakan fungsi khusus yakni constraktor,
yang secara otomatis dipanggil ketika sebuah objek dari kelas dibuat. Fungsi konstraktor
harus memiliki nama yang sama dengan kelas dan tidak dapat mengembalikan sebuah
tipe data, tidak juga void.
Kita akan menunjukkan dalam contoh sebelumnya:
// example: class constructor
#include <iostream>
using namespace std;
class CRectangle {
int width, height;
public:
CRectangle (int,int);
int area () {return (width*height);}
};
CRectangle::CRectangle (int a, int b) {
width = a;
height = b;
}
int main () {
CRectangle rect (3,4);
CRectangle rectb (5,6);
cout << “rect area: ” << rect.area() << endl;
cout << “rectb area: ” << rectb.area() << endl;
return 0;
}
rect area: 12
rectb area: 30
Seperti yang dapat dilihat, hasil dari contoh tersebut sama dengan sebelumnya.
Namun kita telah memindahkan fugsi anggota set_values(), dan telah memasukkan
sebuah konstraktor yang menampilkan aksi yang sama: ia menginisialisasi nilai x dan y
dengan parameter yang diberikan padanya.
Perhatikan bagaimana argumen dipassing ke constraktor pada saat objek dibuat.
CRectangle rect
(3,4);
CRectangle rectb (5,6);
Konstraktor tidak bisa dipanggil langsung seperti fungsi anggota umum. Mereka
hanya bisa dijalankan ketika sebuah objek baru pada kelas dibuat.
Anda dapat melihat bagaimana deklarasi prototye konstraktor(dalam kelas) dan
definisi konstraktor tidak mengembalikan nilai, bahkan void pun tidak.
Destraktor memenuhi fungsi sebaliknya. Ini akan secara otomatis dipanggil ketika
sebuah objek dihancurkan, karena lingkup keberadaannya telah selesai(misalnya, ketika
kita mendefinisi sebagai objek lokal dalam sebuah fungsi dan akhir fungsi) atau karena
ini merupakan objek yang dinamik ditugasi, dan ini merilis menggunakan operator delete.
Destraktor harus memiliki nama yang sama dengan kelas, namun diawali dengan
tanda ~ dan tidak boleh mengembalikan nilai.
Penggunaan destraktor secara khusus cocok ketiak sebuah objek menjalankan memori
dinamis selama jalannya dan kemudian dihancurkan ketika kita ingin melepaskan memori objek
yang telah dialokasi.
// example on constructors and destructors
#include <iostream>
using namespace std;
class CRectangle {
int *width, *height;
public:
CRectangle (int,int);
~CRectangle ();
int area () {return (*width * *height);}
};
CRectangle::CRectangle (int a, int b) {
width = new int;
height = new int;
*width = a;
*height = b;
}
CRectangle::~CRectangle () {
delete width;
delete height;
}
int main () {
CRectangle rect (3,4), rectb (5,6);
cout << “rect area: ” << rect.area() << endl;
cout << “rectb area: ” << rectb.area() << endl;
return 0;
}
rect area: 12
rectb area: 30
Overloading Constructor
Seperti fungsi lainnya, sebuah konstraktor juga bisa dilebihkan dengan lebihd ari satu
fungsi yang memiliki nama yang sama namun tipe dan jumlah parameter yang berbeda. Ingat
bahwa pada fungsi overloading, kompiler akan memanggil satu dari parameter yang cocok
dengan argumen yang digunakan pada pemanggilan fungsi. Pada kasus konstraktor, yang secara
otomatis dipanggil ketika objek dibuat, satu dijalankan adalah yang paling cocok dengan
argumen yang dipassing pada deklarasi objek:
// overloading class constructors
#include <iostream>
using namespace std;
class CRectangle {
int width, height;
public:
CRectangle ();
CRectangle (int,int);
int area (void) {return (width*height);}
};
CRectangle::CRectangle () {
width = 5;
height = 5;
}
CRectangle::CRectangle (int a, int b) {
width = a;
height = b;
}
int main () {
CRectangle rect (3,4);
CRectangle rectb;
rect area: 12
rectb area: 25
cout << “rect area: ” << rect.area() << endl;
cout << “rectb area: ” << rectb.area() << endl;
return 0;
}
Dalam kasus ini, rectb harus dideklarasi tanpa argumen, jadi ini telah diinisialisasi
dengan konstraktor yang tidak memiliki parameter, dimana inisialisasi baik width dan
height dengan nilai 5.
Penting: perhatikan bahwa jika kita deklarasi sebuah objek baru dan kita ingin
menggunakannya sebagai konstraktor default( satu tanpa parameter) kita tidak perlu
menambahkan kurung kurawal();
CRectangle rectb; // right
CRectangle rectb(); // wrong!
Default Constructor
Jika anda tidak mendeklarasi sebuah konstraktor pada definisi kelas, kompiler mengasumsikan
kelas memiliki konstraktor default tanpa argumen. Jadi, setelah deklarasi kelas seperti berikut:
class CExample {
public:
int a,b,c;
void multiply (int n, int m) { a=n; b=m; c=a*b; };
};
Kompiler berasumsi bahwa Cexample memiliki konstraktor default, jadi Anda akan mendeklarasi
objek pada kelas ini dengan deklarasi singkat tanpa argumen apapun:
Cexample ex;
Namun sesaat setelah dideklarasi denga konstraktor sendiri pada sebuah kelas, kompiler
tidak menyediakan konstraktor default secara implisit. Jadi anda harus mendeklarasi
semua objek dari kelas sesuai dengan prototype konstraktor yand didefinisi pada kelas:
class CExample {
public:
int a,b,c;
CExample (int n, int m) { a=n; b=m; };
void multiply () { c=a*b; };
};
Kita telah mendeklarasi sebuah konstraktor yang meliputi dua parameter bertipe int. OKI
deklarasi objek berikut akan benar:
CExample ex (2,3);
tetapi
CExample ex;
akan salah, karena kita telah mendeklarasi kelas memiliki konstraktor eksplisit, jadi
menggantikan konstraktor default.
Tetapi kompiler tidak hanya membuat default konstraktor untuk anda jika anda
tidak membuatnya sendiri. Kompiler akan menyediakan tiga fungsi anggota khusus
bahwa jika tidak dideklarasi sendiri. Ini berupa copy constructor, copy assignment
operator, dan default destructor.
Copy constructor dan copy assignment operator menggandakan semua data yang
ada dalam objek lain pada anggota data di objek saat ini. Pada Cexample, konstraktor
kopi dideklarasi secara implisit oleh compiler seperti berikut:
CExample::CExample (const CExample& rv)
{
a=rv.a; b=rv.b; c=rv.c;
}
OKI, deklarasi objek berikut akan benar:
CExample ex (2,3);
CExample ex2 (ex); // copy constructor (data copied from ex)
Pointers To Classes
ini secara sempurna sah untuk membuat pointer yang menunjuk kelas. Secara
sederhana kita menyadari bahwa sekali dideklarasi, sebuah kelas menjadi bertipe valid, jadi kita
bisa menggunakan nama kelas sebagai tipe dari pointer. Misalnya:
Crectangle * prect;
Merupakan sebuah pointer pada objek kelas Crectangle/
Seperti terjadi pada struktur data, untuk menunjuk langsung anggota dari objek yang ditunjuk
oleh pointer, kita bisa menggunakan operator pana(->). Ini merupakan contoh dengan beberapa
kombinasi:
// pointer to classes example
#include <iostream>
using namespace std;
rect area: 12
rectb area: 25
class CRectangle {
int width, height;
public:
void set_values (int, int);
int area (void) {return (width * height);}
};
void CRectangle::set_values (int a, int b) {
width = a;
height = b;
}
int main () {
CRectangle a, *b, *c;
CRectangle * d = new CRectangle[2];
b= new CRectangle;
c= &a;
a.set_values (1,2);
b->set_values (3,4);
d->set_values (5,6);
d[1].set_values (7,8);
cout << “a area: ” << a.area() << endl;
cout << “*b area: ” << b->area() << endl;
cout << “*c area: ” << c->area() << endl;
cout << “d[0] area: ” << d[0].area() << endl;
cout << “d[1] area: ” << d[1].area() << endl;
delete[] d;
delete b;
return 0;
}
a area: 2
*b area: 12
*c area: 2
d[0] area: 30
d[1] area: 56
Berikut, ringkasan bagaimana membaca beberapa pointer dah operator kelas yang
muncul dalam contoh sebelumnya:
Pastikan bahwa Anda mengerti logika dalam ekspresi-ekspresi sebelumnya
sebelum memulai bagian berikut. Jika Andar ragu, baca kembali baigan ini dan/atau
konsultasi pada bagian sebelumnya soal pointer dan struktur data.
Classes defined with struct and Union
Kelas dapat didefinisi tidak hanya dengan kata kunci class tapi juga struct dan union.
Konsep kelas dan struktur data sama bahwa kedua kata kunci(struct dan class)
bisa digunakand alan C++ untuk deklarasi kelas. Perbedaannya hanyalah anggota kelas
dideklarasi dengan kata kuni struct memiliki hak akses public secara default, sedangkan
pada kelas dideklarasi secara default dengan hak akses private. Untutuk persoalan lain,
keduanya sama.
Konsep union berbeda dengan kelas dan struct, karena union hanya menyimpan
satu data anggota pada waktunya, walaupun begitu mereka juga merupakan kelas, dan
bisa jadi menangani anggota fungsi. Secara default hak akses dalam kelas union adalah
public.
BAB III
Penutup
Kesimpulan
C++ adalah suatu bahasa pemrograman yang sangat populer dan telah banyak digunakan untuk melakukan pengembangan aplikasi di berbagai bidang , seperti : telekomunikasi ,embedded,system,bisnis, hiburan, dalam bahasa C/C++, tanda ++ digunakan untuk menunjukkan suatu tingkat (+ 1) sehingga C ++ artinya c+1 atau dapat diartikan sebagai bahasa peningkatan dari bahasa sebelumnya, yaitu bahasa C.
Lampiran program Lucida Concole
Berikut adalah contoh program penghitung denda rental CD/DVD yang menggunakan Struct:
#include <iostream>#include <stdlib>
//pendeskripsian variabelchar nama[40],nomember[10];int banyak,bonus,lama,terlambat,denda,biaya=0,total;
//pendeskripsian Struct untuk data cd/dvdstruct dvd{char kode[10],judul[30];int jenis,genre;}dvd[20],bonuspinjam[5];
//Pendeskripsian Struct untuk tanggalstruct tanggal{int tgl,bulan,tahun;}pinjam,kembali,tempo;
//Fungsi yang dipakai untuk input data membervoid inputmember(){cout<<"\nNama Member...........................= ";cin>>nama;cout<<"No. Member............................= ";cin>>nomember;cout<<"Banyak CD/DVD yang Dipinjam (Maks 20) = ";cin>>banyak;}
Script tersebut nantinya akan menghasilkan output seperti di bawah ini:
Proses Input