Modul Pemrograman C++ Lengkap
Modul Pemrograman C++ Lengkap
BAB I
PENDAHULUAN
Berbicara tentang C++ biasanya tidak lepas dari C, sebagai bahasa pendahulunya. Pencipta C
adalah Brian W. Kerninghan dan Dennis M. Ritchie pada sekitar tahun 1972, dan sekitar satu
dekade setelahnya diciptakanlah C++, oleh Bjarne Stroustrup dari Laboratorium Bell, AT&T,
pada tahun 1983. C++ cukup kompatibel dengan bahasa pendahulunya C. Pada mulanya C++
disebut “ a better C “. Nama C++ sendiri diberikan oleh Rick Mascitti pada tahun 1983, yang
berasal dari operator increment pada bahasa C.
Keistimewaan yang sangat berari dari C++ ini adalah karena bahasa ini mendukung
pemrograman yang berorientasi objek ( OOP / Object Oriented Programming).
Sampai saat ini, program dianggap sebagai sekumpulan procedure yang melakukan aksi terhadap
data. Procedure, atau function, adalah suatu set instruksi khusus yang dieksekusi secara
bergantian. Data terpisah dari procedure, dan trik pemrogramannya adalah menjaga urutan
pemanggilan fungsi, dan data apa yang diubah. Dalam demikian terciptalah program yang
terstruktur.
Ide dari pemrograman terstruktur adalah memecah program yang besar menjadi kecil sehingga
lebih mudah dipahami. Program-program lama memaksa pengguna untuk melakukan langkah-
perlangkah melalui layar monitor. Sedangkan program modern menyajikan semua pilihan
sekaligus dan merespon aksi pengguna.
OOP berusaha untuk memenuhi kebutuhan itu, menyediakan teknik untuk mengelola
kompleksitas, mencatat penggunaan ulang komponen software dsb. Inti dari OOP adalah
memperlakukan data dan procedure sebagai sebuah objek berisi entitas dengan identitas dan ciri
yang khusus.
Source code C++ dapat ditulis pada text editor apapun. Baik itu digunakan pada sistem operasi
Windows atau Unix (Linux, BSD, dsb).
Walaupun demikian, lebih disarankan apabila digunakan dengan editor khusus C++, agar
penggunaan tools yang lain lebih mudah.
1.5 KOMPILASI
Untuk mengubah source code menjadi sebuah program, kita gunakan compiler. Setelah source
code tercompile, terbentuklah sebuah file objek dengan ekstension “ .obj “. File “ .obj “ ini
belum merupakan sebuah program executable. Untuk membentuk program executable linker
harus dijalankan. Jika program executable sudah diperoleh, walaupun di komputer anda tidak
terinstall compiler C++ namun program masih tetap dapat dijalankan.
Saat ini banyak compiler C++ yang berada di pasaran, contohnyaa Borland C++, Turbo C++,
Microsoft C++, C++ Builder, Visual C++ sampai pada compiler gratis seperti g++ di Unix.
BAB II
ELEMEN DASAR
Untuk membuat suatu program ada baiknya kita mengenal terlebih dahulu apa yang
disebut dengan preprocessor directive. Propocessor ditandai dengan adanya awalan #.
Preprocessor selalu dijalankan terlebih dahulu pada saat proses kompilasi terjadi.
Setiap program C++ mempunyai bentuk seperti di bawah , yaitu:
#prepocessor directive
main()
{
// Batang Tubuh Program Utama
}
Melihat bentuk seperti itu dapat kita ambil kesimpulan bahwa batang tubuh program
utama berada didalam fungsi main(). Berarti dalam setiap pembuatan program utama, maka
dapat dipastikan seorang pemrogram menggunakan minimal sebuah fungsi. Pembahasan lebih
lanjut mengenai fungsi akan diterangkan kemudian. Yang sekarang coba ditekankan adalah kita
menuliskan program utama kita didalam sebuah fungsi main(). Jangan lupa bahwa C++ bersifat
case sensitive, sehingga, nama hallo dan Hallo berbeda artinya.
· Komentar
Komentar tidak pernah dicompile oleh compiler. Dalam C++ terdapat 2 jenis komentar, yaitu:
Jenis 1 : /* Komentar anda diletakkan di dalam ini
Bisa mengapit lebih dari satu baris */
Jenis 2 : // Komentar anda diletakkan disini ( hanya bisa perbaris )
· Semicolon
Tanda semicolon “ ; ” digunakan untuk mengakhiri sebuah pernyataan. Setiap pernyataan
harus diakhiri dengan sebuah tanda semicolon. Baris yang diawali dengan tanda #, seperti
#include <iostream.h>
tidak diakhiri dengan tanda semicolon, karena bentuk tersebut bukanlah suatu bentuk pernyataan,
tetapi merupakan prepocessor directive
Contoh :
#include <iostream.h>
main()
{
char nama[100]; // Dekalarasi variable nama
cout<<”Masukkan nama Anda : “;
cin>>nama; // Meminta user untuk menginisialisasi variable nama
cout<<”Nama anda adalah “<<nama;
return 0;
}
Panjang String
Contoh :
#include <iostream.h>
#include <string.h>
main()
{
cout<<strlen("Selamat Pagi.\n")<<endl;
cout<<strlen("Selamat Pagi.")<<endl;
cout<<strlen("Selamat")<<endl;
cout<<strlen("S")<<endl;
cout<<strlen("");
return 0;
}
Keluarannya:
14
13
7
1
0
Perhatikan, bahwa disetiap akhir baris pernyataan diakhiri dengan tanda titik – koma (semicolon)
“ ; “.
Perhatikan, bahwa ‘ \n ‘ dihitung satu karakter. \n disebut newline karakter
Endl juga merupakan newline karakter ( sama kegunaannya seperti \n ).
Dalam C++, selain \n terdapat juga beberapa karakter khusus yang biasa dsebut escape sequence
characters, yaitu
Karakter Keterangan
\0 Karakteeer ber-ASCII nol ( karakter null )
\a Karakter bell
\b Karakter backspace
\f Karakter ganti halaman ( formfeed )
\n Karakter baris baru ( newline )
\r Karakter carriage return ( ke awal baris )
\t Karakter tab horizontal
\v Karakter tab vertika
\\ Karakter \
\’ Karakter ‘
\” Karakter “
\? Karakter ?
\ooo Karakter yang nilai oktalnya adalah ooo ( 3 digit octal )
\xhh Karakter yang nilai heksadesimalnya adalah hh (2 digit
heksadesimal )
Dalam bahasa pemrograman, suatu program dibuat dari elemen-elemen sintaks individual
yang disebut token, yang memuat nama variable, konstanta, keyword, operator dan tanda baca.
Contoh :
#include <iostream.h>
Int main()
{
int n=66;
cout<<n<<endl; // n sebagai variabel
return 0;
}
Keluarannya:
66
Variabel adalah symbol dari suatu besaran yang merepresentasikan suatu lokasi di dalam
memori komputer. Informasi yang tersimpan di dalam lokasi tersebut disebut nilai variable.
Untuk memperoleh nilai dari suatu variable digunakan pernyataan penugasan ( assignment
statement ), yang mempunyai sintaks sebagai berikut
variable = ekspresi ;
Yang akan diolah terlebih dahulu adalah ekspresi, baru hasilnya dimasukkan kedalam variable
Tanda “=” adalah operator penugasan.
Contoh :
#include <iostream.h>
main()
{
int n;
n=66; // sama juga jika ditulis int n=66;
cout<<n<<endl; // n sebagai variabel
cout<<’n’<<endl; // end sebagai karakter
return 0;
}
Keluarannya :
66
n
Deklarasi dari suatu variable adalah sebuah pernyataan yang memberikan informasi tentang
variable kepada compiler C++. Sintaksnya adlah
type variable ;
dengan type adalah tipe data yang didukung oleh C++, beberapa contohnya yaitu:
Contoh :
#include <iostream.h>
main()
{
int n;
cout<<n<<endl; // n sebagai variabel
return 0;
}
Keluarannya:
18125
2.6 KONSTANTA
BAB III
OPERATOR
Operator adalah symbol yang biasa dilibatkan dalam program untuk melakukan sesuatu
operasi atau manipulasi.
Contoh : a = b + c * d / 4
a, b, c, d à disebut operand
=, +, *, / à disebut operator
Contoh :
#include <iostream.h>
void main()
{
int m = 82, n = 26;
cout<<m<<" + "<<n<<" = "<<m+n<<endl;
cout<<m<<" - "<<n<<" = "<<m-n<<endl;
cout<<m<<" * "<<n<<" = "<<m*n<<endl;
cout<<m<<" / "<<n<<" = "<<m/n<<endl;
cout<<m<<" % "<<n<<" = "<<m%n<<endl;
cout<<"-"<<m<<" = "<<-m<<endl;
}
Keluarannya :
82 + 26 = 108
82 - 26 = 56
82 * 26 = 2132
82 / 26 = 3
82 % 26 = 4
-82 = -82
Karena tipe datanya adalah int, maka 82/26=3, supaya dapat merepresentasikan nilai yang
sebenarnya, gunakan tipe data float.
Operator increment à ++
Operator decrement à --
Contoh :
#include <iostream.h>
main()
{
int m = 44, n = 66;
cout<<”m = “<<m<<”, n = “<<n<<endl;
++m; --n;
cout<<”m = “<<m<<”, n = “<<n<<endl;
m++; n--;
cout<<”m = “<<m<<”, n = “<<n<<endl;
return 0;
}
Keluarannya :
m = 44, n = 66
m = 45, n = 65
m = 46, n = 64
Terlihat bahwa operator pre-increment dan post-increment memiliki akibat yang sama, yaitu
manambah nilai satu pada m dan memasukkan nilai tersebut kembali ke m ( m = m+1). Hal yang
sama juga terjadi pada operator pre-decrement dan post-decrement yang memberikan akibat
yang sama, yaitu mengurangi nilai satu dari n ( n = n - 1).
Tetapi bila digunakan sebagai sub-ekspresi, operator post-increment dan pre-increment
menunjukkan hasil yang berbeda
Contoh :
#include <iostream.h>
main()
{
int m = 66, n ;
n = ++m;
cout<<"m = "<<m<<", n = "<<n<<endl;
n = m++;
Keluarannya :
m = 67, n = 67
m = 68, n = 67
m = 68
m = 69
m = 70
Penjelasan :
Dalam penugasan yang pertama, m adalah pre-increment, menaikkan nilainya menjadi 67, yang
selanjutnya dimasukkan ke n.
Dalam penugasan kedua, m adalah post-increment, sehingga 67 dimasukkan dahulu ke n baru
kemudian nilai m-nya dinaikkan, itu sebabnya mengapa nilai m = 68 dan n = 67.
Dalam penugasan ketiga, m adalah post-increment, sehingga nilai m ( = 68 ) ditampilkan dahulu
( ke layar ) baru kemudian nilai m dinaikkan menjadi 69.
Dalam penugasan keempat, m adalah pre-increment, sehingga nilai m dinaikkan dahulu menjadi
70 baru kemudian ditampilkan ke layar.
Supaya lebih paham, perhatikan pula contoh dibawah.
Contoh :
#include <iostream.h>
main()
{
int m = 5, n;
n = ++m * --m;
cout<<"m = "<<m<<", n = "<<n<<endl;
cout<<++m<<” “<<++m<<” “<<++m<<endl;
return 0;
}
Keluarannya :
m = 5, n = 25
876
Penjelasan :
Dalam penugasan untuk n, pertama kali m dinaikkan (++m) menjadi 6, kemudian m diturunkan
kembali menjadi 5, karena adanya --m. Sehingga nilai m sekarang adalah 5 dan nilai m = 5 inilah
yang dievaluasi pada saat penugasan perkalian dilakukan.
Pada baris terakhir, ketiga sub-ekspresi dievaluasi dari kanan ke kiri.
AND OR
A B P A B P
0 0 0 0 0 0
0 1 0 0 1 1
1 0 0 1 0 1
1 1 1 1 1 1
XOR
A B P
0 0 0
0 1 1
1 0 1
1 1 0
Contoh :
#include <iostream.h>
void main()
{
int m = 82, n = 26;
cout<<m<<" << 2"<<" = "<<(m<<2)<<endl;
cout<<m<<" >> 2"<<" = "<<(m>>2)<<endl;
cout<<m<<" & "<<n<<" = "<<(m&n)<<endl;
cout<<m<<" | "<<n<<" = "<<(m|n)<<endl;
cout<<m<<" ^ "<<n<<" = "<<(m^n)<<endl;
cout<<"~"<<m<<" = "<<~m<<endl;
}
Keluarannya :
82 << 2 = 328
82 >> 2 = 20
82 & 26 = 18
82 | 26 = 90
82 ^ 26 = 72
~82 = 83
Penjelasan :
Nilai keluaran diatas, tergantung dari jenis compiler yang digunakan. Hasil diatas merupakan
keluaran dari compiler Turbo C++.
Pada Turbo C++ besar dari integer adalah 2 byte atau sama dengan 16 bit, untuk mengetahuinya
digunakan perintah
cout<<sizeof(int)<<endl; // Untuk mengetahui besar dari int
Maka :
8210 = 00000000010100102 dan
2610 = 00000000000110102
Sehingga :
82 << 2 à 00000001010010002 = 32810
82 >> 2 à 00000000000101002 = 2010
82 & 26 à 00000000010100102
00000000000110102
------------------------------------------ &
00000000000100102 = 1810
dan begitu juga untuk operasi OR dan XOR.
~82 à digunakan 2’s complement, yaitu
8210 = 00000000010100102 lalu dinegasikan tiap bitnya menjadi
11111111101011012 kemudian LSB ditambah 1 menjadi
1111111110101110 = 6545410 nilai ini melebihi jangkauan maksimum int yang berkisar di -
32768 sampai 32767, sehingga nilai yang keluar yaitu 83.
Operator relasi digunakan untuk membandingkan dua buah nilai. Operator ini biasa digunakan
dalam instruksi percabangan.
Operator Deskripsi
Contoh:
#include <iostream.h>
main()
{
int m = 5, n =7;
if(m == n) cout<<m<<” sama dengan ”<<n<<endl;
else if(m != n) cout<<m<<” tidak sama dengan ”<<n<<endl;
else if(m > n) cout<<m<<” lebih besar dari ”<<n<<endl;
else if(m < n) cout<<m<<” lebih kecil dari ”<<n<<endl;
return 0;
}
Keluarannya :
5 lebih kecil dari 7
Operator logika digunakan untuk menghubungkan dua atau lebih ungkapan menjadi sebuah
ungkapan berkondisi.
Contoh :
#include <iostream.h>
void main()
{
int m = 166;
cout<<”(m>=0 && m<=150) à “<<(m>=0 && m<=150)<<endl;
cout<<”(m>=0 || m<=150) à “<<(m>=0 || m<=150)<<endl;
}
Keluarannya :
(m>=0 && m<=150) à 0
(m>=0 || m<=150) à 1
Penjelasan :
Hasil / keluaran dari operator logika adalah 0 dan 1.
0 jika keluarannya salah dan 1 jika keluarannya benar.
Contoh :
#include <iostream.h>
main()
{
int m = 26, n = 82;
int min = m < n ? m : n;
cout<<”Bilangan terkecil adalah “<<min<<endl;
return 0;
}
Keluarannya :
Bilangan terkecil adalah 26
Operator relasi, logika dan kondisi akan banyak digunakan pada pernyataan berkondisi
BAB IV
PERNYATAAN (STATEMENTS)
Pernyataan ini merupakan bentuk pernyataan yang paling sering digunakan. Pernyataan ini
diakhiri dengan semicolon “ ; “.
Contoh : var = 166;
var++;
Untuk menggunakan suatu variable minimal variable tersebut dideklarasikan terlabih dahulu
Contoh : int var;
Merupakan contoh deklarasi sebuah variable var dengan tipe data integer (int).
Pernyataan goto, diperlukan untuk melakukan suatu lompatan ke suatu pernyataan berlabel
yang ditandai dengan tanda “ : “.
Contoh : goto bawah;
pernyataan1;
pernyataan2;
:bawah pernyataan 3;
Pada contoh diatas, pada saat goto ditemukan maka program akan melompat pernyataan
berlabel bawah dan melakukan pernyataan 3.
Bentuk umum:
if(kondisi) pernyataan1 ;
else pernyataan2;
Pernyataan1 dilaksanakan jika dan hanya jika kondisi yang diinginkan terpenuhi, jika tidak,
lakukan pernyataan2.
Jika anda tidak mempergunakan pernyataan else program tidak akan error, namun jika anda
mempergunakan pernyataan else tanpa didahului pernyataan if, maka program akan error.
Jika pernyataan1 atau pernyataan2 hanya terdiri dari satu baris, maka tanda { } tidak
diperlukan, namun jika lebih maka diperlukan.
Bentuknya menjadi :
if(kondisi)
{
pernyataan1;
pernyataan1a;
pernyataan1b;
}
else
{
pernyataan2;
pernyataan2a;
pernyataan2b;
}
Contoh :
#include <iostream.h>
void main()
{
int m = 166;
if(m == 0)cout<<”Nilainya sama dengan nol\n”;
else
{
cout<<”Nilainya tidak sama dengan nol\n”;
cout<<”Nilainya sama dengan “<<m<<endl;
}
}
Selain dari if … else, juga dikenal bentuk if … else if. Adapun perbedaannya diilustrasikan
oleh dua contoh dibawah ini.
Contoh 1 :
#include <iostream.h>
void main()
{
int m = 166;
if(m > 1000) cout<<m<<” lebih besar dari 1000\n”;
if(m > 100) cout<<m<<” lebih besar dari 100\n”;
if(m > 10) cout<<m<<” lebih besar dari 10\n”;
}
Keluarannya :
166 lebih besar dari 100
166 lebih besar dari 10
Contoh 2 :
#include <iostream.h>
void main()
{
int m = 166;
if(m > 1000) cout<<m<<” lebih besar dari 1000\n”;
else if(m > 100) cout<<m<<” lebih besar dari 100\n”;
else if(m > 10) cout<<m<<” lebih besar dari 10\n”;
}
Keluarannya :
166 lebih besar dari 100
Mengapa ? Karena contoh 2 sama saja jika ditulis seperti dibawah ini
#include <iostream.h>
void main()
{
int m = 166;
if(m > 1000) cout<<m<<" lebih besar dari 1000\n";
else
{
if(m > 100) cout<<m<<" lebih besar dari 100\n";
else if(m > 10) cout<<m<<" lebih besar dari 10\n";
}
}
switch(ekspresi)
{
case konstanta1 : pernyataan1;
case konstanta2 : pernyataan2;
case konstanta3 : pernyataan3;
:
:
case konstantaN : pernyataanN;
default : pernyataanlain;
}
Contoh :
// Program untuk melihat nilai akhir test
// Nilai A jika nilai diatas 80, B jika 70<= nilai <80
// C jika 50<= nilai <70, D jika 30<=nilai <50
// E jika nilai < 30
#include <iostream.h>
void main()
{
int nilai;
cout<<”Masukkan nilai test : “;
cin>>nilai;
switch(nilai/10)
{
case 10:
case 9:
case 8:cout<<’A’<<endl;break;
case 7:cout<<’B’<<endl;break;
case 6:
case 5:cout<<’C’<<endl;break;
case 4:
case 3:cout<<’D’<<endl;break;
case 2:
case 1:
case 0:cout<<’E’<<endl;break;
default:cout<<”Salah, nilai diluar jangkauan.\n”;
}
}
Keluaran :
Masukkan nilai test : 45
D
Masukkan nilai test : 450
Salah, nilai diluar jangkauan.
Masukkan nilai test : nilai_test
Salah, nilai diluar jangkauan.
Ket : 45, 450 dan nilai_test adalah hasil input dari user
Bentuk :
While(kondisi)
{
pernyataan
}
Contoh:
#include <conio.h>
#include <iostream.h>
#define TINGGI 5
#define LEBAR 10
// Program menggambarkan karakter khusus pada sebuah
// koordinat yang ditentukan
void main()
{
char matrix[TINGGI][LEBAR];
int x,y;
for(y=0;y<TINGGI;y++)
for(x=0;x<LEBAR;x++)matrix[y][x]='.';
Penjelasan :
Program ini adalah program menggambar karakter [] jika dicompile di Turbo C++ atau
mengambar ♂ jika dicompile di Borland C++. ( ditunjukkan oleh karakter ’xBO’ ).
Karena adanya pernyataan while(x>=0 && y>=0), maka program
akan langsung mengeksekusi pernyataan
cout<<"Koordinat : ";
cin>>x>>y;
matrix[y-1][x-1]='\xBO';
jika user memasukkan bilangan negatif.
Pada program diatas terdapat fungsi getch(). Gunanya adalah untuk memberhentikan keluaran
program sampai user menekan tombol keyboard. Untuk menggunakannya, file conio.h harus
diinclude.
Bentuk :
do{
pernyataan;
} while(kondisi);
Terlihat, walaupun kondisi tidak terpenuhi, maka pernyataan minimal akan dieksekusi sekali.
Contoh :
#include <iostream.h>
#include <conio.h>
#include <math.h>
double A[100];
do
{
A[++i]=p%2;
p=p/2;
floor(p);
} while (p>1);
cout<<"Nilai binernya : ";
cout<<p;
for(n=i;n>=1;n--)
{
cout<<A[n];
}
getch();
}
Penjelasan :
Coba anda masukkan bilangan negatif.
Itulah letak kesalahan program ini ( sekaligus untuk menunjukkan sifat dari do…while )
Jika anda memasukkan bilangan positif, maka program ini akan menghasilkan nilai biner yang
bersesuaian dengan nilai desimal yang anda masukkan.
Bentuk :
for( inisialisasi ; kondisi ; perubahan)
{
pernyataan;
}
Selama kondisi terpenuhi, maka pernyataan akan terus dieksekusi. Bila pernyataan hanya terdiri
atas satu baris pernyataan, maka tanda kurung { } tidak diperlukan.
Contoh :
//Program mencetak angka 1-100
#include <iostream.h>
void main()
{
for(int x=1 ; x<=100 ; x++) cout<<x<<endl;
}
#include <iostream.h>
void main()
{
for(int x=1 ; ;x++) cout<<x<<endl;
}
Program diatas akan menampilkan bilangan yang banyaknya tak terhingga sehingga dapat
membuat komputer anda berhenti bekerja. Contoh diatas juga merupakan prinsip membuat bom
program ( contohnya : bom mail )
Pernyataan for dapat berada di dalam pernyataan for lainnya yang biasa disebutnested for
Contoh :
// Program menghasilkan segitiga pascal
#include <iomanip.h>
#include <conio.h>
#include <iostream.h>
main()
{
unsigned int n,a,b,x,s[100],p[100];
cout<<"Masukkan nilai n: "; cin>>n;
for(a=0,x=0;a<=n;a++,x+=2)
{
cout<<setw(3*n-x);
s[a]=1;
p[a]=1;
for(b=0;b<=a;b++)
{
if (b<1||b==a) cout<<"1"<<setw(4);
else
{
s[b]=p[b];
p[b]=s[b-1]+s[b];
cout<<p[b]<<setw(4);
}
cout<<endl;
}
getch();
return 0;
Pernyataan continue digunakan untuk pergi ke bagian awal dari blok loop untuk memulai
iterasi berikutnya.
Contoh :
#include <iostream.h>
void main()
{
int n;
for(;;)
{
cout<<”Masukkan bilangan integer : “; cin>>n;
if(n % 2 == 0) continue;
else if(n % 5 == 0) break;
cout<<”\tLanjutkan loop berikutnya.\n”;
}
cout<<”Akhiri Loop.\n”;
}
Keluarannya :
Masukkan bilangan integer : 9
Lanjutkan loop berikutnya
BAB V
FUNGSI
Fungsi adalah sekumpullan perintah operasi program yang dapat menerima argumen input
dan dapat memberikan hasil output yang dapat berupa nilai ataupun sebuah hasil operasi.
Nama fungis yang didefinisikan sendiri oleh pemrogram tidak boleh sama dengan nama
build-in function pada compiler C++.
Fungsi digunakan agar pemrogram dapat menghindari penulisan bagian program ( kode )
berulang-ulang, dapat menyusun kode program agar terlihat lebih rapi dan kemudahan dalam
debugging program.
Contoh :
// Fungsi kuadrat
// tipe_return nama_fungsi (tipe_argument argumen)
float kuadrat ( float x )
{
return x*x;
}
Fungsi yang didefinisikan oleh pemrogram terdiri atas dua bagian, yaitu judul ( header) dan
isi ( body ). Judul dari sebuah fungsi terdiri dari tipe return ( float ), nama fungsi ( kuadrat ) dan
list parameter ( float x ).
Jadi, judul untuk fungsi kuadrat adalah
Isi dari sebuah fungsi adalah blok kode yang mengikuti judulnya. Berisi kode yang
menjalankan aksi dari fungsi, termasuk pernyataan return yang memuat nilai fungsi yang akan
dikembalikan ke yang memanggilnya, Isi dari fungsi kuadrat() adalah
{
return x*x;
}
Biasanya isi dari fungsi cukup besar. Meskipun demikian, judulnya tetap hanya berada dalam
satu baris. Isi dari sebuah fungsi dapat memanggil fungsi itu sendiri ( disebut rekursif ) atau
memanggil fungsi lainnya.
Pernyataan return dari sebuah fungsi mempunyai dua manfaat, yaitu akan mengakhiri fungsi
dan mengembalikan nilainya ke program pemanggil. Bentuk umum pernyataan return adalah :
return ekspresi;
Dengan ekspresi adalah sebuah ekspresi yang nilainya dinyatakan untuk sebuah variable
yang tipenya sama seperti tipe return. Terdapat juga fungsi yang tidak memberikan nilai return
atau tipe returnnya void.
Contoh :
#include <iostream.h>
void sayHello(char[]) ; // deklarasi fungsi sayHello()
void main()
{
char n[50];
cout<<"Masukkan nama anda : "; cin>>n;
sayHello(n);
}
Pengertian deklarasi fungsi berbeda dengan dengan definisi fungsi. Suatu deklarasi fungsi
adalah judul fungsi yang sederhana yang diikuti oleh tanda semicolon ( ; ). Sedangkan definisi
fungsi adalah fungsi yang lengkap, terdiri dari judul dan isinya. Suatu deklarasi fungsi disebut
juga sebagai prototype fungsi.
Suatu deklarasi fungsi seperti layaknya suatu deklarasi variabel, yang
memberitahucompiler semua informasi yang dibutuhkan untuk mengkompilasi
file. Compiler tidak perlu mengetahui bagaimana fungsi bekerja, yang perlu diketahui adalah
nama fungsi, jumlah dan tipe parameternya, dan tipe balikannya ( return ). Hal ini merupakan
informasi yang dimuat secara lengkap dalam judul fungsi.
Juga seperti sebuah deklarasi variabel, suatu deklarasi fungsi harus muncul diatas semua
nama fungsi yang digunakannya. Berbeda dengan definisi fungsi, yang dapat diletakkan terpisah
dari deklarasinya, dan dapat muncul dimana saja diluar fungsi main() dan biasanya dituliskan
setelah fungsi main() atau dalam file terpisah yang jika ingin digunakan tinggal menambahkan
prepocessor #include “nama_file” pada file utama.
Jika definisi fungsi diletakkan diatas fungsi main() maka deklarsi fungsi tidak diperlukan.
Variabel-variabel yang di list di dalam parameter fungsi disebut parameter-parameter formal
atau argumen-argumen formal. Variabel lokal seperti ini hanya ada selama eksekusi fungsi yang
bersangkutan. Dalam contoh dibawah, parameter-parameter formalnya adalah x dan y.
Variabel yang dilist dalam pemanggilan fungsi disebut parameter-parameter actual atau
argumen-argumen aktual. Sama seperti variabel lainnya dalam program utama, variabel-variabel
tersebut harus dideklarasikan sebelum digunakan dalam pemanggilan. Dalam contoh dibawah,
parameter-parameter aktualnya adalah m dan n.
Contoh :
// Penggunaan Fungsi Rekursif :
// Program mengecek sebuah bilangan integer atau bukan
#include <iostream.h>
#include <conio.h>
#include <math.h>
void cekInt(double);
void main()
{
double angka;
cout<<"Masukan sebuah angka :";cin>>angka;
cekInt(angka);
}
void cekInt(double n)
{
if(n>1)cekInt(n-1);
else if(n<1)cekInt(-n-1);
else
{
if(n>0&&n<1)cout<<n<<"\t Bukan bilangan bulat\n";
else cout<<n<<"\t Bilangan bulat\n";
}
}
Keluaran :
Masukkan sebuah angka : 57
Bilangan bulat
Masukkan sebuah angka : 0.57
Bukan bilangan bulat
Masukkan sebuah angka : -24
Bilangan bulat
Salah satu keistimewaan C++ yang sangat bermanfaat dalam pemrograman adalah adanya
kemampuan untuk menyetel nilai default
Argumen fungsi. Argumen-argumen yang mempunyai nilai bawaan nantinya dapat tidak
disertakan di dalam pemanggilan fungsi dan dengan sendirinya C++ akan menggunakan nilai
bawaan dari argumen yang tidak disertakan.
Contoh :
#include <iostream.h>
#include <conio.h>
void sayHello(int);
void main()
{
sayHello();
}
Penjelasan :
Jika pada program, argumen sayHello tidak diberikan, maka program akan menampilkan
Halloo …J
Sebanyak satu kali, namun jika argumen pada fungsi sayHello diberikan,
misalkansayHello(4), maka program akan menampilkan
Halloo …J
Halloo …J
Halloo …J
Halloo …J
Misalkan :
Fungsi – fungsi matematika, anda harus meng-include file math.h
Fungsi – fungsi pengolah string dan karakter, anda harus meng-include file string.h
Fungsi clrscr(), getch(), getche() dalam file conio.h
BAB VI
ARRAY, STRING & POINTER
6.1 ARRAY
Array adalah kumpulan data-data beripe sama dan menggunakan nama yang sama. Dengan
menggunakan rray, sejumlah variabel dapat memakai nama yang sama. Antara satu variabel
dengan variabel yang lain di dalam array dibedakan berdasarkan subscript.
Sebuah subscript berupa bilangan didalam tanda kurung siku. Melalui subscript inilah masing-
masing elemen array dapat diakses. Nilai subscribe pertama secara default adalah 0.
C++ tidak mengecek array. Bila anda menyatakan int x[10], ini artinya 10 elemen yang
dimulai dari 0. Karena itu elemen terakhir array adalah x[9]. Bila anda salah mereferensikannya
dengan x[10], anda akan mendapatkan harga yang tidak terpakai. Akan lebih buruk lagi jika anda
memberikan harga ke x[10], yang tidak dapat diterima.
ujian[0] = 90;
ujian[1] = 95;
ujian[2] = 78;
ujian[3] = 85;
Perhatikan :
· Tanda kurung [ ] digunakan untuk menunjukkan elemen array
· Perhitungan elemen array dimulai dari 0, bukan 1
Empat pernyataan diatas memberikan nilai kepada array ujian. Tetapi sebelum kita
memberikan nilai kepada array, kita harus mendeklarasikannya terlebih dahulu, yaitu :
int ujian[4];
Elemen terakhir dari array diisi dengan karakter ‘\0’. Karakter ini memberitahu kompiler
bahwa akhir dari elemen array telah dicapai. Walaupun pemrogram tidak dapat melihat karakter
ini secara eksplisit, namun kompiler mengetahui dan membutuhkannya.
Sekarang kita akan membuat daftar beberapa nama pahlawan di Indonesia
char pahlawan[3][15] ;
char pahlawan[0][15] = “Soekarno”;
char pahlawan[1][15] = “Diponegoro”;
char pahlawan[2][15] = “Soedirman”;
Array diatas terlihat berbeda denga contoh array pertama kita. Perhatikan bahwa pada
array pahlawan memilii dua buah tanda kurung [ ][ ]. Array seperti itu disebut array dua dimensi.
Tanda kurung pertama menyatakan total elemen yang dapt dimiliki oleh array pahlawan dan
tanda kurung kedua menyatakan total elemen yang dapat dimiliki setiap elemen array pahlawan.
Dalam contoh diatas, tanda kurung kedua menyatakan karakter yang menyatakan nama
pahlawan.
akan mengembalikan nilai 4, yaitu sama dengan jumlah elemen yang dimiliki arrayarray.
Contoh :
#include <iostream.h>
void ubah(int x[]);
void main()
{
int ujian[] = {90,95,78,85};
ubah(ujian);
cout<<" Elemen kedua dari array ujian adalah "<<ujian[1]<<endl;
}
6.2 POINTER
Poiter adalah variable yang berisi alamat memori variable lain dan sevara tidak langsung
menunjuk ke variable tersebut.
Analoginya – sebagai contoh – Andi berteman dengan Budi, lalu anda ingin mengetahui
jumlah keluarga Budi untuk keperluan sensus penduduk. Anda tidak mengetahui alamat Budi,
tetapi anda mengenal Andi. Untuk mencari jumlah keluarga Budi, maka pertama-tama anda pergi
kerumah Andi, misalnya dirumah no 8321. Sesampai di Andi, Andi membaritahukan kepada
anda bahwa alamat Budi ada pada alamat 9821. Kemudian anda pergi ke rumah Budi la> {
cout<<”Array[“<<n<<”] = “<<array[n]<<endl;
cout<<”\tMenggunakan pointer = “<<*(array+n)<<endl;
cout<<”\tDisimpan dalam “<<array+n<<endl;
}
}
Keluarannya :
Array[0] = 10
Menggunakan pointer = 10
Disimpan dalam 0xdb72408
Array[1] = 20
Menggunakan pointer = 20
Disimpan dalam 0xdb7240a
Array[2] = 30
Menggunakan pointer = 30
Disimpan dalam 0xdb7240c
Array[3] = 40
Menggunakan pointer = 40
Disimpan dalam 0xdb7240e
Mengapa hasil antara dua contoh diatas sama namun sintaksnya berbeda ? Karena array itu
sebenarnya telah menunjuk ke alamat memori setiap elemennya, sehingga untuk mengetahui
alamat memori setiap elemen array cukup denganarray + n dengan n bilangan bulat ( integer ).
Keluarannya :
Nama awal : Andi
Jadi :
· String adalah array (susunan) dari karakter-karakter
· String dapat diakses dan dimanipulasi lewat pointer
· Alamat awal dari string dapat diperoleh dari namanya
Contoh :
#include <iostream.h>
void ubah(char *);
void main()
{
char *ptr,nama[5] = “Andi”;
ptr = nama; // ptr sebagai pointer ke variable nama
cout<<”Nama awal : “<<nama<<endl;
ubah(ptr);
cout<<”Nama menjadi : “<<nama<<endl;
}
Keluarannya :
Nama awal : Andi
Nama menjadi : Andy
6.2.4 Alias
Alias adalah nama lain dari suatu variable. Jika suatu perubaha terjadi pada variable alias
maka akan berpengaruh kepada variable asli dan begitu juga sebaliknya.
Contoh :
#include <iostream.h>
void main()
{
int uang =10000;
int &duit = uang;
cout<<”Nilai uang Rp.“<<uang<<endl;
cout<<”Nilai duit Rp.“<<duit<<endl;
uang = 9000;
cout<<”Uang dibelikan es krim Rp.1000, nilainya menjadi Rp.“<<uang<<endl;
cout<<”Nilai duit juga berubah menjadi Rp.“<<duit<<endl;
}
Keluarannya :
Nilai uang Rp.10000
Nilai duit Rp.10000
Uang dibelikan es krim Rp.1000, nilainya menjadi Rp.9000
Nilai duit juga berubah menjadi Rp.9000
Penjelasan :
Perubahan pada uang menyebabkan perubahan pada duit karena duit memiliki alamat memori
yang sama dengan uang. Jadi jika isi dari alamat memori uang atau duit berubah, maka nilai
variable duit atau uang juga akan ikut berubah.
atau
Keluarannya :
Array[0] = 10
Menggunakan pointer = 10
Disimpan dalam 0xdb72408
Array[1] = 20
Menggunakan pointer = 20
Disimpan dalam 0xdb7240a
Array[2] = 30
Menggunakan pointer = 30
Disimpan dalam 0xdb7240c
Array[3] = 40
Menggunakan pointer = 40
Disimpan dalam 0xdb7240e
Mengapa hasil antara dua contoh diatas sama namun sintaksnya berbeda ? Karena array itu
sebenarnya telah menunjuk ke alamat memori setiap elemennya, sehingga untuk mengetahui
alamat memori setiap elemen array cukup denganarray + n dengan n bilangan bulat ( integer ).
Keluarannya :
Nama awal : Andi
Nama menjadi : Andy
Jadi :
· String adalah array (susunan) dari karakter-karakter
· String dapat diakses dan dimanipulasi lewat pointer
· Alamat awal dari string dapat diperoleh dari namanya
Contoh :
#include <iostream.h>
void ubah(char *);
void main()
{
char *ptr,nama[5] = “Andi”;
Keluarannya :
Nama awal : Andi
Nama menjadi : Andy
6.2.4 Alias
Alias adalah nama lain dari suatu variable. Jika suatu perubaha terjadi pada variable alias
maka akan berpengaruh kepada variable asli dan begitu juga sebaliknya.
Contoh :
#include <iostream.h>
void main()
{
int uang =10000;
int &duit = uang;
cout<<”Nilai uang Rp.“<<uang<<endl;
cout<<”Nilai duit Rp.“<<duit<<endl;
uang = 9000;
cout<<”Uang dibelikan es krim Rp.1000, nilainya menjadi Rp.“<<uang<<endl;
cout<<”Nilai duit juga berubah menjadi Rp.“<<duit<<endl;
}
Keluarannya :
Nilai uang Rp.10000
Nilai duit Rp.10000
Uang dibelikan es krim Rp.1000, nilainya menjadi Rp.9000
Nilai duit juga berubah menjadi Rp.9000
Penjelasan :
Perubahan pada uang menyebabkan perubahan pada duit karena duit memiliki alamat memori
yang sama dengan uang. Jadi jika isi dari alamat memori uang atau duit berubah, maka nilai
variable duit atau uang juga akan ikut berubah.
atau
Keterangan :
· Argc : Beisi jumlah parameter baris ditambah 1
· Argv : Berisi daftar nama argumen dan program, dengan rincian sebagai berikut :
Ø argv[0] menunjuk nama program, lengkap dengan alamat path
Ø argv[1] menunjuk argumen pertama ( kalau ada )
Ø argv[n[ menunjuk argumen ke-n ( kalau ada)
Contoh :
// beri nama tes.cpp
#include<iostream.h>
void main(int argc, char *argv[])
{
for(int a=0;a<argc;a++)cout<<”argv[“<<a<<”] = “<<argv[a]<<endl;
}
Penjelasan :
Setelah dicompile dan di link akan muncul file tes.exe, misalkan anda simpan di d:\tes.exe
Buka command prompt, pindah ke direktori d:\ ketikkan
Tes argumen1 argument2 argument3, maka akan muncul tampilan
argv[0] = D:\TES.EXE
argv[1] = argument1
argv[2] = argument2
argv[3] = argument3
Dibawah ini diberikan contoh penggunaan argumen baris perintah yang lain, supaya anda
lebih memahami
Contoh :
// Program mengubah nilai desimal ke biner
// Simpan dengan nama dec2bin.cpp
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
void main(int argc, char *argv[])
{
if(argc !=2)
{
cerr<<"Pemakaian : dec2bin angka";
exit(1);
}
int p = atoi(argv[1]),n,i=0;
double A[100];
do
{
A[++i]=p%2;
p=p/2;
floor(p);
} while (p>1);
cout<<"Nilai binernya : ";
cout<<p;
for(n=i;n>=1;n--)
{
cout<<A[n];
}
getch();
}
Jika anda ketikkan dec2bin 4, maka outputnya Nilai binernya : 100
BAB VII
OPERASI FILE
Ada kalanya seorang programmer harus berhubungan dengan file. Sebagai contoh pada saat
pembuatan program database, seorang programmer menyimpan data pada sebuah file dan pada
kemudian waktu data tersebut dikeluarkan untuk diolah. Pada prinsipnya operasi yang dilakukan
pada file terdiri dari tiga tahap, yaitu :
1. Membuka file
2. Melakukan pemrosesan pada file
3. Menutup file
Dalam melakukan operasi file, programmer membutuhkan fungsi – fungsi yang berhubungan
dengan operasi file yang terdapat pada file fstream.h. Oleh sebab itu, untuk dapat melakukan
operasi file, maka prepocessor directive berikut ditambahkan.
#include <fstream.h>
Pembukaan dari suatu file mempunyai dua tujuan, yaitu membaca isi file atau untuk
menulis ke dalam file tersebut. Dalam C++ penanganan pembukaan file untuk membaca atau
menulis ke dalam file berbeda.
ifstream file_objek;
file_objek.open(“nama_file”);
ifstream file_objek(“nama_file”);
ofstream file_objek;
file_objek.open(“nama_file”);
ofstream file_objek(“nama_file”);
Modus Keterangan
ios::app Membuka file dengan modus keluaran
dan memungkinkan operasi penambahan
data pada file yang telah ada. Jika file
belum ada, maka membuat file baru.
ios::ate Membuka file dengan modus masukan
dan keluaran. Secara otomatis
menempatkan pointer file ke posisi akhir
file
ios::in Membuka file dengan modus masukan.
Penggunaannya sama dengan ifstream.
ios::out Membuka file dengan modus keluaran.
Penggunaannya sama dengan ofstream.
ios::nocreate Membuka file yang sudah ada. Jika file
yang akan dibuka belum ada, maka C++
tidak akan membuat file baru.
ios::noreplace Membuka file baru. Jika file sudah ada
maka operasi pembukaan menjadi gagal.
Jika file belum ada, maka akan dibuat file
baru. Hal ini bertentangan dengan
ios::nocreate
ios::trunc Menghapus file yang sudah ada dan
menciptakan file baru (replace)
ios::binary Membuka file dengan operasi baca-tulis
secara binary.
Adapun contoh penggunaan dari modus – modus pembukaan file diatas adalah sebagai
berikut :
Pernyataan diatas adalah dekalarasi file nama_file dengan sehinggan nama_file dapat dibaca
dan ditulisi.
Setelah file dibuka, maka dilakukan pemrosesan pada file yang telah dibuka tersebut, antara
lain :
Contoh :
#include<iostream.h>
#include<fstream.h>
void main()
{
ofstream file_objek;
file_objek.open("latihan.txt");
cout<<"Latihan menulis ke dalam sebuah file\n";
for(int i=1;i<11;i++)
file_objek<<"Ini adalah baris ke "<<i<<endl;
file_objek.close();
}
Pada direktori dimana anda men-save file tersebut akan terdapat sebuah file bernama
latihan.txt
Contoh :
#include<iostream.h>
#include<fstream.h>
void main()
{
const int MAX = 80;
char buffer[MAX+1];
ifstream file_objek;
file_objek.open("latihan.txt");
cout<<"Membaca isi file latihan.txt\n";
while(file_objek)
{
file_objek.getline(buffer,MAX);
cout<<buffer<<endl;
}
}
C++ menyediakan sejumlah fungsi yang berguna untuk memeriksa kondisi-kondisi pada
operasi file, sehingga kejadian kesalahan pada saat eksekusi dapat dikendalikan.
Contoh :
/* Program ini menghasilkan output yang sama dengan program
pada contoh 7.2.2 */
#include<iostream.h>
#include<fstream.h>
void main()
{
const int MAX = 80;
char buffer[MAX+1];
ifstream file_objek;
file_objek.open("latihan.txt");
cout<<"Membaca isi file latihan.txt\n";
while(!file_objek.eof())
{
file_objek.getline(buffer,MAX);
cout<<buffer<<endl;
}
}
Program pada contoh diatas sama saja dengan contoh program pada 7.2.2. Perbedaannya
hanya pada
while(file_objek) dan
while(!file_objek.eof())
while(file_objek) jika diartikan dalam bahasa sehari – hari adalah jika isi dari file_objek
(dalam hal ini, latihan.txt) masih ada, maka baca satu baris pada file latihan.txt lalu pindahkan
pointer satu baris ke bawah. Jika isi pada baris tersebut tidak ada, maka hentikan loop.
Sedangkan pada while(!file_objek.eof()) dapat diartikan, jika pointer tidak terdapat di baris
paling akhir dari file_objek, maka lanjutkan loop. Jika tidak, maka hentikan loop.
Setelah pemrosesan file berakhir, maka file perlu ditutup. Langkah ini dilakukan dengan cara
file_objek.close();
Pemakaian fungsi close() sifatnya optional. Bila anda tidak mempergunakannya, compiler
tidak akan mengeluarkan pesan error.
Dibawah ini diberikan contoh – contoh penggunaan operasi file pada suatu system operasi.
Contoh :
if (argc!=3)
{
cerr<<"Pemakaian : cp file_yang_akan_dikopi file_baru\n";
exit(1);
}
strupr(argv[1]);
ifstream input(argv[1], ios::binary);
ofstream output(argv[2], ios::binary);
if (!input)
{
cerr<<"File yang akan dikopi tidak ada, periksa kembali !!!\n";
exit(1);
}
for(;;)
{
input.read(buffer,max);
output.write(buffer,max);
if(input.eof())break;
}
input.close();
output.close();
}
ifstream input;
input.open(namafile);
while(!input)
{
cerr<<"File Not Found !!!\n";
exit(1);
}
while (!input.eof())
{
input.getline(buffer,max);
cout<<buffer<<endl;
}
input.close();
getch();
}
BAB VIII
STRUKTUR & UNION
8.1 STRUKTUR
Array adalah kumpulan elemen yang bertipe sama. Tetapi struktur memudahkan Anda untuk
mengumpulkan variable dengan tipe yang berbeda di dalam satu nama. Fasilitas ini
memungkinkan kita untuk melayani sekumpulan data yang rumit sebagai satuan tunggal
Suatu struktur dinyatakan dengan kata kunci struct, daftar pernyataan variable yang disebut
anggota, yang terlampir dalam tanda kurung { }. Tiap pernyataan anggota dan struktur harus
berakhir dengan semicolon ( ; ).
Struct nama_struct
{
anggota_struktur ;
};
Apabila suatu struktur telah dideklarasikan, struktur ini dapat digunakan untuk mendefinisikan
suatu varibel, misalnya :
nama_struct variabel_struktur;
variabel_struktur.anggota
Contoh :
#include <iostream.h>
void main()
{
struct keluarga
{
char suami[15];
char istri[15];
int jumlah_anak;
};
Keluarannya :
Jumlah anak Bapak Andi 3
Istri Bapak Budi ialah Ana
Contoh :
#include <iostream.h>
void main()
{
struct mahasiswa
{
long nim;
int nilai;
};
mahasiswa teknik[3];
teknik[0].nim = 19500376;
teknik[0].nilai = 78;
teknik[1].nim = 19500378;
teknik[1].nilai = 71;
teknik[2].nim = 19500276;
teknik[2].nilai = 76;
Keluarannya :
NIM NILAI
19500376 78
19500378 71
19500276 76
Contoh :
#include <iostream.h>
void main()
{
struct kuliah
{
char kuliah1[30];
char kuliah2[30];
struct kuliah *ptr;
};
kuliah semester[3] =
{{"Komputer 207","Matematika 217",&semester[1]},
{"Electronic 210","Sistem Kendali 303",&semester[2]},
{"Analisis Numerik 301","Telekomunikasi 367",&semester[0]}};
int n;
for(n=0; n<3;n++)
{
cout<<"Isi sedang menujuk ke : ";
cout<<semester[n].ptr->kuliah1<<endl;
}
}
Keluarannya :
Isi sedang menunjuk ke : Electronic 210
Isi sedang menunjuk ke : Analisis Numerik 301
Isi sedang menunjuk ke : Komputer 207
Contoh :
#include <iostream.h>
void main()
{
struct anak
{
char pria[15];
char wanita[15];
};
struct keluarga
{
char suami[15];
char istri[15];
struct anak ;
}
Keluarannya :
Anak laki-laki Andi Tedi
Putri Bapak Budi Caecilia
8.2 UNION
Union menyerupai struktur, namun mempunyai perbedaan yang nyata. Union biasa dipakai
untuk menyatakan suatu memori dengan nama lebih dari satu. Sebagai gambaran, sebuah union
dideklarasikan sebagai berikut :
union bila_bulat
{
unsigned int di;
unsigned char dc[2];
}
Pada pendeklarasian seperti ini, di dan dc menempati memori yang sama. Untuk lebih
jelasnya, perhatikan contoh berikut :
Contoh :
#include <iostream.h>
#include <conio.h>
void main()
{
union bil_bulat
{
unsigned int di;
unsigned char dc[2];
};
bil_bulat bil;
bil.di = 0x2345;
cout<<setiosflags(ios::showbase);
cout<<hex<<”di : “<<bil.di<<endl;
cout<<hex<<”dc[0] : “<<bil.dc[0]<<endl;
cout<<hex<<”dc[1] : “<<bil.dc[1]<<endl;
}
Keluarannya :
di : 0x2345
dc[0] : 0x45
dc[1] : 0x23
Keterangan :
setiosflags(ios::showbase) mengembalikan basis hitung yang digunakan. Hex membuat basis
hitung menjadi heksadesimal.
BAB IX
KELAS
Kelas merupakan struktur data dari objek. Untuk menjelaskan tentang kelas, akan kita
bandingkan bentuk antara struktur dan kelas.
BENTUK
KELAS STRUKTUR
public :
fungsi_anggota;
};
PERBEDAAN
KELAS STRUKTUR
Terdapat anggota data dan fungsi Hanya terdapat anggota data
anggota. Anggota data biasanya berupa
variabel dan fungsi anggota biasanya
berupa fungsi.
Terdapat kata-kata Hak akses pada struktur sama seperti
kunci private danpublic yang hak akses public pada kelas
menentukan hak akses bagi anggota-
anggota di dalam kelas.
Private dapat digunakan di dalam kelas
untuk memproteksi anggota-anggota
tertentu dari kelas, agar tidak dapat
diakses dari luar kelas secara langsung.
Private merupakan default dari kelas.
Public mengizinkan anggota-anggota
yang berada didalamnya bebas di akses
dari luar kelas
Konsep penggabungan data dan fungsi seperti diatas disebut encapsulasi, yang diterapkan
dalam C++ dengan tipe turunan.
Contoh Kelas :
#include <iostream.h>
#include <string.h>
class penduduk
{
private:
int id;
char nama[80];
public:
void tampilkan(void)
{
cout<<”No. KTP : “<<id<<endl;
cout<<”Nama : “<<nama<<endl;
}
void set(int idn, char *n)
{
id = idn;
strcpy(nama,n);
}
};
void main()
{
penduduk saya;
saya.set(1234,”Andi”);
saya.tampilkan();
}
#include <iostream.h>
#include <string.h>
class penduduk
{
private:
int id;
char nama[80];
public:
void tampilkan();
void set(int idn, char *n);
};
void main()
{
penduduk saya;
saya.set(1234,”Andi”);
saya.tampilkan();
}
Penjelasan :
Saya merupakan objek dari class penduduk.Pada contoh 2 fungsi didefinisikan diluar, oleh
karena itu pada pendefinisian fungsi harus memiliki bentuk :
Hal ini untuk memberitahu kompiler bahwa fungsi tersebut merupakan anggota dari
kelasnama_kelas. Simbol ( :: ) merupakan operator resolusi lingkup.
9.3 KONSTRUKTOR
Konstruktor adalah fungsi anggota yang mempunyai nama yang sama dengan nama kelas.
Kegunaannya :
Mengalokasikan ruang bagi sebuah objek
Memberikan nilai awal terhadap anggota data suatu objek
Membentuk tugas-tugas umum lainnya
Contoh :
#include <iostream.h>
class jumlah
{
public:
int jumlah1;
int jumlah2;
jumlah();
};
jumlah objek1,objek2;
void main()
{
cout<<”Didalam main() \n”;
cout<<”objek1.jumlah1 adalah “<<objek1.jumlah1<<endl;
cout<<”objek1.jumlah2 adalah “<<objek1.jumlah2<<endl;
cout<<”objek2.jumlah1 adalah “<<objek2.jumlah1<<endl;
cout<<”objek2.jumlah2 adalah “<<objek2.jumlah2<<endl;
}
jumlah::jumlah()
{
cout<<”Didalam jumlah() \n”;
}
Keluarannya :
Didalam jumlah()
Didalam jumlah()
Didalam main()
objek1.jumlah1 adalah 0
objek1.jumlah2 adalah 0
objek2.jumlah1 adalah 0
objek2.jumlah2 adalah 0
Kesimpulan :
· Nama konstruktor sama dengan nama kelas
· Konstruktor tidak mempunyai nilai balik
· Konstruktor harus diletakkan di bagian public, coba saja anda meletakkan konstruktor dalam
contoh diatas dibagian private.
· Konstruktor dijalankan dengan sendirinya pada saat objek diciptakan ( dalam contoh diatas
yaitu objek1 dan objek2). Bahkan konstruktor dijalankan sebelum fungsi main() dijalankan.
9.4 DESTRUKTOR
Destruktor adalah fungsi anggota yang mempunyai nama yang sama dengan nama kelas
ditambah symbol tilde ( ~ ) didepannya.
Contoh :
#include <iostream.h>
class jumlah
{
public:
int jumlah1;
int jumlah2;
~jumlah();
};
jumlah objek1,objek2;
void main()
{
cout<<”Didalam main() \n”;
cout<<”objek1.jumlah1 adalah “<<objek1.jumlah1<<endl;
cout<<”objek1.jumlah2 adalah “<<objek1.jumlah2<<endl;
cout<<”objek2.jumlah1 adalah “<<objek2.jumlah1<<endl;
cout<<”objek2.jumlah2 adalah “<<objek2.jumlah2<<endl;
}
jumlah::~jumlah()
{
cout<<”Didalam jumlah() \n”;
}
Keluarannya :
Didalam main()
objek1.jumlah1 adalah 0
objek1.jumlah2 adalah 0
objek2.jumlah1 adalah 0
objek2.jumlah2 adalah 0
Didalam jumlah()
Didalam jumlah()
Kesimpulan :
· Nama konstruktor sama dengan nama kelas ditambah tanda tilde ( ~ ) di depannya
· Destruktor tidak mempunyai nilai balik
· Destruktor harus diletakkan di bagian public, coba saja anda meletakkan destruktor dalam
contoh diatas dibagian private.
· Destruktor dijalankan dengan sendirinya pada saat objek akan sirna ( dalam contoh diatas
yaitu objek1 dan objek2).
C++ memungkinakan suatu kelas mewarisi data ataupun fungsi anggota kelas lain. Sifat
seperti ini disebut pewarisan. Kelas uyang mewarisi sifat kelas lain disebut kelas turunan (
derived class ). Sedangkan kelas yang mewariskan sifat ke kelas lain lain disebut kelas dasar (
base class ).
Untuk memahami tentang konsep pewarisan, marilah kita lihat contoh berikut ini.
#include <iostream.h>
#include <conio.h>
class Basis
{
private :
int alpha;
int bravo;
public :
void info_basis()
{
cout<<”info_basis() dijalankan…”<<endl;
}
};
void main()
{
clrscr();
Turunan anak;
anak.info_basis();
anak.info_turunan();
}
Keluarannya :
info_basis() dijalankan…
info_turunan() dijalankan…
Pada contoh diatas, terdapat kelas bernama Basis dan Turunan. Dalam hal ini :
· Basis adalah kelas dasar
· Turunan adalah kelas turunan
Kelas Turunan mewarisi sifat-sifat dari kelas Basis .
Perhatikan pernyataan pada main() :
Turunan anak;
Anak.info_basis();
Sekalipun info_basis() dideklarasikan pada kelas Basis, ia juga diwariskan pada kelas
Turunan. Namun bagaimana mekanisme pewarisannya? Jawaban dari pertanyaan ini terletak
pada topik berikut.
Pada pendeklarasian kelas Turunan terdapat baris sebagai berikut :
Pada baris ini terdapat kata-kata kunci tersebut pada konteks ini ? Untuk melihat kegunaan
kata-kata kunci ini, perhatikan terlebih dulu program berikut.
#include <iostream.h>
#include <conio.h>
class Basis
{
private :
int alpha;
int bravo;
public :
void info_basis()
{
cout<<”info_basis() dijalankan…”<<endl;
}
};
void main()
{
clrscr();
Turunan anak;
anak.info_basis();
anak.info_turunan();
}
Perbedaan program di atas dengan program sebelumnya terletak pada kata-kunci public. Pada
program diatas, kata kunci public pada baris yang berisi class Turunan dibuang.
Apabila program dikompilasi, kesalahan akan terjadi, yakni pada pernyataan :
anak.info_basis();
Kesalahan menyatakan bahwa Basis::info_basis() tidaklah dapat diakses pada main(). Lalu,
apa artinya?
Bentuk seperti :
Maksudnya yaitu semua anggota yang bersifat public ( dan juga protected ) pada kelas dasar (
Basis ) diwariskan ke kelas turunan ( Turunan ) sebagai anggota yang bersifat private.
Sedangkan kalau pewarisan dilakukan dengan public, semua anggota yang bersifat public pada
kelas dasar diwariskan ke kelas turunan seperti apa adanya pada kelas basis.