函数指针是一种指向函数的指针,允许动态调用函数,从而增强代码复用性。例如,可创建一个通用折扣计算函数,接受函数指针作为参数,并为不同折扣类型创建不同的函数,通过传递不同的函数指针实现不同折扣计算。在 c++++ 中,排序策略函数指针可用于根据排序策略对学生列表排序,展示函数指针在代码复用中的应用。
剖析 C++ 函数指针增强代码复用能力的原理
函数指针简介
函数指针是一种指向函数的指针,允许我们动态地调用函数。它的类型为指向函数返回值类型(或 void)的指针。例如:
<a style='color:#f60; text-decoration:underline;' href="https://www.php.cn/zt/58423.html" target="_blank">typedef</a> 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);
}
现在,我们可以为不同的折扣类型创建不同的函数,并将其传递给 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 函数,以按所需的顺序对学生列表进行排序。这展示了如何使用函数指针来增强代码的复用性。