Jadual Kandungan
Analisis prinsip penunjuk fungsi C++ untuk meningkatkan keupayaan penggunaan semula kod
Pengenalan kepada penunjuk fungsi
Kelebihan penunjuk fungsi
Contoh: Mengira diskaun
实战案例
Rumah pembangunan bahagian belakang C++ Analisis prinsip penunjuk fungsi C++ untuk meningkatkan keupayaan penggunaan semula kod

Analisis prinsip penunjuk fungsi C++ untuk meningkatkan keupayaan penggunaan semula kod

Jun 04, 2024 pm 01:45 PM
penunjuk fungsi penggunaan semula kod

Penunjuk fungsi ialah penuding kepada fungsi yang membenarkan panggilan fungsi yang dinamik, dengan itu meningkatkan kebolehgunaan semula kod. Contohnya, anda boleh mencipta fungsi pengiraan diskaun am yang menerima penunjuk fungsi sebagai parameter dan mencipta fungsi berbeza untuk jenis diskaun yang berbeza untuk melaksanakan pengiraan diskaun yang berbeza dengan menghantar penunjuk fungsi yang berbeza. Dalam C++, penunjuk fungsi strategi pengisihan boleh digunakan untuk mengisih senarai pelajar mengikut strategi pengisihan, menunjukkan aplikasi penunjuk fungsi dalam penggunaan semula kod.

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

Analisis prinsip penunjuk fungsi C++ untuk meningkatkan keupayaan penggunaan semula kod

Pengenalan kepada penunjuk fungsi

Penunjuk fungsi ialah penunjuk kepada fungsi yang membolehkan kita memanggil fungsi secara dinamik. Jenisnya ialah penunjuk kepada jenis nilai pulangan fungsi (atau tidak sah). Contohnya:

typedef int (*function_ptr)(int);
Salin selepas log masuk

Ini mentakrifkan jenis penuding kepada fungsi yang mengembalikan jenis int.

Kelebihan penunjuk fungsi

Kelebihan utama menggunakan penunjuk fungsi ialah kebolehgunaan semula kodnya. Dengan menggunakan penunjuk fungsi, kita boleh mengelak daripada menulis segmen kod yang sama berulang kali.

Contoh: Mengira diskaun

Pertimbangkan senario di mana anda mempunyai fungsi untuk mengira diskaun:

double calculate_discount(double price, double discount_percentage) {
  return price * (1 - discount_percentage);
}
Salin selepas log masuk

Menggunakan penunjuk fungsi, kita boleh mencipta fungsi pengiraan diskaun generik yang menerima penunjuk fungsi sebagai parameter:

Nowreee kita boleh mencipta fungsi yang berbeza untuk jenis diskaun yang berbeza dan menyerahkannya kepada fungsi apply_discount:

double apply_discount(double price, function_ptr discount_function) {
  return discount_function(price);
}
Salin selepas log masuk
apply_discount 函数:

double flat_discount_function(double price) {
  // 计算固定折扣
}

double percentage_discount_function(double price) {
  // 计算百分比折扣
}
Salin selepas log masuk

通过这种方式,我们可以通过传递不同的函数指针来实现折扣的不同计算方法。

实战案例

以下是一个演示如何使用函数指针增强代码复用性的 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;
}
Salin selepas log masuk

在这个示例中,我们定义了一个排序策略函数指针类型,并为不同的排序规则创建了具体的函数。然后,我们将排序策略函数指针传递给 sort_studentsDengan cara ini, kita boleh mencapai pengiraan diskaun yang berbeza dengan menghantar kaedah penunjuk fungsi yang berbeza.

🎜Kes Praktikal🎜🎜Berikut ialah contoh kod C++ yang menunjukkan cara menggunakan penunjuk fungsi untuk meningkatkan kebolehgunaan semula kod: 🎜rrreee🎜Dalam contoh ini, kami mentakrifkan jenis penunjuk fungsi strategi pengisihan dan mencipta fungsi tertentu. Kami kemudian menghantar penuding fungsi strategi isihan kepada fungsi sort_students untuk mengisih senarai pelajar dalam susunan yang dikehendaki. Ini menunjukkan cara penunjuk fungsi boleh digunakan untuk meningkatkan kebolehgunaan semula kod. 🎜

Atas ialah kandungan terperinci Analisis prinsip penunjuk fungsi C++ untuk meningkatkan keupayaan penggunaan semula kod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menukar penunjuk fungsi kepada objek fungsi dan sebaliknya? Bagaimana untuk menukar penunjuk fungsi kepada objek fungsi dan sebaliknya? Apr 18, 2024 am 08:54 AM

Dalam C++, penunjuk fungsi boleh ditukar kepada objek fungsi melalui templat std::function: gunakan std::function untuk membalut penunjuk fungsi ke dalam objek fungsi. Gunakan fungsi ahli std::function::target untuk menukar objek fungsi kepada penunjuk fungsi. Transformasi ini berguna dalam senario seperti pengendalian acara, panggilan balik fungsi dan algoritma generik, memberikan lebih fleksibiliti dan kebolehgunaan semula kod.

Memahami Pengurusan Memori Penunjuk Fungsi C++: Mengelak Perangkap Penunjuk Memahami Pengurusan Memori Penunjuk Fungsi C++: Mengelak Perangkap Penunjuk Apr 29, 2024 pm 09:03 PM

