Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ubah kod dengan petunjuk fungsi C++: tingkatkan kecekapan dan kebolehgunaan semula

Ubah kod dengan petunjuk fungsi C++: tingkatkan kecekapan dan kebolehgunaan semula

PHPz
PHPzasal
2024-04-29 18:45:01382semak imbas

Teknologi penuding fungsi boleh meningkatkan kecekapan dan kebolehgunaan semula kod, khususnya seperti berikut: Kecekapan yang dipertingkatkan: Menggunakan penunjuk fungsi boleh mengurangkan kod pendua dan mengoptimumkan proses panggilan. Tingkatkan kebolehgunaan semula: Penunjuk fungsi membenarkan penggunaan fungsi umum untuk memproses data yang berbeza, meningkatkan kebolehgunaan semula program.

用 C++ 函数指针改造代码:提升效率和可复用性

Ubah kod anda dengan penunjuk fungsi C++: tingkatkan kecekapan dan kebolehgunaan semula

Penunjuk fungsi ialah alat berkuasa yang membolehkan menghantar fungsi sebagai parameter kepada fungsi lain. Dengan memanfaatkan ciri ini, kami boleh mengubah kod kami untuk menjadikannya lebih cekap dan boleh digunakan semula.

Tingkatkan kecekapan

Menggunakan penunjuk fungsi boleh mengurangkan jumlah kod pendua. Sebagai contoh, kami mempunyai tatasusunan fungsi di mana setiap fungsi melakukan pengiraan yang berbeza:

double calculate1(double x) { return x * x; }
double calculate2(double x) { return x * x * x; }
double calculate3(double x) { return pow(x, 4); }

Sekarang, kami ingin mencipta fungsi yang boleh memanggil mana-mana fungsi ini berdasarkan indeks integer yang diberikan. Cara tradisional adalah dengan menggunakan pernyataan bersyarat:

double calculate(int index, double x) {
  if (index == 1) return calculate1(x);
  else if (index == 2) return calculate2(x);
  else return calculate3(x);
}

Menggunakan penunjuk fungsi, kita boleh menyimpan tatasusunan fungsi dalam tatasusunan penunjuk:

double (*calculateFuncs[])(double) = {calculate1, calculate2, calculate3};

Kita kemudiannya boleh menggunakan indeks untuk memanggil fungsi yang dikehendaki secara terus:

double calculate(int index, double x) {
  return calculateFuncs[index](x);
}

Ini menghapuskan Menghapuskan keperluan untuk pernyataan bersyarat, dengan ketara mengurangkan jumlah kod.

Tingkatkan kebolehgunaan semula

Penunjuk fungsi juga meningkatkan kebolehgunaan semula. Sebagai contoh, kita boleh mencipta fungsi pengisihan umum yang mengisih data berdasarkan fungsi perbandingan yang diberikan:

void sort(int* arr, int size, bool (*compare)(int, int)) {
  // 排序算法
}

Fungsi perbandingan menentukan cara dua elemen harus diisih. Ini membolehkan kami menggunakan algoritma pengisihan yang berbeza, seperti isihan gelembung atau isihan pantas, tanpa mengubah suai fungsi isihan itu sendiri.

Kes Praktikal

Mari kita pertimbangkan kes praktikal di mana kita ingin mencipta kalkulator yang boleh melakukan operasi matematik yang berbeza.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

typedef double (*FunctionPointer)(double);

vector<FunctionPointer> functions;

void registerFunction(FunctionPointer func) {
  functions.push_back(func);
}

double calculate(int index, double x) {
  return functions[index](x);
}

int main() {
  registerFunction(calculate1);
  registerFunction(calculate2);
  registerFunction(calculate3);

  double x;
  int index;
  cout << "Enter a number: ";
  cin >> x;
  cout << "Enter the function index (1-3): ";
  cin >> index;
  cout << "Result: " << calculate(index - 1, x) << endl;

  return 0;
}

Program ini membolehkan pengguna memasukkan nombor dan indeks fungsi, kemudian mengira dan mengeluarkan hasilnya. Dengan menggunakan penunjuk fungsi untuk mendaftar dan memanggil fungsi yang diperlukan secara dinamik, kami meningkatkan kebolehgunaan semula dan kecekapan kod.

Atas ialah kandungan terperinci Ubah kod dengan petunjuk fungsi C++: tingkatkan kecekapan dan kebolehgunaan semula. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn