Maison > développement back-end > C++ > Quelle est la différence entre les opérateurs de pointeur vers membre `->*` et `.*` de C ?

Quelle est la différence entre les opérateurs de pointeur vers membre `->*` et `.*` de C ?

Linda Hamilton
Libérer: 2024-11-19 04:24:03
original
617 Les gens l'ont consulté

What's the Difference Between C  's `->*` et `.*` Opérateurs de pointeur vers membre ?
*` et `.*` Opérateurs de pointeur vers membre ? " />

Démystifier les opérateurs pointeur vers membre -> et . en C

Malgré avoir exploré les ressources existantes, vous pouvez toujours vous retrouver perplexe face à la opérateurs énigmatiques -> et . en C . Cet article vise à faire la lumière sur leur vraie nature et à clarifier quand leur utilisation devient nécessaire.

Comprendre l'objectif du pointeur vers. -Opérateurs de membres

Les deux -> et . sont des opérateurs de pointeur vers les membres qui facilitent l'accès indirect aux fonctions membres. Cette terminologie complexe signifie essentiellement qu'ils vous permettent d'invoquer. une fonction membre via un pointeur plutôt que directement à partir d'un objet.

Syntaxe et utilisation

  • -> : Cet opérateur est utilisé pour déréférencer un pointeur qui pointe vers une fonction membre d'un objet. Sa syntaxe est (ptr->member_func_ptr)().
  • .: Semblable à ->, cet opérateur déréférence également un pointeur vers une fonction membre. Cependant, il est utilisé lorsque le pointeur est déréférencé via le pointeur ou la classe d'un objet. Sa syntaxe est (object_ptr.*member_func_ptr)().

Quand utiliser -> vs. .

  • ->* : Utilisez cet opérateur lors du déréférencement d'un pointeur vers une fonction membre via un pointeur vers un objet.
  • .* : Utilisez cet opérateur lors du déréférencement un pointeur vers une fonction membre via le pointeur ou la classe d'un objet.

Exemple

Considérons une classe X avec les fonctions membres suivantes : f() et g (). Supposons que vous ayez un pointeur qui pointe vers la fonction f() :

struct X {
  void f() {}
  void g() {}
};

typedef void (X::*pointer)();
pointer somePointer = &X::f;
Copier après la connexion

Pour appeler somePointer en utilisant un objet x, vous utiliseriez :

X x;
(x.*somePointer)(); // Calls x.f()
Copier après la connexion

Si x n'est pas un objet mais un pointeur vers un objet, vous pouvez appeler la fonction membre en utilisant ->* comme suit :

X* px = new X;
(px->*somePointer)(); // Calls px->f()
Copier après la connexion

Cet exemple illustre que l'utilisation de ->> ou . est cruciale lors de l'accès le membre fonctionne indirectement via des pointeurs, en particulier lorsqu'il s'agit d'objets pointés.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal