Melewatkan Fungsi sebagai Parameter Fungsi dalam C++

Bukan hanya variabel yang bisa dilewatkan pada sebuah fungsi dalam pemrograman C/C++. Fungsi juga bisa dilewatkan sebagai parameter. Konsepnya hampir sama saja, namun dengan sedikit tambahan syntax agar fungsi bisa dilewatkan dan berhasil dijalankan. Umumnya, pemanggilan fungsi dilakukan untuk menjalankan fungsi di dalam fungsi. Lebih jelasnya, ketika program memanggil sebuah fungsi, maka kita melewatkan sebuah fungsi sebagai parameter untuk kemudian dijalankan oleh fungsi pertama tadi.

Untuk bisa mendemonstrasikan contoh bagaimana melewatkan fungsi sebagai parameter, dibutuhkan paling tidak 2 fungsi selain fungsi utama (main). Dalam contoh di bawah ini, kita menggunakan 2 fungsi: trigger() dan sum(). Fungsi trigger() akan dipanggil di program utama. Fungsi sum() akan dilewatkan sebagai parameter fungsi trigger() untuk kemudian dijalankan di dalam fungsi trigger() itu sendiri.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
int trigger(int (*)(int));
int sum(int end);
 
int main(){
	cout << trigger(&sum) << endl;
	return 0;
}
 
int trigger(int (*f)(int)){
	int end=50;
	return (*f)(end);
 
}
int sum(int end){
	int i, sum=0;
	for(i=0; i<end; i++){
		sum += i;
	}
	return sum;
}

Untuk melewatkan fungsi sebagai parameter, kita harus menuliskan tipe kembalian fungsi, lalu pointer yang menunjuk ke nama fungsi, dan tipe parameter fungsi.

4
int trigger(int (*)(int));

Bentuk int (*)(int) merupakan bentuk yang sama dengan nama fungsi yang akan dipanggil:

int sum(int end);

Untuk deklarasi fungsi tersebut, kita menggunakan pointer agar bisa memanggil fungsi yang dimaksud.

int trigger(int (*f)(int)){
	int end=50;
	return (*f)(end); // dalam kasus ini, artinya sama dengan -> return sum(end);
 
}

Untuk menggunakan fungsi trigger() dalam program utama, kita melewatkan referensi fungsi sum() di dalam parameter fungsi trigger.

trigger(&sum)

Bagaimana jika ingin melewatkan fungsi beserta dengan parameternya? Kita tinggal menambah parameter lain di dalam fungsi yang memanggil tadi. Pada kasus di atas, variabel end dideklarasikan di dalam fungsi trigger. Dalam contoh di bawah ini, variabel end akan dideklarasikan di dalam fungsi main dan akan dilewatkan dalam fungsi trigger.

#include <iostream>
using namespace std;
 
int trigger(int (*)(int), int);
int sum(int end);
 
int main(){
	int end = 50;
	cout << trigger(&sum, end) << endl;
	return 0;
}
 
int trigger(int (*f)(int), int end){
	return (*f)(end);	
}
int sum(int end){
	int i, sum=0;
	for(i=0; i<end; i++){
		sum += i;
	}
	return sum;
}

Secara teknis, kita tidak bisa melewatkan parameter bersamaan dengan nama fungsi yang dipanggil, contohnya:

trigger(&sum(4)); // tidak akan berhasil dicompile

Oleh karena itulah, parameter fungsi yang akan dilewatkan diberikan sebagai parameter tambahan seperti potongan kode di bawah ini.

int trigger(int (*f)(int), int end){
	return (*f)(end);	
}
trigger(&sum, 5);

Leave a Reply

Your email address will not be published. Required fields are marked *