Mendeklarasikan Pointer Fungsi
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 33 dari 61.
Sejauh ini, kita telah belajar menyimulasikan pewarisan menggunakan penyematan struct. Namun, polimorfisme sejati, saat object yang berbeda merespons secara berbeda terhadap pemanggilan yang sama, membutuhkan sesuatu yang lebih: pointer fungsi.
Pointer fungsi adalah variabel yang menyimpan alamat suatu fungsi. Sama seperti pointer biasa yang menyimpan alamat data, pointer fungsi menyimpan alamat kode yang dapat dieksekusi.
Sintaksnya mungkin tampak mengintimidasi pada awalnya. Untuk mendeklarasikan pointer fungsi, tentukan tipe pengembalian, lalu nama pointer dalam tanda kurung dengan tanda bintang, diikuti tipe parameter:
int (*operation)(int, int);Ini mendeklarasikan variabel bernama operation yang dapat menunjuk ke fungsi apa pun yang menerima dua parameter int dan mengembalikan int. Tanda kurung di sekitar *operation sangat penting, tanpa tanda kurung tersebut, kamu akan mendeklarasikan fungsi yang mengembalikan pointer.
Untuk menetapkan fungsi ke pointer ini, cukup gunakan nama fungsi tersebut (tanpa tanda kurung):
int add(int a, int b) {
return a + b;
}
int (*operation)(int, int);
operation = add; // Sekarang operation menunjuk ke addNama fungsi berfungsi sebagai alamatnya. Kamu juga dapat menggunakan &add secara eksplisit, tetapi ini opsional: kedua bentuk tersebut setara dalam C.
Tantangan
MudahMari berlatih mendeklarasikan pointer fungsi dan menetapkan fungsi kepadanya. Kamu akan membuat sistem operasi matematika sederhana, tempat sebuah pointer fungsi dapat menyimpan berbagai fungsi aritmetika.
Tulis program yang:
- Mendefinisikan dua fungsi:
multiply: menerima dua parameterintdan mengembalikan hasil perkaliannyasubtract: menerima dua parameterintdan mengembalikan hasil pengurangan nilai kedua dari nilai pertama
- Di dalam
main, mendeklarasikan variabel pointer fungsi bernamaoperationyang dapat menunjuk ke fungsi yang menerima dua parameterintdan mengembalikanint - Membaca tiga input: dua bilangan bulat dan kode operasi (1 untuk perkalian, 2 untuk pengurangan)
- Menetapkan fungsi yang sesuai ke pointer
operationberdasarkan kode operasi - Mencetak nama operasi yang ditetapkan, lalu mencetak hasil pemanggilan fungsi melalui pointer
Kamu akan menerima tiga input: bilangan pertama, bilangan kedua, dan kode operasi (1 atau 2).
Outputmu akan terlihat seperti ini:
Operation: multiply
Result: 35Di sini, multiply adalah nama operasi (atau subtract jika kodenya 2), dan 35 adalah hasil pemanggilan fungsi melalui pointer-mu (dalam kasus ini, 5 × 7).
Ingat: untuk mendeklarasikan pointer fungsi, kamu memerlukan tipe pengembalian, nama pointer dalam tanda kurung dengan tanda bintang, dan tipe parameter. Untuk menetapkan fungsi, gunakan nama fungsi saja tanpa tanda kurung.
Coba sendiri
#include <stdio.h>
// TODO: Definisikan fungsi multiply di sini
// TODO: Definisikan fungsi subtract di sini
int main() {
int num1, num2, code;
// Baca input
scanf("%d", &num1);
scanf("%d", &num2);
scanf("%d", &code);
// TODO: Deklarasikan pointer fungsi bernama 'operation' yang dapat menunjuk ke
// fungsi yang menerima dua parameter int dan mengembalikan int
// TODO: Berdasarkan kode operasi (1 untuk multiply, 2 untuk subtract),
// tetapkan fungsi yang sesuai ke pointer operation-mu
// TODO: Cetak nama operasi dan hasilnya
// Format:
// Operasi: <name>
// Hasil: <result>
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