Maison  >  Article  >  développement back-end  >  Analyser le principe des pointeurs de fonctions C++ pour améliorer les capacités de réutilisation du code

Analyser le principe des pointeurs de fonctions C++ pour améliorer les capacités de réutilisation du code

WBOY
WBOYoriginal
2024-06-04 13:45:01788parcourir

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.

剖析 C++ 函数指针增强代码复用能力的原理

Analyse du principe du pointeur de fonction C++ pour améliorer la capacité de réutilisation du code

Introduction au pointeur de fonction

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.

Avantages des pointeurs de fonction

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.

Exemple : Calcul des remises

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_studentsrrreee

De cette façon, nous pouvons réaliser différents calculs de remises en passant différentes méthodes de pointeurs de fonction. 🎜🎜Cas pratique🎜🎜Ce qui suit est un exemple de code C++ qui montre comment utiliser des pointeurs de fonction pour améliorer la réutilisabilité du code : 🎜rrreee🎜Dans cet exemple, nous définissons un type de pointeur de fonction de stratégie de tri et créons une fonction spécifique. Nous passons ensuite le pointeur de la fonction de stratégie de tri à la fonction 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!

Déclaration:
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