Apabila menggunakan penunjuk fungsi dalam C++, pengurusan memori mesti dipertimbangkan dengan teliti untuk mengelakkan perangkap. Perangkap ini termasuk penunjuk berjuntai (menunjuk ke fungsi di luar skopnya) dan penunjuk liar (penunjuk fungsi yang tidak pernah dimulakan atau ditetapkan kepada nullptr). Untuk mengelakkan perangkap ini, ikuti amalan terbaik ini: sentiasa mulakan penunjuk fungsi, urus memori dengan berhati-hati dan gunakan penunjuk pintar. Dengan cara ini anda boleh menggunakan penunjuk fungsi dengan selamat dan mengelak daripada jatuh ke dalam perangkap penunjuk.

Apakah perbezaan antara ungkapan lambda dan penunjuk fungsi dalam fungsi C++? Apakah perbezaan antara ungkapan lambda dan penunjuk fungsi dalam fungsi C++? Apr 25, 2024 pm 04:12 PM

Ungkapan Lambda dan penunjuk fungsi ialah kedua-dua mekanisme untuk merangkum kod dalam C++, tetapi ia berbeza dalam pelaksanaan dan ciri: Pelaksanaan: penunjuk fungsi menunjuk ke alamat memori fungsi, manakala ungkapan lambda ialah blok kod tanpa nama sebaris. Jenis pemulangan: Jenis pemulangan penunjuk fungsi ditetapkan, manakala jenis pemulangan ungkapan Lambda ditentukan oleh blok kod badannya. Tangkapan pembolehubah: Penunjuk fungsi tidak boleh menangkap pembolehubah luaran, tetapi ungkapan Lambda boleh menangkap pembolehubah luaran melalui rujukan atau nilai melalui kata kunci [&] atau [=]. Sintaks: Gunakan asterisk (*) untuk penunjuk fungsi dan kurungan segi empat sama ([]) untuk ungkapan lambda.

Apakah senario penggunaan dan kelebihan penunjuk fungsi C++? Apakah senario penggunaan dan kelebihan penunjuk fungsi C++? Apr 11, 2024 pm 12:45 PM

Penunjuk fungsi membenarkan menyimpan rujukan kepada fungsi, memberikan fleksibiliti tambahan. Senario penggunaan termasuk pemprosesan peristiwa, pengisihan algoritma, transformasi data dan polimorfisme dinamik. Faedah termasuk fleksibiliti, penyahgandingan, penggunaan semula kod dan pengoptimuman prestasi. Aplikasi praktikal termasuk pemprosesan peristiwa, pengisihan algoritma dan transformasi data. Dengan penunjuk fungsi, pengaturcara C++ boleh mencipta kod yang fleksibel dan dinamik.

Bagaimana untuk menggunakan penunjuk fungsi dalam PHP? Bagaimana untuk menggunakan penunjuk fungsi dalam PHP? Apr 11, 2024 am 10:39 AM

Dalam PHP, penunjuk fungsi ialah pembolehubah yang dipanggil fungsi panggil balik yang menunjuk ke alamat fungsi. Ia membenarkan pemprosesan dinamik fungsi: Sintaks: $functionPointer='function_name' Contoh praktikal: Lakukan operasi pada tatasusunan: usort($numbers,'sortAscending') sebagai parameter fungsi: array_map(function($string){...},$ rentetan )Nota: Penunjuk fungsi menghala ke nama fungsi, yang mesti sepadan dengan jenis yang ditentukan dan memastikan fungsi yang ditunjuk sentiasa wujud.

Bagaimana untuk menggunakan penunjuk fungsi PHP? Bagaimana untuk menggunakan penunjuk fungsi PHP? Apr 16, 2024 am 10:42 AM

Penunjuk fungsi PHP membenarkan fungsi dihantar sebagai hujah dan boleh digunakan untuk mencipta fungsi panggil balik atau menggunakan semula kod. Sintaks: $functionPointer=function_name; atau fungsi tanpa nama: $functionPointer=function($arg1,$arg2){...}; () fungsi menerima parameter penunjuk fungsi dan gunakan call_user_func() untuk memanggil fungsi. Nota: Penunjuk fungsi mestilah fungsi yang sah atau fungsi tanpa nama ia tidak boleh menunjuk kepada kaedah peribadi ia akan dijana jika fungsi itu tidak wujud;

Apakah aplikasi penunjuk fungsi C++ dalam kaedah maya dan jadual maya? Apakah aplikasi penunjuk fungsi C++ dalam kaedah maya dan jadual maya? Apr 17, 2024 pm 06:00 PM

Penunjuk fungsi C++ digunakan dalam kaedah maya untuk menyimpan penunjuk kepada pelaksanaan kaedah yang ditindih dalam kelas terbitan, dan dalam jadual maya untuk memulakan jadual maya dan menyimpan penunjuk kepada pelaksanaan kaedah maya, dengan itu mencapai polimorfisme masa jalan dan membenarkan kelas terbitan mengatasi kaedah Maya dalam pangkalan. kelas dan panggil pelaksanaan yang betul berdasarkan jenis sebenar objek semasa runtime.

Bagaimanakah penunjuk fungsi C++ membandingkan dan membezakan dengan ungkapan lambda? Bagaimanakah penunjuk fungsi C++ membandingkan dan membezakan dengan ungkapan lambda? Apr 17, 2024 pm 04:45 PM

Penunjuk fungsi dan ungkapan Lambda ialah kedua-dua teknik untuk merangkum blok kod dalam C++, dan ia berbeza. Penunjuk fungsi ialah penuding tetap yang menunjuk ke alamat memori fungsi, manakala ungkapan Lambda ialah fungsi tanpa nama dengan sintaks yang lebih fleksibel dan boleh menangkap pembolehubah luaran. Penunjuk fungsi sesuai untuk senario di mana keselamatan jenis dan overhed rendah diperlukan, dan ungkapan lambda sesuai untuk senario yang memerlukan kerahasiaan nama dan menangkap pembolehubah luaran.

See all articles