Memanggil Pointer Fungsi
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 34 dari 61.
Setelah mengetahui cara mendeklarasikan pointer fungsi dan menetapkan fungsi padanya, langkah berikutnya adalah memanggil fungsi melalui pointer tersebut.
Sintaksnya sederhana. Kamu menggunakan pointer fungsi seperti saat memanggil fungsi biasa:
int add(int a, int b) {
return a + b;
}
int main() {
int (*operation)(int, int) = add;
int result = operation(5, 3); // Memanggil add(5, 3)
printf("%d\n", result); // output: 8
return 0;
}Cukup tulis nama pointer diikuti tanda kurung yang berisi argumen. C secara otomatis melakukan dereferensi pointer dan menjalankan fungsi yang ditunjuknya.
Kamu juga bisa menggunakan sintaks dereferensi eksplisit dengan (*operation)(5, 3), tetapi ini opsional dan kurang umum. Kedua bentuk menghasilkan hasil yang sama.
Kekuatan sebenarnya muncul saat kamu menetapkan ulang pointer ke fungsi yang berbeda:
int subtract(int a, int b) {
return a - b;
}
operation = subtract;
result = operation(5, 3); // Sekarang memanggil subtract(5, 3)
printf("%d\n", result); // output: 2Variabel operation yang sama kini menjalankan logika yang sepenuhnya berbeda. Kemampuan untuk mengganti perilaku saat program berjalan ini adalah dasar polimorfisme dalam C.
Tantangan
MudahMari berlatih memanggil fungsi melalui pointer dan mengganti fungsi yang dijalankan. Kamu akan membuat kalkulator sederhana yang dapat beralih antara penjumlahan dan pengurangan saat program berjalan.
Tulis program yang:
- Mendefinisikan dua fungsi:
add: menerima dua parameterintdan mengembalikan jumlah keduanyasubtract: menerima dua parameterintdan mengembalikan hasil pengurangan angka kedua dari angka pertama
- Di dalam
main, mendeklarasikan pointer fungsi bernamacalcyang dapat menunjuk ke fungsi yang menerima dua parameterintdan mengembalikanint - Membaca empat input: dua bilangan bulat dan dua kode operasi
- Untuk setiap kode operasi:
- Menetapkan fungsi yang sesuai ke
calc(1 untuk add, 2 untuk subtract) - Memanggil fungsi melalui pointer dengan kedua angka tersebut
- Mencetak hasilnya
- Menetapkan fungsi yang sesuai ke
Kamu akan menerima empat input: angka pertama, angka kedua, kode operasi pertama (1 atau 2), dan kode operasi kedua (1 atau 2).
Outputmu harus menampilkan dua hasil pada baris terpisah: satu untuk setiap operasi yang dilakukan menggunakan dua angka yang sama:
15
5Dalam contoh ini, dengan input 10, 5, 1, 2: operasi pertama (kode 1) menjumlahkan 10 + 5 = 15, lalu pointer ditetapkan kembali, dan operasi kedua (kode 2) mengurangi 10 - 5 = 5.
Ini menunjukkan cara variabel pointer yang sama dapat menjalankan logika yang sepenuhnya berbeda dengan menetapkan ulang nilainya di antara pemanggilan.
Coba sendiri
#include <stdio.h>
// TODO: Definisikan fungsi add di sini
// TODO: Definisikan fungsi subtract di sini
int main() {
// Baca input
int num1, num2, op1, op2;
scanf("%d", &num1);
scanf("%d", &num2);
scanf("%d", &op1);
scanf("%d", &op2);
// TODO: Deklarasikan pointer fungsi bernama 'calc' yang dapat menunjuk ke
// fungsi yang menerima dua parameter int dan mengembalikan int
// TODO: Untuk kode operasi pertama (op1):
// - Tetapkan fungsi yang sesuai ke calc (1 untuk add, 2 untuk subtract)
// - Panggil fungsi melalui pointer dan cetak hasilnya
// TODO: Untuk kode operasi kedua (op2):
// - Tetapkan kembali calc ke fungsi yang sesuai
// - Panggil fungsi melalui pointer dan cetak hasilnya
return 0;
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar Pemrograman Modular
file headerProteksi includefile sumberFungsi StatisRingkasan: Kalkulator Modular4Enkapsulasi
Konsep Opaque PointerMendefinisikan Opaque StructGetter dan SetterValidasi pada SetterUlasan: Kotak Rahasia7Pointer Fungsi
Mendeklarasikan Pointer FungsiMemanggil Pointer FungsiTypedef untuk Pointer FungsiMengirim Fungsi sebagai ArgumenRangkuman: Dispatch Kalkulator2Object dan method
Struct sebagai objectPointer 'self'Konsistensi constPointer vs nilaiMethod pembantuRangkuman: Pengelola Point5Proyek: Akun Bank Sederhana
Penyiapan ProyekImplementasi Akun3Siklus Hidup object
Pola KonstruktorPola DestruktorInisialisasi StackSalinan MendalamRangkuman: Pembungkus string6Pewarisan melalui Komposisi
Penyematan StructAturan Anggota PertamaMengakses Anggota ParentUpcastingRekap: Hierarki Bentuk9Proyek: Penggambar Bentuk
Ringkasan ProyekImplementasi LingkaranImplementasi Persegi PanjangPenggunaan PolimorfismeWadah BentukLatihan sendiri: Compiler C online