Maison > développement back-end > C++ > Scénarios d'application des pointeurs de fonctions C++

Scénarios d'application des pointeurs de fonctions C++

WBOY
Libérer: 2024-04-18 09:33:01
original
1145 Les gens l'ont consulté

Un pointeur de fonction en C++ fait référence à une variable pointant vers l'adresse mémoire d'une fonction. Il est souvent utilisé dans des scénarios tels que les fonctions de rappel, la liaison dynamique et le traitement d'événements. Par exemple, dans l'algorithme de tri, nous pouvons utiliser des pointeurs de fonction pour implémenter différentes fonctions de comparaison afin de choisir de manière flexible l'algorithme de tri.

C++ 函数指针的应用场景

Scénarios d'application de pointeur de fonction C++

Qu'est-ce qu'un pointeur de fonction ?

En C++, un pointeur de fonction est un pointeur vers une fonction. C'est une variable pointant vers l'adresse mémoire de la fonction.

Déclaration des pointeurs de fonction

La déclaration des pointeurs de fonction est très similaire à la déclaration des fonctions ordinaires, sauf qu'un astérisque (*) est ajouté devant le nom de la fonction :

typedef int (*FuncPtr)(int, int);
Copier après la connexion

La déclaration ci-dessus définit une fonction nommé FuncPtr Un pointeur de fonction qui pointe vers une fonction qui accepte deux paramètres de type int et renvoie un type int. FuncPtr 的函数指针,它指向一个接受两个 int 类型的参数并返回一个 int 类型的函数。

函数指针的用法

函数指针可以用于以下场景:

  • 回调函数:将函数作为参数传递给其他函数,以便稍后调用。
  • 动态绑定:在运行时将函数指针与实际函数关联,从而实现多态。
  • 事件处理:为特定事件(例如按钮点击)定义处理函数,并将其存储在函数指针中。

实战案例:排序算法

我们可以使用函数指针来实现不同的排序算法。下面是一个使用函数指针的比较函数的 sort 函数:

#include <algorithm>

bool Ascending(int a, int b) {
  return a < b;
}

bool Descending(int a, int b) {
  return a > b;
}

void Sort(int* arr, int size, bool (*CompareFunc)(int, int)) {
  std::sort(arr, arr + size, CompareFunc);
}

int main() {
  int arr[] = {5, 3, 1, 2, 4};
  int size = sizeof(arr) / sizeof(arr[0]);

  // 使用升序比较函数进行排序
  Sort(arr, size, Ascending);

  // 使用降序比较函数进行排序
  Sort(arr, size, Descending);

  return 0;
}
Copier après la connexion

在上面的代码中,CompareFunc 是一个函数指针,指向一个接受两个 int 类型的参数并返回一个 bool 类型的比较函数。我们定义了两个比较函数 AscendingDescending,它们将两个数字进行升序和降序比较。

Sort 函数使用传入的比较函数对数组 arr

🎜Utilisation de pointeurs de fonction🎜🎜🎜Les pointeurs de fonction peuvent être utilisés dans les scénarios suivants : 🎜
  • 🎜Fonctions de rappel : 🎜Passez des fonctions en tant que paramètres à d'autres fonctions pour être appelées ultérieurement.
  • 🎜Liaison dynamique : 🎜Associez des pointeurs de fonction aux fonctions réelles au moment de l'exécution, obtenant ainsi le polymorphisme.
  • 🎜Gestion des événements : 🎜Définissez une fonction de gestionnaire pour un événement spécifique (comme un clic sur un bouton) et stockez-la dans un pointeur de fonction.
🎜🎜Cas pratique : Algorithme de tri🎜🎜🎜Nous pouvons utiliser des pointeurs de fonction pour implémenter différents algorithmes de tri. Voici une fonction sort qui utilise une fonction de comparaison d'un pointeur de fonction : 🎜rrreee🎜Dans le code ci-dessus, CompareFunc est un pointeur de fonction vers une fonction qui accepte deux paramètres de type int et renvoie une fonction de comparaison de type bool. Nous définissons deux fonctions de comparaison Ascending et Descending, qui comparent deux nombres par ordre croissant et décroissant. 🎜🎜La fonction Sort trie le tableau arr en utilisant la fonction de comparaison passée. En utilisant des pointeurs de fonction, nous pouvons choisir de manière flexible différentes fonctions de comparaison pour implémenter différents algorithmes de tri. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal