Un pointeur de fonction est un pointeur vers une fonction qui permet un appel dynamique de fonctions, améliorant ainsi la réutilisabilité du code. Par exemple, vous pouvez créer une fonction générale de calcul de remise qui accepte un pointeur de fonction comme paramètre et créer différentes fonctions pour différents types de remise afin d'implémenter différents calculs de remise en passant différents pointeurs de fonction. En C++, le pointeur de fonction de stratégie de tri peut être utilisé pour trier la liste des étudiants en fonction de la stratégie de tri, démontrant l'application des pointeurs de fonction dans la réutilisation de code.
Un pointeur de fonction est un pointeur vers une fonction qui nous permet d'appeler la fonction de manière dynamique. Son type est un pointeur vers le type de valeur de retour de la fonction (ou void). Par exemple :
typedef int (*function_ptr)(int);
Ceci définit un type de pointeur vers une fonction qui renvoie le type int.
Le principal avantage de l'utilisation des pointeurs de fonction est la réutilisabilité du code. En utilisant des pointeurs de fonction, nous pouvons éviter d’écrire le même segment de code à plusieurs reprises.
Considérons un scénario dans lequel vous disposez d'une fonction de calcul des remises :
double calculate_discount(double price, double discount_percentage) { return price * (1 - discount_percentage); }
À l'aide d'un pointeur de fonction, nous pouvons créer une fonction générique de calcul de remise qui accepte un pointeur de fonction comme paramètre :
double apply_discount(double price, function_ptr discount_function) { return discount_function(price); }
Maintenant, nous pouvons créer différentes fonctions pour différents types de remises et les transmettre à la fonction apply_discount
: apply_discount
函数:
double flat_discount_function(double price) { // 计算固定折扣 } double percentage_discount_function(double price) { // 计算百分比折扣 }
通过这种方式,我们可以通过传递不同的函数指针来实现折扣的不同计算方法。
以下是一个演示如何使用函数指针增强代码复用性的 C++ 代码示例:
#include <iostream> #include <vector> using namespace std; // 学生类 class Student { public: string name; int score; }; // 排序策略函数指针类型 typedef bool (*sort_strategy_ptr)(const Student&, const Student&); // 排序策略:按名称升序 bool sort_by_name_ascending(const Student& a, const Student& b) { return a.name < b.name; } // 排序策略:按分数降序 bool sort_by_score_descending(const Student& a, const Student& b) { return a.score > b.score; } // 根据排序策略函数指针对学生列表进行排序 void sort_students(vector<Student>& students, sort_strategy_ptr sort_strategy) { sort(students.begin(), students.end(), sort_strategy); } int main() { // 初始化学生列表 vector<Student> students = { {"John", 85}, {"Jane", 90}, {"Peter", 75}, {"Mary", 80} }; // 按名称升序排序 sort_students(students, sort_by_name_ascending); // 输出按名称排序后的列表 for (const Student& student : students) { cout << student.name << " " << student.score << endl; } // 按分数降序排序 sort_students(students, sort_by_score_descending); // 输出按分数排序后的列表 for (const Student& student : students) { cout << student.name << " " << student.score << endl; } return 0; }
在这个示例中,我们定义了一个排序策略函数指针类型,并为不同的排序规则创建了具体的函数。然后,我们将排序策略函数指针传递给 sort_students
rrreee
sort_students
pour trier la liste des étudiants dans l'ordre souhaité. Cela montre comment utiliser les pointeurs de fonction pour améliorer la réutilisabilité du code. 🎜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!