首頁  >  文章  >  後端開發  >  剖析 C++ 函數指標增強程式碼復用能力的原理

剖析 C++ 函數指標增強程式碼復用能力的原理

WBOY
WBOY原創
2024-06-04 13:45:01791瀏覽

函數指針是一種指向函數的指針,允許動態呼叫函數,從而增強程式碼復用性。例如,可建立通用折扣計算函數,接受函數指標為參數,並為不同折扣類型建立不同的函數,透過傳遞不同的函數指標來實現不同折扣計算。在 C++ 中,排序策略函數指標可用於根據排序策略對學生列表排序,展示函數指標在程式碼重複使用中的應用。

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

剖析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);
}

現在,我們可以為不同的折扣類型建立不同的函數,並將其傳遞給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 函數,以所需的順序對學生清單進行排序。這展示瞭如何使用函數指標來增強程式碼的複用性。

以上是剖析 C++ 函數指標增強程式碼復用能力的原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn