Anda di halaman 1dari 26

BAB VIII

FUNGSI

8.1. PENDAHULUAN
Pengertian program dalam bahasa C++ adalah merupakan kumpulan
fungsi-fungsi, baik yang didefinisikan langsung maupun yang disimpan
dalam suatu file header. Baik bahasa C maupun C++ sendiri mempunyai
fungsi utama yang disebut fungsi main. Fungsi main ini selalu ada dalam
setiap program C ataupun C++ dan compiler akan menjalankan program
melalui perintah-perintah yang terdapat dalam fungsi ini, untuk lebih
jelasnhya kita lihat gambar dibawah ini yang mengilustrasikan fungsi
dalam sebuah program;

Fungsi merupakan subprogram dan berguna menjadikan program dapat


lebih bersifat modular sehingga akan mudah dipahami dan dapat
digunakan kembali, baik untuk program itu sendiri maupun untuk program
lainnya yang memiliki proses yang sama. Dalam bahasa C++ fungsi
dibedakan menadi dua, yaitu user-defined function dan built in function.
User defined function adalah fungsi-fungsi yang didefinisikan sendiri,
sedangkan built-in function adalah fungsi-fungsi yang siap pakai yang
telah disediakan oleh compiler. Pada bab ini kita akan membahas lebih
dalam tentang pembuatan fungsi dalam C++ dan hal-hal yang
terkandung didalamnya.

FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
135

8.2. Fungsi Tanpa nilai balik.


Bahasa C++ tidak mengenal istilah procedure seperti pada saat kita
membuat program dalam bahasa PASCAL. Didalam bagasa PASCAL
sendiri procedure didefinisikan sebagai suatu proses yang tidak
mengembalikan nilai. Untuk melakukan itu dalam bahasa C++, maka kita
harus membuat suatu fungsi dengan tipe void yang artinya tidak memiliki
nilai balik (return value). Format penulisannya adalah sebagai berikut;
void nama_fungsi (parameter1, parameter2, …….) {
Statemen_yang_akan_dilakukan;
…..
}

Adapun format penulisan secara umum adalah;

nama_fungsi (nilai_parameter1, nilai_parameter2, …….);

Untuk lebih memahaminya, baiklah kita perhatikan contoh program


dibawah ini;

# include <iostream.h>
//Membuat fungsi dengan nama Replika
void Replika() {
for (int C = 0; C < 8; C++) {
cout<<" Aku Mahasiswa Teknik Informatika “<<endl;
}
}
//Fungsi utama dalam program C++
int main() {
//Memanggil fungsi Replika unuk dieksekusi
Replika();
return 0;
}

Hasil output dari program diaras adalah sebagai berikut;

Aku Mahasiswa Teknik Informatika


Aku Mahasiswa Teknik Informatika
Aku Mahasiswa Teknik Informatika
Aku Mahasiswa Teknik Informatika
Aku Mahasiswa Teknik Informatika
Aku Mahasiswa Teknik Informatika
Aku Mahasiswa Teknik Informatika
Aku Mahasiswa Teknik Informatika

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
136

8.3. Fungsi dengan nilai balik


Guna fungsi ini adalah untuk melakukan suatu proses yang dapat
mengembalikan sebuah nilai. Cara membuat fungsi ini kita harus
mendefinisikan tipe data dan nilai yang akan dikembalikan, untuk lebih
jelas dan memahaminya berikut ini format pembuatan fungsi yang
memiliki nilai balik;
tipe_data nama_fungsi (parameter1, parameter2, …….) {
Statemen_yang_akan_dilakukan;
…..
return nilai_yang_akan_dikembalikan;
}

Format penlisan untuk memanggil sebuah fungsi yang telah didefinisikan


sama seperti pada fungsi yang tidak mempunyai nilai balik.
Untuk penggunaan dalam program mari, kita perhatikan contoh program
dibawah ini;

Fungsi untuk mengembalikan nilai string

# include <iostream.h>
//Membuat fungsi sederhana yang mengembalikan tipe string
char CobaString() {
return “Ini sebuah nilai suatu fungsi”;
}

//Fungsi utama dalam program C++


int main() {
//Memanggil dan memanggil nilai fungsi
cout<<CobaString();

return 0;
}

Dan hasil Output dari contoh program diatas, kita menggunakan fungsi
pengembalian untuk fungsi string, adalah sebagai berikut;

Ini sebuah nilai suatu fungsi

Contoh lainya, perhatikan program dengan mengguakan fungsi untuk


mengembalikan dengan tipe bilangan, sebagai berikut;

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
137

Fungsi untuk mengembalikan nilai tipe bilangan

# include <iostream.h>
//Membuat fungsi sederhana yang mengembalikan tipe duble
char CobaBilangan() {
return (3.14 * 5);
}

//Fungsi utama dalam program C++


int main() {
//Memanggil dan memanggil nilai fungsi
cout<<”Nilai yang terdapat dalam fungsi : “<<CobaBilangan;

return 0;
}

Dan hasil Output dari contoh program diatas, kita menggunakan fungsi
pengembalian untuk tipe fungsi bilangan, adalah sebagai berikut;

Nilai yang terdapat dalam fungsi : 15.70

8.4. Fungsi dengan parameter


Beberapa contoh fungsi yang kita coba tidak memiliki parameter
sehingga tiap kita memanggil fungsi ini hasil yang kita peroleh selalu
bernilai tetap. Untuk itu marilah kita coba mencoba membuat fungsi yang
bersifat dinamis yaitu membuat fungsi dengan parameter sehingga
nantinya hasilnya juga bersifat dinamis. Parameter yang didefinisikan
sebuah fungsi disebut dengan fungsi parameter formal, sedangkan
parameter yang yang terdapat pada saat pemanggilan disebut dengan
parameter aktual. Jumlah serta tipe data antara parameter format dan
parameter aktual haruslah sesuai, jika tidak maka compiler akan
menampilkan pesan kesalahan. Sebelum terlalu jauh pembahasannya,
baiknya kita pahami terlebih dahulu beberapa jenis-jenis parameter itu
sendiri secara lebih baik.
8.4.a. Jenis parameter;
1. Parameter Masukan, sesuai namanya parameter ini digunakan
sebagai nilai masukan dalam sebuah fungsi. Nilai tersebut
kemudian akan diproses oleh fungsi untuk menghasilkan sebuah
nilai kembali (return value), Untuk lebih memahaminya, baiknya
kita perhatikan contoh program di bawah ini;

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
138

# include <iostream.h>
//Membuat fungsi derngan parameter bertipe masukan
int JLH1(int X) {
int hasil;
hasil = X + 1;
return hasil;
}
int main() {
/*Mendeklarasikan variabel yang akan digunakan sebagai nilai
Parameterpada saat pemanggilan */
int Bilangan, HASIL;
cout<<”Masukkan sebuah bilangan bulat : “<<endl;cin>>Bilangan;

HASIL = JLH1(Bilangan);
//Menampilkan nilai setelah proses dalam fungsi
cout<<”Nilai akhir : “<<HASIL;
return 0;
}

Dan hasil Output dari contoh program diatas, kita menggunakan fungsi
pengembalian untuk fungsi string, adalah sebagai berikut;

Masukkan sebuah bilangan bulat : 10


Nilai akhir : 11

2. Parameter Keluaran, adalah parameter ini digunakan


menampung nilai yang akan dikembalikan. Dengan kta lain
parameter ini berguna sebagai nilai keluaran dari sebuah fungsi.
Untuk lebih memahaminya, baiknya kita perhatikan contoh
program di bawah ini;

# include <iostream.h>
//Mendeklair parameter X sebagai masukan, dan hasil sebagai keluaran
int JLH1(int X, int hasil) {
hasil = X + 1;
return hasil;
}
int main() {
int Bilangan, HASIL;

cout<<”Masukkan sebuah bilangan bulat : “<<endl;cin>>Bilangan;

//Menampilkan nilai setelah proses dalam fungsi


cout<<”Nilai akhir : “<<JLH1(Bilangan,HASIL);

return 0;
}

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
139

Dan hasil Output dari contoh program diatas, kita menggunakan fungsi
pengembalian untuk fungsi string, adalah sebagai berikut;

Masukkan sebuah bilangan bulat : 10


Nilai akhir : 11

3. Parameter Masukan/Keluaran, jenis parameter ini adalah


parameter yang digunakan sebagai masukan dan juga keluaran.
Untuk lebih memahaminya, baiknya kita perhatikan contoh
program di bawah ini;

# include <iostream.h>
//Mendeklair parameter X sebagai masukan, dan juga sebagai keluaran
int JLH1(int X) {
X = X + 1;
return X;
}
int main() {
int Bilangan;

cout<<”Masukkan sebuah bilangan bulat : “<<endl;cin>>Bilangan;

//Menampilkan nilai setelah proses dalam fungsi


cout<<”Nilai akhir : “<<JLH1(Bilangan);

return 0;
}

Dan hasil Output dari contoh program diatas, kita menggunakan fungsi
pengembalian untuk fungsi string, adalah sebagai berikut;

Masukkan sebuah bilangan bulat : 10


Nilai akhir : 11

8.4.b. Melewatkan Parameter Berdasarkan Nilai (Pass By Value)


Dalam bahasa C++ ada dua cara untuk melewatkan parameter didalam
sebuah fungsi yaitu berdasarkan nilai (pass by value) dan berdasarkan
alamat (pass by reference). Disini kita akan membahas mengenai pass
by value terlebih dahulu. Sesuai dengan namanya fungsi iini akan
melewatkan nilai parameter kedalam sebuah fungsi untuk digunakan
sesuai proses yang terdapat dalam fungsi tersebut. Jika kita melewatkan
parameter dengan cara ini maka nilai yang dihasilkan oleh fungsi tidak
akan mempengaruhi nilai yang terdapat dalam program (diluar fungsi

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
140

tersebut). Ini deisebabkan karena pada saat pemanggilan fungsi compiler


hanya akan membuat salinan (copy) dari nilai yang tedapat pada
parameter actual ke parameter formal. Dengan kata lain dalam hal ini
yang akan diubah hanya nilai didalam fungsi saja, Agar anda lebih
memahaminya sebaiknya mari kita sumac contoh program berikut;

# include <iostream.h>
//Membuat fungsi dengan melewatkan nilai X ke dalamnya
void Jlh2(int X) {
X = X * 2;
cout<<”Nilai di dalam fungsi : “<<X<<endl;
}
//Fungsi utama
int main() {
int Bilangan;
cout<<”Masukkan sebuah bilangan bulat : “;cin>>Bilangan;
cout<<endl;
//Menampilkan nilai awal
cout<<”Nilai awal : “<<Bilangan;
Jlh2(Bilangan);
//Menampilkan nilai akhir
cout<<”Nilai akhir : “<<Bilangan<<endl;

return 0;
}

Output yang dihasilkan dari contoh program diatas sebagai berikut;

Masukkan sebuah bilangan bulat : 10


Nilai awal : 10
Nilai di dalam fungsi : 20
Nilai akhir : 10

Perhatikan ilustrasi jalanya proses berikut ini;

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
141

Bila kita perhatikan kasus diatas, variabel X menempati alamat memori


yang berbeda sehingga pada saat pemanggilan fungsi nilai dari
keduanya tentu berbeda, pada kasus ini yang berubah hanya nilai dari
variabel X, sedangkan variabel bilangan bernilai tetap karena tidak di
perlakukan apapun terhadap variabel tersebut. Berikut ini sebuah contoh
program yang memeperlihatkan pengiriman parameter berdasarkan nilai.

# include <iostream.h>
//Mendefinisikan fungsi untuk melnukarkan dua buah bilangan
void TukBil(int X, int Y) {
int Z = X;
X = Y;
Y = Z;

//Menampilkan bilangan yang terdapat dalam fungsi


cout<<”Didalam fungsi“<<endl;
cout<<”Bilangan ke-1 : “<<X<<endl;
cout<<”Bilangan ke-2 : “<<Y<<endl;
cout<<endl;
}

//Fungsi Utama
int main() {

//Mendeklarasikan variabel Bilangan1 dan Bilangan2


int Bilangan1, Bilangan2;
cout<<”Masukkan bilangan pertama : “;cin>>Bilangan1;
cout<<”Masukkan bilangan kedua : “;cin>>Bilangan2;

//Menampilkan nilai awal


cout<<”Keadaan awal“<<endl;
cout<<”Bilangan ke-1 : “<<Bilangan1<<endl;
cout<<”Bilangan ke-2 : “<<Bilangan2<<endl;
cout<<endl;

//Memanggil fungsi TukBil


TukBil(Bilangan1, Bilangan2);

//Menampilkan nilai akhir setelah pemanggilan fungsi tukar


cout<<”Keadaan akhir“<<endl;
cout<<”Bilangan ke-1 : “<<Bilangan1<<endl;
cout<<”Bilangan ke-2 : “<<Bilangan2<<endl;
cout<<endl;

return 0;
}

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
142

Dan hasil Output dari contoh program diatas, kita menggunakan fungsi
pengembalian untuk fungsi string, adalah sebagai berikut;

Masukkan bilangan pertama : 21


Masukkan bilangan kedua : 78

Keadaan awal
Bilangan ke-1 : 21
Bilangan ke-2 : 78

Didalam fungsi
Bilangan ke-1 : 78
Bilangan ke-2 : 21

Keadaan akhir
Bilangan ke-1 : 21
Bilangan ke-2 : 78

8.4.c. Melewatkan Parameter Berdasarkan Alamat

Pada bagian ini anda dianggap telah mengetahui arti dari alias
atau reference. Pass by reference ini adalah melewatkan parameter ke
sebuah fungsi berdasarkan alamatnya. Seperti kita ketahui bahwa jika
kita membuat alias dari sebuah variabel maka alamat dari variabel dan
alias tersebut adalah sama. Inilah yang menjadi konsep dasar pengiriman
parameter berdasakan alamat. Cara seperti ini akan menyebabkan nilai
yang terdapat di dalam fungsi akan sama sesuai dengan nilai yang
terdapat pada program (di luar fungsi). Ini disebabkan karena alamat dari
variabel yang berperan sebagai parameter formal sama dengan alamat
dari variabel yang berperan sebagai parameter aktual.
Perhatikan contoh berikut ini agar anda lebih dapat dengan mudah
memahami penggunaan parameter berdasarkan alamat (Pass By
Reference).

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
143

# include <iostream.h>
//Mendefinisikan fungsi yang melewatkan parameternya menurut alamatnya
void Lewat2(int & X) {
X = X * 2;
cout<<”Nilai di dalam fungsi : “<<endl;

int main() {
int Bilangan;
cout<<”Masukkan sebuah bilangan bulat : “;cin>>Bilangan;
cout<<endl;
//Menampilkan nilai awal
cout<<Bilangan<<endl;

Lewat2(Bilangan); //Memanggil fungsi Lewat2


//Menampilkan nilai akhir
cout<<Bilangan<<endl;

return 0;
}
8.1. Pointer ke Fungsi
Output yang dihasilkan dari contoh program diatas sebagai berikut;

Masukkan sebuah bilangan bulat : 10


Nilai awal : 10
Nilai di dalam fungsi : 20
Nilai akhir : 20

Melihat hasilnya demikian, mungkian anda bertanya-tanya, mengapa?


Jawabnya adalah, karena X bukan merupakan sebuah variabel,
melainkan sebuah alias (nama lain) atau reference dari variabel Bilangan.
Maka alias X dan variabel Bilangan tentu mempunyai alamat yang sama
karena keduanya sebenarnya merupakan objek yang sama. Maka dari itu
jika nilai X berubah nilai yang terdapat pada variabel Bilangan pun akan
ikut berubah, sebagai ilustrasi perhatikan gambar berikut ini;

Nilai X yang terdapat pada variabel Bilangan akan saling mempengaruhi


BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
144

Agar anda lebih dapat memahami lebih jelas lagi perhatikan contoh
program berikut ini;

# include <iostream.h>
//Mendefinisikan fungsi untuk menukarkan dua buah bilangan
void TukBil(int & X, int & Y) {
int Z = X;
X = Y;
Y = Z;

//Menampilkan bilangan yang terdapat dalam fungsi


cout<<”Didalam fungsi“<<endl;
cout<<”Bilangan ke-1 : “<<X<<endl;
cout<<”Bilangan ke-2 : “<<Y<<endl;
cout<<endl;
}

//Fungsi Utama
int main() {

//Mendeklarasikan variabel Bilangan1 dan Bilangan2


int Bilangan1, Bilangan2;
cout<<”Masukkan bilangan pertama : “;cin>>Bilangan1;
cout<<”Masukkan bilangan kedua : “;cin>>Bilangan2;

//Menampilkan nilai awal


cout<<”Keadaan awal“<<endl;
cout<<”Bilangan ke-1 : “<<Bilangan1<<endl;
cout<<”Bilangan ke-2 : “<<Bilangan2<<endl;
cout<<endl;

//Memanggil fungsi TukBil


TukBil(Bilangan1, Bilangan2);
//Menampilkan nilai akhir setelah pemanggilan fungsi tukar
cout<<”Keadaan akhir“<<endl;
cout<<”Bilangan ke-1 : “<<Bilangan1<<endl;
cout<<”Bilangan ke-2 : “<<Bilangan2<<endl;
cout<<endl;

return 0;
}

Untuk lebih memahami program diatas, sebaiknya anda juga perhatikan


contoh program berikut ini, dimana kedua program ini akan menghasilkan
hasil output yang sama, disini yang perlu anda perhatikan adalah teknik
pemrogramannya dan penggunaan operator &.

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
145

# include <iostream.h>
//Mendefinisikan fungsi untuk menukarkan dua buah bilangan
void TukBil(int *X, int *Y) {
int Z = *X;
*X = *Y;
*Y = Z;
//Menampilkan bilangan yang terdapat dalam fungsi
cout<<”Didalam fungsi“<<endl;
cout<<”Bilangan ke-1 : “<<*X<<endl;
cout<<”Bilangan ke-2 : “<<*Y<<endl;
cout<<endl;
}
//Fungsi Utama
int main() {
//Mendeklarasikan variabel Bilangan1 dan Bilangan2
int Bilangan1, Bilangan2;
cout<<”Masukkan bilangan pertama : “;cin>>Bilangan1;
cout<<”Masukkan bilangan kedua : “;cin>>Bilangan2;
//Menampilkan nilai awal
cout<<”Keadaan awal“<<endl;
cout<<”Bilangan ke-1 : “<<Bilangan1<<endl;
cout<<”Bilangan ke-2 : “<<Bilangan2<<endl;
cout<<endl;
//Memanggil fungsi TukBil
TukBil(&Bilangan1, &Bilangan2); //gunakan operator &

//Menampilkan nilai akhir setelah pemanggilan fungsi tukar


cout<<”Keadaan akhir“<<endl;
cout<<”Bilangan ke-1 : “<<Bilangan1<<endl;
cout<<”Bilangan ke-2 : “<<Bilangan2<<endl;
cout<<endl;

return 0;
}

Dari kedua program diatas hasil outputnya adalah sebagai berikut;

Masukkan bilangan pertama : 21


Masukkan bilangan kedua : 78

Keadaan awal
Bilangan ke-1 : 21
Bilangan ke-2 : 78

Didalam fungsi
Bilangan ke-1 : 78
Bilangan ke-2 : 21

Keadaan akhir
Bilangan ke-1 : 78
Bilangan ke-2 : 21

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
146

8.4.d. Melewatkan Parameter bertipe Array


Parameter dalam sebuah fungsi dapat juga menggunakan array, sebagai
contoh kita akan membuat dua buah fungsi yang memiliki parameter
bertipe array, Format programnya adalah sebagai berikut;

# include <iostream.h>

//Mendefinisikan fungsi untuk proses array


void MskArray(int A[ ] , int N) {
for (int C = 0; C < N; C++) {
cout<<”Masukkan nilai A[ “<<C<<” ] : “;cin>>A[C];
}
}

//Mendefinisikan fungsi untuk menghitung jumlah dari semua elemen array


long Total(int A[], int N) {
long jlh = 0;
//Menjumlahkan semua elemen array
for (int C = 0; C < N; C++) {
jlh += A[C];
}
return jlh;
}

//Fungsi Utama
int main() {
int X[100]; //Elemen maksimal adalah 100
int TotElmen;
long HASIL;

cout<<”Masukkan banyaknya elemen yang diinginkan : “;


cin>>TotElmen;
cout<<endl;

/Memanggil fungsi MskArray


MskArray(X, TotElmen);

//Memangil fungsi Total dan menampung hasilnya dalam variabel HASIL


HASIL = Total(X, TotElmen);

//Menampilkan hasil
cout<<”\nHasilnya adalah = “<<HASIL;

return 0;
}

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
147

Dari program diatas hasil outputnya adalah sebagai berikut;


Masukkan banyaknya elemen array yang diinginkan : 5

Masukkan Nilai A [ 0 ] : 10
Masukkan Nilai A [ 1 ] : 20
Masukkan Nilai A [ 2 ] : 30
Masukkan Nilai A [ 3 ] : 40
Masukkan Nilai A [ 4 ] : 50

Hasilnya adalah = 150

Pada bahasa C++ parameter bertipe array ini sering diganti dengan
parameter yang bertipe pointer, Contoh program dibawah ini yang
menggunakan parameter bertipe array diganti dengan pointer, hasil
outputnya sama seperti program diatas;
# include <iostream.h>

//Mendefinisikan fungsi untuk proses input array dgn pointer A


void MskArray(int *A[ ] , int N) {
for (int C = 0; C < N; C++) {
cout<<”Masukkan nilai A[ “<<C<<” ] : “;cin>>A[C];
}
}
//Mendefinisikan fungsi untuk menghitung jumlah dari semua elemen array
long Total(int *A[], int N) {
long jlh = 0;
//Menjumlahkan semua elemen array
for (int C = 0; C < N; C++) {
jlh += A[C];
}
return jlh;
}
//Fungsi Utama
int main() {
int X[100]; //Elemen maksimal adalah 100
int TotElmen;
long HASIL;
cout<<”Masukkan banyaknya elemen yang diinginkan : “;
cin>>TotElmen;
cout<<endl;

/Memanggil fungsi MskArray


MskArray(X, TotElmen);
//Memangil fungsi Total dan menampung hasilnya dalam variabel HASIL
HASIL = Total(X, TotElmen);

//Menampilkan hasil
cout<<”\nHasilnya adalah = “<<HASIL;
return 0;
}

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
148

8.4.e. Melewatkan Paameter yang bersifat konstan


Selama ini kita hanya menggunakan fungsi dengan parameter-parameter
yang dapat diubah nilainya. Agar anda dapat mengembangkan lebih jauh
mari kita perhatikan bagaimana sebuah fungsi dapat bersifat tetap.
Maksudnya dalam fungsi nilai parameter tidak dapat diubah-ubah. Untuk
itu kita hanya menambahkan keyword const di depan parameter tersebut,
Mari kita cermati contoh program berikut ini;

# include <iostream.h>

//Mendefinisikan fungsi untuk menghitung keliling lingkaran


double Kellgkr(const float PI, int jari2) {
return (2*PI*jari2);
}

//Fungsi Utama
int main() {
int R;
double HASIL;

cout<<”Masukkan panjang jar-jari lingkaran : “; cin>>R;

/Memanggil fungsi Keliling Lingkaran


HASIL = Kellgkr(3.14, R);

//Menampilkan hasil yang diperoleh


cout<<”Keliling Lingkarannya adalah = “<<HASIL;

return 0;
}

Dari program diatas hasil outputnya adalah sebagai berikut;

Masukkan panjang jari-jari lingkaran : 1


Keliling Longkarannya adalah = 6.28

Guna pembuktian parameter konstan tidak dapat diubah nilainya,


perhatikan potongan program ini;

int Jumlah1Satu(cons tint X) {


X = X + 1; //SALAH, disini compiler akan menolak, karena X bersifat tetap

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
149

8.4.f. Mengeset Parameter dengan nilai Default


Kita dapat melakukan pengesetan dari parameter yang terdapat dalam
sebuah fungsi dengan nilai default, maksudnya jika kita tidak
medeklarasikannya pada saat pemanggilan, maka nilai yang akan
digunakan oleh dungsi adalah nilai defaultnya. Untuk melakukan ini kita
hanya mengisikan nilai parameter bersangkutan pada saat kita
mendefinisikan fungsi. Format penulisan dan pembuatan fungsi yang
mrnggunakan nilai default pada parameternya dapat kita tuliskan
sebagai berikut;

tipe_data nama_fungsi (tipe_data parameter1 = nilai_default,.) {


…..
return nilai_yang_dikembalikan;
}

Contoh penggunaannya dalam program adalah;


# include <iostream.h>

//Mendefinisikan fungsi untuk menghitung volume balok


long VolBalok(int panjang, int lebar = 20, int tinggi = 5 ) {
return (panjnag * lebar * tinggi);
}

//Fungsi Utama
int main() {
int P = 50; //Mendeklarasikan variabel P dengan nilai 50
int L = 10; //Mendeklarasikan variabel L dengan nilai 10
int T = 2; //Mendeklarasikan variabel T dengan nilai 2
long HASIL;

//Memangil fungsi dengan tiga parameter


HASIL = VolBalok(P, L, T);
cout<<”Volume Balok adalah : “<<HASIL<<endl;

//Memangil fungsi dengan dua parameter


HASIL = VolBalok(P, L);
cout<<”Volume Balok adalah : “<<HASIL<<endl;

//Memangil fungsi dengan satu parameter


HASIL = VolBalok(P);
cout<<”Volume Balok adalah : “<<HASIL<<endl;

return 0;
}

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
150

Dari program diatas hasil outputnya adalah sebagai berikut;

Volume Balok adalah : 1000


Volume Balok adalah : 2500
Volume Balok adalah : 5000

8.5. Pointer ke Fungsi


Seperti telah kita ketahui bahwa fungsi bukanlah sebuah variabel,
namun fungsi masih merupakan objek yang memiliki lokasi fisik di
memori. Hal ini menunjukkan bahwa nilai dari sebuah fungsi dapat kita
ambil melalui pointer. Perlu diperhatikan disini bahwa cara untuk
mendapatkan alamat sebuah fungsi adalah dengan menyebutkan nama
fungsi tersebut tanpa tanda kurung maupun parameter. Misalkan kita
mempunyai pointer P yang menunjuk ke tipe data int, lalu kita ingin
memerintahkan pointer P untuk menunjuk ke alamat dari fungsi Jumlah,
maka format penulisannya dapat dituliskan sebagai berikut;

# include <iostream.h>
//Mendefinisikan fungsi Jumlah
int Jumlah(int X, int Y) {
return (X + Y);
}
//Fungsi Utama
int main() {
//Mendeklarasikan pointer ke fungsi Jumlah dengan parameter (int,int)
int (*P) (int, int);

int HASIL; //Variabel untk menampung nilai balik


int a = 20, b = 5; //Variabel untuk digunakan sebagai parameter

//Memangil fungsi untuk menyimpan nilai ke variabel HASIL


HASIL = Jumlah(a, b);
//Proses untuk menunjuk P dari alamat fungsi Jumlah
P = Jumlah;
//Menampilkan hasil melalui pointer P
cout<<”Nilai ( *P ) ( 20,5 ) : “<<(*P)(a,b)<<endl;

//Menampilkan hasil melalui variabel HASIL


cout<<”Nilai HASIL : “<<HASIL<<endl;
//Menampilkan alamat yanh ditunjuk oleh pointer P
cout<<”Nilai P : “<<P<<endl;
//Menampilkan alamat dari fungsi Jumlah
cout<<”Nilai Jumlah : “<<Jumlah<<endl;

return 0;
}

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
151

Dari program diatas hasil outputnya adalah sebagai berikut;

Nilai (*P) ( 20, 5 ) : 25


Nilai HASIL : 25
Nilai P : 00401150
Nilai Jumlah : 00401150

8.6. Overloading Fungsi


8.6.a. Fungsi overload dengan jumlah parameter berbeda
Kelebihan dari C++ dibandingkan dengan bahasa C, adalah karena
C++ mendukung fungsi overload. Pengertian overload adalah fungsi-
fungsi dengan nama yang sama tetapi memiliki parameter berbeda,
perbedaanya adalah dari segi jumlah, tipe dan gabungan dari keduanya.
Dalam fungsi overload, saat melakukan pemanggilan fungsi compiler
akan memilih fungsi parameter aktualnya sesuai dengan parameter
formalnya. Untuh mudahnya mari perhatikan contoh program dibawah ini
dalam menggunakan fungsi overload.

# include <iostream.h>

//Mendefinisikan fungsi Tulis dengan satu parameter


void Tulis(char *T) {
cout <<T<<endl;
}

//Mendefinisikan fungsi Tulis dengan dua parameter


void Tulis(char *T1, char *T2) {
cout <<T1<<” “<<T2<<endl;
}

//Mendefinisikan fungsi Tulis dengan tiga parameter


void Tulis(char *T1, char *T2, char *T3) {
cout <<T1<<” “<<T2<<” “<<T3<<endl;
}

//Fungsi Utama
int main() {

//Melakukan pemanggilan fungsi Tulis


Tulis(“Revi”);
Tulis(“Mahasiawa”, “ STITEK”);
Tulis(“Jurusan”, “Teknik”, “INFORMATIKA”);

return 0;
}

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
152

Dari program diatas hasil outputnya adalah sebagai berikut;

Revi
Mahasiswa STITEK
Jurusan Teknik INFORMATIKA

8.6.b. Fungsi overload dengan jumlah parameter berbeda

# include <iostream.h>

//Mendefinisikan fungsi Tulis dengan parameter bertipe char*


void Tulis(char *T) {
cout <<T<<endl;
}

//Mendefinisikan fungsi Tulis dengan parameter bertipe int


void Tulis(int T1) {
cout <<T1<<endl;
}

//Mendefinisikan fungsi Tulis dengan parameter double


void Tulis(double T2) {
cout <<T2 <<endl;
}

//Fungsi Utama
int main() {

//Melakukan pemanggilan fungsi Tulis


Tulis(“STITEK”);
Tulis(1000);
Tulis(78.0050);

return 0;
}

Dari program diatas hasil outputnya adalah sebagai berikut;

STITEK
1000
78.0050
Mahasiswa STITEK

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
153

8.6.c. Fungsi overload dengan jumlah dan tipe data parameter berbeda

# include <iostream.h>

//Mendefinisikan fungsi Tulis dengan parameter sebanyak 1 bertipe int


void Tulis(int T) {
cout <<T<<endl;
}

//Mendefinisikan fungsi Tulis dengan parametersebanyak 2 bertipe char*


void Tulis(char *T1, char *T2) {
cout <<T1<<” “<<T2<<endl;
}

//Fungsi Utama
int main() {

//Melakukan pemanggilan fungsi Tulis


Tulis(1000);
Tulis(“Mahasiswa”, “STITEK”);

return 0;
}

Dari program diatas hasil outputnya adalah sebagai berikut;

1000
Mahasiswa STITEK

8.7. Mengembalikan nilai bertipe Pointer

Bahasa C++ memfasilitasi kita untuk dapat memebuat fungsi yang


mengembalikan nilai berupa pointer. Untuk melakukan hal itu kita harus
mendeklarasikan tipe data dan nilai kembalian dengan pointer. Agar anda
dapat lebih memahami penggunaan fungsi yang dapat mengembalikan
pointer ke tipe char, baiknya kita perhatikan contoh program dibawah ini;

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
154

# include <iostream.h>

//Mendefinisikan fungsi untuk mengembalikan string dari karakter yang dicari


char *Cahur(char T, char *Z) {
//selama T tidak bernilai sama dengan *Z dan *Z masih ada
while ((T != *Z) && (*Z) {
Z++; //mencari pada alamat berikutnya
}
return Z;
}

//Fungsi Utama
int main() {

char *P; //Pointer untuk menampung nilai kembalian fungsi


char*STRING = “STITEK BONTANG”;
char Huruf = „B”;

//Memanggil fungsi Cahur


P = Cahur(Huruf, STRING);

if (*P)
cout<<”Huruf “<<Huruf<<” ditemukan pada kata ”<<P;
else
cout<<”Huruf “<<Huruf<<”tidak ditemukan pada”;

return 0;
}

Dari program diatas hasil outputnya adalah sebagai berikut;

Huruf B ditemukan pada kata BONTANG

8.8. Membuat prototype Fungsi


Sebelum kita melakukan pendefinisian, pada pemrograman bahasa
C++ fungsi-fungsi dapat dideklarasikan terlebih dahulu. Kemudian
baru kita definiskan setelah kita membuat fungsi utama, yang disebut
prototype, ini akan mempermudah kita dalam mengenali daftar fungsi
yang tersedia atau didefinisikan di dalam program. Format
penulisanya dalam program adalah sebagai berikut;

tipe_data nama_fungsi(parameter1, parameter2, ………);

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
155

Perhatikan contoh program dibawah ini

# include <iostream.h>

//Membuat prototype (ndeklarasian fungsi)


int Kali(int X, int Y); //Mendeklarasikan fungsi Kali
void Tulis(int Z); //Mendeklarasikan fungsi Tulis

//Fungsi Utama
int main() {
int Bil1, Bil2, HASIL;

cout<<”Masukkan bilangan pertama : “;cin>>Bil1;


cout<<”Masukkan bilanga kedua : “;cin>>Bil2;

//Menggunakan fungsi Kali


HASIl = Kali(Bil1, Bil2);

//Menggunakan fungsi Tulis


Tulis(HASIL);

return 0;
}

//Membuat definisi fungsi Kali


int Kali(int X, int Y) {

//Membuat definisi fungsi Tulis


void Tulis(int S);
cout<<S<<endl;
}

Dari program diatas hasil outputnya adalah sebagai berikut;

Masukkan bilangan pertama : 10


Masukkan bilanga kedua : 25

250

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
156

8.9. Fungsi Inline

Pada saat pendefinisian sebuah fungsi, compiler akan membuat


satu set statemen di dala memori. Dan ketika kita memanggil fungsi
tersebut, eksekusi progam akan meloncat ke statemen-stattemen
tersebut. Kemudian setelah fungsi mengembalikan nilai, maka
eksekusi program akan kembali meloncat ke baris selanjutnya (baris
setelah pemanggilan fungsi). Jika kita melakukan pemanggilan fungsi
tersebut sebanyak 5 kali, maka compiler akan melakukan proses
tersebut sebanyak 5 kali.
Bila fungsi yang kita defiinisikanhanya terdiri dari sedikit statemen
(misalnya satu atau dua baris). Hal ini akan mengurangi efisisensi
program, karena compiler harus meloncat keluar masuk untuk
melakukan proses tersebut. Efisiensi bagi seorang pemrogram erat
hubungannya dengan kecepatan eksekusi suatu program. Guna
menghindari hal seperti ini C++ menyediakan fitur yang disebut
dengan fungsi inline (inline function) yaitu dengan menggunakan
keyword inline. Konsep dasar dari Inline function ini adalah proses
penyalinan (copy) baris yang terdapat pada definisi fungsi baris pada
saat kita melakukan pemanggilan fungsi tersebut. Maksudnya jika kita
membuat fungsi inline, compiler tidak menyimpanya dalam memori
melaikan hanya membuat salinan kode dari fungsi tersebut. Hal ini
tidak membutuhkan proses peloncatan satatemen seperti pada saat
kita membuat fungsi biasa sehingga proses eksekusinya akan lebih
cepat. Agar anda lebih memahaminya, baiknya kita perhatikan
coontoh program yang menggunakan fungsi inline.

# include <iostream.h>

//Mendefiniskan fungsi inline yang menggandakan bilangan dengan 2


inline int Kali2(int X) {
return X*2;
}
//Fungsi Utama
int main() {
int HASIL;

//Melakukan pemanggilan fungsi inline untuk pertama kali


HASIL = Kali2(10);
cout<<”Hasil = “<<HASIL<<endl;

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
157

//Melakukan pemanggilan fungsi inline untuk kedua kali


HASIL = Kali2(20);
cout<<”Hasil = “<<HASIL<<endl;

//Melakukan pemanggilan fungsi inline untuk ketiga kali


HASIL = Kali2(30);
cout<<”Hasil = “<<HASIL<<endl;

return 0;
}

Dari program diatas hasil outputnya adalah sebagai berikut;

Hasil = 20
Hasil = 40
Hasil = 60

Jika kita perhatikan secara seksama, cara kerja compiler untuk


program diatas sebenarnya adalah sebagai mana program berikut ini;

# include <iostream.h>

//Mendefiniskan fungsi inline yang menggandakan bilangan dengan 2


inline int Kali2(int X) {
return X*2;
}
//Fungsi Utama
int main() {
int HASIL;

//Melakukan pemanggilan fungsi inline untuk pertama kali


HASIL = 10 * 2; //disini X pertama bernilai 10
cout<<”Hasil = “<<HASIL<<endl;

//Melakukan pemanggilan fungsi inline untuk kedua kali


HASIL = 20 * 2; //disini X kedua bernilai 20
cout<<”Hasil = “<<HASIL<<endl;

//Melakukan pemanggilan fungsi inline untuk ketiga kali


HASIL = 30 * 2; //disini X pertama bernilai 30
cout<<”Hasil = “<<HASIL<<endl;

return 0;
}

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
158

8.10. Rekursi
Rekursi adalah merupakan fungsi yang jika pada saat
pendefinisiannya memanggil dirinya sendiri untuk melakukan proses di
dalamnya. Sebuah contoh sederhana yang menunjukkan proses rekursi
adalah pada saat kita membuat program untuk menghitung nilai faktorial
dari sebuah nilai bilangan bulat, Bentuk format programnya dalam
bahasa C++ adalah sebagai mana berikut ini;

# include <iostream.h>

//Mendefiniskan fungsi faktorial


int Faktorial(int X) {
if X == 1) return (1);
return X*Faktorial(X – 1); //Memanggil dirinya sendiri
}

//Fungsi Utama
int main() {
int Bilangan, HASIL;

cout<<”Masukkan bilangan yang akan dihitung : “;cin>>Bilangan;

//Melmanggil fungsi faktorial


HASIL = Faktorial(Bilangan);

//Menampilkan hasil
cout<<Bilangan<<” ! = ”<<HASIL;

return 0;
}

Dari program diatas hasil outputnya adalah sebagai berikut;


Masukkan bilangan yang akan dihitung : 5
5 ! = 120

Jika format penulisannya tidak menggunakan rekursi, maka penulisannya


menjadi;

int Faktorial(int X) {
hasil = 1;
for (int C = 1; C < X; C++) {
hasil = hasil *C;
}
return hasil;
}

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom
159

BAB-VIII-FOC-1
Ir. Masagus Muhammad Yusuf, Mkom

Anda mungkin juga menyukai