Maison >développement back-end >C++ >Explication détaillée des fonctions membres C++ : comparaison des méthodes objet et des pointeurs de fonction

Explication détaillée des fonctions membres C++ : comparaison des méthodes objet et des pointeurs de fonction

WBOY
WBOYoriginal
2024-04-30 09:03:02332parcourir

La différence entre les fonctions membres et les pointeurs de fonction : Syntaxe : les méthodes objet utilisent la syntaxe par points et les pointeurs de fonction utilisent l'opérateur de déréférencement. Paramètres implicites : les méthodes objet ont ces pointeurs, pas les pointeurs de fonction. Accessibilité : les méthodes objet ne peuvent accéder qu'aux données contenues dans l'objet, et les pointeurs de fonction peuvent accéder à n'importe quel identifiant. Efficacité : les méthodes objet sont généralement plus lentes que les pointeurs de fonction en raison de la nécessité de rechercher le pointeur this.

C++ 成员函数详解:对象方法与函数指针的比较

Explication détaillée des fonctions membres C++ : Comparaison des méthodes objet et des pointeurs de fonction

Introduction

En C++, une fonction membre est une fonction incluse dans la définition de la classe. Elles ressemblent à des fonctions ordinaires, mais ont un paramètre implicite spécial : l'objet lui-même (appelé le pointeur this). Les fonctions membres peuvent accéder et modifier les données et méthodes privées d'un objet. 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
Méthode Objet

La méthode Objet est un type de fonction membre qui peut être appelée via un objet comme une fonction normale. La syntaxe est la suivante :

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;
}

Par exemple :

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;
}

Pointeur de fonction

🎜Un pointeur de fonction est une variable pointeur pointant vers une fonction. Les pointeurs de fonction peuvent être attribués à des variables ou transmis à d'autres fonctions. La syntaxe est la suivante : 🎜rrreee🎜 Par exemple : 🎜rrreee🎜🎜Comparer 🎜🎜🎜Il existe plusieurs différences clés entre les méthodes objet et les pointeurs de fonction : 🎜
  • 🎜Syntaxe : 🎜Les méthodes objet utilisent la syntaxe par points, tandis que pointeurs de fonction Utilisez l'opérateur de déréférencement. 🎜
  • 🎜Paramètres implicites : 🎜Les méthodes d'objet ont un paramètre implicite (pointeur this), contrairement aux pointeurs de fonction. 🎜
  • 🎜Accessibilité : 🎜Les méthodes d'objet ne peuvent accéder qu'aux données et aux méthodes de l'objet, tandis que les pointeurs de fonction peuvent accéder aux identifiants dans n'importe quelle portée. 🎜
  • 🎜Efficacité : 🎜Les méthodes d'objet sont généralement plus lentes que les pointeurs de fonction en raison de la nécessité de rechercher le pointeur this. 🎜🎜🎜🎜Cas pratique🎜🎜🎜Considérons un système simple de gestion d'étudiants utilisant la programmation orientée objet. Nous pouvons créer et gérer des objets étudiants à l'aide de méthodes objet : 🎜rrreee🎜 D'un autre côté, nous pouvons également utiliser des pointeurs de fonction pour fournir la même fonctionnalité de gestion des étudiants : 🎜rrreee🎜 Dans les deux exemples, nous avons créé et géré avec succès les données des étudiants. La méthode à choisir dépend des besoins spécifiques et des exigences de performances. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn