Penunjuk Fungsi C++ Diterangkan: Panduan Mendalam untuk Mekanisme Panggilan dan Panggilan Balik Fleksibel

王林
Lepaskan: 2024-04-29 17:06:01
asal
701 orang telah melayarinya

Penjelasan terperinci tentang penunjuk fungsi: Penunjuk fungsi membenarkan alamat fungsi disimpan dalam pembolehubah untuk melaksanakan panggilan dinamik dan mekanisme panggilan balik fungsi. Sintaks penunjuk fungsi: returnType (*functionPointerName)(parameterList); Untuk memanggil penuding fungsi, panggil sahaja ia seperti fungsi biasa. Penunjuk fungsi membolehkan panggilan fleksibel dan secara dinamik memanggil fungsi berbeza mengikut keperluan. Penunjuk fungsi juga boleh digunakan dalam mekanisme panggil balik untuk memanggil fungsi apabila peristiwa tertentu berlaku.

C++ 函数指针详解:灵活调用和回调机制的深入指南

Penunjuk Fungsi C++ Diterangkan: Panduan Mendalam untuk Mekanisme Panggilan dan Panggilan Balik Fleksibel

Pengenalan

Penunjuk fungsi ialah ciri C++ berkuasa yang membenarkan alamat fungsi disimpan dalam pembolehubah. Ini memberikan banyak faedah, termasuk pemanggilan fungsi yang fleksibel dan pelaksanaan mekanisme panggil balik.

Syntax

Sintaks penuding fungsi adalah seperti berikut:

returnType (*functionPointerName)(parameterList);
Salin selepas log masuk

Sebagai contoh, berikut ialah pengisytiharan penuding fungsi yang akan mengembalikan integer dan menerima hujah integer:

int (*funcPtr)(int);
Salin selepas log masuk

Penugasan penuding fungsi

alamat fungsi kepada penuding fungsi , sila gunakan operator "&":

funcPtr = &functionName;
Salin selepas log masuk

Sekarang, pembolehubah funcPtr menghala ke fungsi functionName.

funcPtr 变量指向 functionName 函数。

调用函数指针

要调用函数指针,只需使用它就像调用普通函数一样:

int result = funcPtr(arg);
Salin selepas log masuk

实战案例

灵活调用

考虑以下代码:

void printMessage(const char* message) {
  cout << message << endl;
}

void printNumber(int number) {
  cout << number << endl;
}

int main() {
  // 创建指向两个函数的函数指针
  void (*printPtr)(const char*);
  void (*printNumPtr)(int);

  // 赋值函数指针
  printPtr = &printMessage;
  printNumPtr = &printNumber;

  // 根据需要调用函数指针
  printPtr("Hello world!");
  printNumPtr(42);
  return 0;
}
Salin selepas log masuk

在这种情况下,printPtrprintNumPtr 允许我们灵活地调用不同的函数,而无需在代码中硬编码函数名称。

回调机制

回调是一种在特定事件发生时调用的函数。函数指针提供了实现回调的有效方法。

以下是一个使用函数指针实现回调的示例:

class Button {
public:
  typedef void(*CallbackFunction)();

  Button(CallbackFunction callback)
    : callback(callback) {}

  void onClick() {
    if (callback) {
      callback();
    }
  }

private:
  CallbackFunction callback;
};

void onClickCallback() {
  cout << "Button clicked!" << endl;
}

int main() {
  Button button(onClickCallback);
  button.onClick();
  return 0;
}
Salin selepas log masuk

在这里,Button 类有一个回调函数,当按钮被点击时被调用。在我们的示例中,onClickCallbackPanggil penuding fungsi

🎜Untuk memanggil penuding fungsi, hanya gunakannya seperti memanggil fungsi biasa: 🎜rrreee🎜Contoh praktikal🎜

Panggilan fleksibel

🎜Pertimbangkan kod berikut: 🎜rrreee🎜Dalam ini kes Di bawah, printPtr dan printNumPtr membolehkan kami memanggil fungsi yang berbeza secara fleksibel tanpa perlu mengekodkan nama fungsi dalam kod. 🎜

Mekanisme panggil balik

🎜Panggil balik ialah fungsi yang dipanggil apabila peristiwa tertentu berlaku. Penunjuk fungsi menyediakan cara yang cekap untuk melaksanakan panggilan balik. 🎜🎜Berikut ialah contoh menggunakan penunjuk fungsi untuk melaksanakan panggilan balik: 🎜rrreee🎜Di sini, kelas Butang mempunyai fungsi panggil balik yang dipanggil apabila butang diklik. Dalam contoh kami, onClickCallback ialah fungsi panggil balik. Apabila butang diklik, ia mencetak mesej dalam konsol. 🎜

Atas ialah kandungan terperinci Penunjuk Fungsi C++ Diterangkan: Panduan Mendalam untuk Mekanisme Panggilan dan Panggilan Balik Fleksibel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan