Perbezaan antara fungsi ahli dan penunjuk fungsi: Sintaks: Kaedah objek menggunakan sintaks titik, dan penunjuk fungsi menggunakan operator dereference. Parameter tersirat: Kaedah objek mempunyai penunjuk ini, penunjuk fungsi tidak. Kebolehcapaian: Kaedah objek hanya boleh mengakses data dalam objek dan penunjuk fungsi boleh mengakses sebarang pengecam. Kecekapan: Kaedah objek biasanya lebih perlahan daripada penunjuk fungsi kerana keperluan untuk mencari penunjuk ini.
Penjelasan terperinci tentang fungsi ahli C++: Perbandingan kaedah objek dan penunjuk fungsi
Pengenalan
Dalam C++, fungsi ahli ialah fungsi yang termasuk dalam definisi kelas. Ia seperti fungsi biasa, tetapi mempunyai parameter tersirat khas: objek itu sendiri (dipanggil penunjuk this
). Fungsi ahli boleh mengakses dan mengubah suai data dan kaedah peribadi objek. this
指针)。成员函数可以访问和修改对象的私有数据和方法。
对象方法
对象方法是成员函数的一种,可以像普通函数一样通过对象调用。语法如下:
object.function(args)
例如:
class Person { public: void set_name(std::string name) { this->name = name; } }; Person p; p.set_name("John Doe");
函数指针
函数指针是指向函数的指针变量。可以将函数指针分配给变量或传给其他函数。语法如下:
typedef return_type (*function_pointer)(args);
例如:
typedef void (*set_name_function)(std::string); set_name_function set_name_ptr = &Person::set_name; set_name_ptr(p, "Jane Doe");
比较
对象方法和函数指针之间有几个关键的区别:
this
指针),而函数指针没有。this
Kaedah objek ialah sejenis fungsi ahli yang boleh dipanggil melalui objek seperti fungsi biasa. Sintaksnya adalah seperti berikut:
class Student { public: void set_name(std::string name) { this->name = name; } void set_grade(int grade) { this->grade = grade; } void print() { std::cout << "Name: " << name << ", Grade: " << grade << std::endl; } }; int main() { Student student1; student1.set_name("Alice"); student1.set_grade(90); student1.print(); return 0; }
Contohnya:
typedef void (*set_name_function)(Student*, std::string); typedef void (*set_grade_function)(Student*, int); typedef void (*print_function)(Student*); void set_name(Student* student, std::string name) { student->name = name; } void set_grade(Student* student, int grade) { student->grade = grade; } void print(Student* student) { std::cout << "Name: " << student->name << ", Grade: " << student->grade << std::endl; } int main() { Student* student1 = new Student(); set_name_function set_name_ptr = &set_name; set_grade_function set_grade_ptr = &set_grade; print_function print_ptr = &print; set_name_ptr(student1, "Alice"); set_grade_ptr(student1, 90); print_ptr(student1); delete student1; return 0; }
ini
penuding), manakala penunjuk fungsi tidak. 🎜Atas ialah kandungan terperinci Penjelasan terperinci tentang fungsi ahli C++: perbandingan kaedah objek dan penunjuk fungsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!