関数ポインターは、関数の動的な呼び出しを可能にする関数へのポインターであり、これによりコードの再利用性が向上します。たとえば、関数ポインターをパラメーターとして受け入れる一般的な割引計算関数を作成し、異なる割引タイプに異なる関数を作成して、異なる関数ポインターを渡すことで異なる割引計算を実装できます。 C++ では、ソート戦略関数ポインタを使用して、ソート戦略に従って学生リストをソートできます。これは、コードの再利用における関数ポインタの適用を示しています。
関数ポインタは、関数を動的に呼び出すことを可能にする関数へのポインタです。その型は、関数の戻り値の型 (または void) へのポインターです。例:
typedef int (*function_ptr)(int);
これは、int 型を返す関数へのポインター型を定義します。
関数ポインターを使用する主な利点は、コードの再利用性です。関数ポインターを使用すると、同じコードセグメントを繰り返し記述することを避けることができます。
割引を計算する関数があるシナリオを考えてみましょう:
double calculate_discount(double price, double discount_percentage) { return price * (1 - discount_percentage); }
関数ポインターを使用して、関数ポインターをパラメーターとして受け入れる一般的な割引計算関数を作成できます:
double apply_discount(double price, function_ptr discount_function) { return discount_function(price); }
Now ,さまざまな割引タイプに対してさまざまな関数を作成し、それらを 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
関数に渡し、学生のリストを希望の順序で並べ替えます。これは、関数ポインターを使用してコードの再利用性を高める方法を示しています。 🎜以上がC++ 関数ポインターの原理を分析してコードの再利用機能を強化します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。