Pointer Fungsi
Teruskan fungsi sebagai argumen
Pointer Fungsi adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Apa Itu Penunjuk Fungsi
Penunjuk fungsi menyimpan alamat suatu fungsi sehingga Anda dapat memanggilnya secara tidak langsung atau meneruskannya seperti data.
- Tipe tersebut menyandikan tanda tangan fungsi.
- Tipe tersebut memungkinkan fungsi menerima perilaku sebagai parameter.
#include <iostream>
int add(int a, int b) { return a + b; }
int main() {
int (*op)(int, int) = add;
std::cout << op(3, 4) << '\n';
return 0;
}Mendeklarasikan Tipe
Deklarasi int (*op)(int, int) dibaca sebagai: op adalah penunjuk ke fungsi yang menerima dua bilangan bulat dan mengembalikan bilangan bulat. Tanda kurung di sekitar *op wajib digunakan.
#include <iostream>
int square(int x) { return x * x; }
int main() {
int (*fn)(int) = square;
std::cout << fn(5) << '\n';
return 0;
}Memanggil Melalui Penunjuk
Anda memanggil penunjuk fungsi sama seperti fungsi itu sendiri. Anda juga dapat melakukan dereferensi secara eksplisit, tetapi hal itu jarang diperlukan.
#include <iostream>
void greet() { std::cout << "Hello\n"; }
int main() {
void (*g)() = greet;
g();
(*g)();
return 0;
}Meneruskan Fungsi sebagai Argumen
Suatu fungsi dapat menerima parameter penunjuk fungsi, sehingga pemanggil dapat memasukkan perilaku khusus.
#include <iostream>
int apply(int x, int (*fn)(int)) { return fn(x); }
int doubler(int n) { return n * 2; }
int main() {
std::cout << apply(10, doubler) << '\n';
return 0;
}Memilih Saat Program Berjalan
Karena penunjuk fungsi adalah variabel, Anda dapat menentukan fungsi mana yang akan dipanggil saat program berjalan.
#include <iostream>
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int main() {
bool wantAdd = true;
int (*op)(int, int) = wantAdd ? add : sub;
std::cout << op(8, 3) << '\n';
return 0;
}Array Penunjuk Fungsi
Simpan beberapa penunjuk fungsi dalam sebuah array untuk membuat tabel pemanggilan sederhana yang diindeks berdasarkan suatu nilai.
#include <iostream>
int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }
int main() {
int (*ops[2])(int, int) = {add, mul};
std::cout << ops[0](2, 3) << ' ' << ops[1](2, 3) << '\n';
return 0;
}Menggunakan typedef
Sintaks penunjuk cukup rumit. Alias typedef atau using memberikan nama yang mudah dibaca untuk tipe tersebut.
#include <iostream>
using BinOp = int(*)(int, int);
int add(int a, int b) { return a + b; }
int main() {
BinOp op = add;
std::cout << op(6, 7) << '\n';
return 0;
}Penunjuk Fungsi dengan Algoritma
Algoritma standar menerima objek yang dapat dipanggil, dan fungsi biasa dapat digunakan sebagai salah satunya. Di sini, sebuah predikat menghitung bilangan genap.
#include <iostream>
#include <vector>
#include <algorithm>
bool isEven(int n) { return n % 2 == 0; }
int main() {
std::vector<int> v = {1, 2, 3, 4, 5, 6};
int c = std::count_if(v.begin(), v.end(), isEven);
std::cout << "Evens: " << c << '\n';
return 0;
}Keterbatasan: Tanpa Keadaan
Penunjuk fungsi biasa tidak dapat membawa data yang ditangkap. Jika Anda perlu mengingat konteks di antara pemanggilan, Anda harus menggunakan variabel global atau beralih ke objek yang dapat dipanggil dengan kemampuan lebih lengkap.
#include <iostream>
int counter = 0;
int next() { return ++counter; }
int main() {
int (*fn)() = next;
std::cout << fn() << ' ' << fn() << ' ' << fn() << '\n';
return 0;
}Lambda Tanpa Tangkapan Dapat Dikonversi
Lambda yang tidak menangkap apa pun dapat dikonversi secara implisit menjadi penunjuk fungsi yang cocok, yang berguna untuk fungsi kecil sebaris.
#include <iostream>
int main() {
int (*fn)(int) = [](int x) { return x + 100; };
std::cout << fn(1) << '\n';
return 0;
}Penunjuk Fungsi Kosong
Penunjuk fungsi dapat bernilai nullptr, yang berarti penunjuk tersebut tidak menunjuk ke apa pun. Selalu lakukan pemeriksaan sebelum memanggilnya untuk menghindari perilaku yang tidak terdefinisi.
#include <iostream>
int main() {
int (*fn)(int) = nullptr;
if (fn) {
std::cout << fn(5) << '\n';
} else {
std::cout << "No function set\n";
}
return 0;
}Pemeriksaan Singkat
Uji pemahaman Anda tentang keterbatasan penunjuk fungsi.
Ringkasan
Anda telah mempelajari penunjuk fungsi:
- penunjuk fungsi menyimpan alamat suatu fungsi dan dipanggil seperti fungsi tersebut
- penunjuk fungsi memungkinkan Anda meneruskan perilaku sebagai parameter dan membuat tabel pemanggilan
- alias membuat tipenya mudah dibaca
- penunjuk fungsi tidak dapat membawa keadaan, tetapi lambda tanpa tangkapan dapat dikonversi menjadi penunjuk fungsi
Selanjutnya, Anda akan mengenal std::function, yang dapat menyimpan objek apa pun yang dapat dipanggil, termasuk objek yang memiliki keadaan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pointer Fungsi” gratis?
Ya — teks lengkap “Pointer Fungsi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pointer Fungsi”?
Teruskan fungsi sebagai argumen Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Pointer Fungsi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pointer Fungsi
- std::function
- std::bind
- Memilih Callable