Les opérateurs de C - Partie 7 Introduction Cela fait partie de ma série 7, les opérateurs de C. Dans cette partie de la série, nous regardons ce qui est connu comme opérateurs pointeur à membre. Il ya deux opérateurs pointeur à membre. Je ne vais pas expliquer seuls les opérateurs pointeur à membre à cet article; Je vais vous expliquer d'autres choses qui vont avec que vous ne pouvez pas être familier. Remarque: Si vous ne pouvez pas voir le code ou si vous pensez que quelque chose manquait (lien brisé, l'image absente), contactez-moi au [email protected].
Qui est, me contacter pour le moindre problème que vous avez à propos de ce que vous lisez. Condition préalable Vous devez avoir lu de ce blog, les articles, "C ++ pointeurs", "C ++ Espaces de noms Basics» et «Les pointeurs vers des classes en C ++" ou articles similaires avant de lire celui-ci. Ces trois articles sont parmi les deux séries que je l'ai mentionné dans les parties précédentes de cette série. Reliure Imaginez que vous avez deux classes, A et B, et de classe A est une propriété (objet) de la classe B. Vous instancier un objet de B.
Ensuite, vous modifiez l'objet de propriété de B, qui est de classe A. Vous pouvez ensuite lier cette propriété de B à B l'objet de sorte que les effets seront visibles dans un objet instancié d'R. Nous verrons des exemples ci-dessous. L'opérateur binaire. * Penchons-nous sur un exemple qui utilise l'opérateur *.. L'opérateur se compose du point suivi par l'astérisque. Considérons le code suivant: #include using namespace std; classe A {public: int propA; }; classe B {public: Un propB; }; A B :: * propBPtr = & B :: propB; int main () {B b; b.propB.propA = 9; A a = b * propBPtr.
Cout return 0; } Deux classes, A et B sont décrits. Classe A a une propriété, propA, qui est de type int. Classe B possède une propriété, propB, ce qui est de la classe Un type. propB est une instanciation de la classe A. Après la description de classe B dans le code, vous avez la déclaration, AB :: * propBPtr = & B :: propB; Cette déclaration est une déclaration d'initialisation. L'opérateur pointeur à membre fonctionne avec un pointeur vers propB en classe B.
Ceci est un pointeur spécial, car il est un pointeur à la propriété dans la description de la classe et non à un objet instancié de la classe. Notez que la propriété dans la classe B, nous parlons ici est de type A. La description de classe est similaire à une description de l'espace de noms. Donc, pour accéder à une propriété d'une classe, vous devez l'opérateur de portée (: :) comme vous en avez besoin pour accéder à un identificateur dans une description de l'espace de noms.
Voyons maintenant à la déclaration d'initialisation: Sur la droite de l'opérateur d'affectation simple, vous avez une référence (& B :: propB) à la propriété dans la description de classe B, qui est de type A. Notez l'utilisation de l'opérateur de portée Là. Sur la gauche, vous avez la déclaration de pointeur de cette propriété qui est dans la description de la classe B et le pointeur pointe vers une propriété de type A.
Ainsi, la déclaration de pointeur commence par A, puis B pour la classe B, l'opérateur de portée, puis pointeur astérisque et le pointeur; vous pouvez donner le nom que vous voulez pour le pointeur. Cette déclaration est une initialisation de pointeur spéciale. Maintenant, penchons-nous sur ce qui est dans la fonction principale. Dans main un objet de B, appelé b, est instancié. La propriété, propB de l'objet b est alors accessible. Cette propriété est de type A. Le but de cet accès est de donner une valeur à la propriété int de la propriété en b.
Donc, il est propA de l'objet, propB de l'objet b qui est effectivement accessible. Donc, vous commencez avec B, puis un point, puis propB, puis un point, puis propA. Eh bien, vous avez alors la cession d'un int, qui dans ce cas est de 9. La déclaration suivante utilise l'opérateur pointeur à membre. Il se lie propB utilisant son pointeur à la propriété dans la description de classe B. Le pointeur est le deuxième opérande de la. * Opérateur et l'objet B est le premier opérande de l'opérateur. Le résultat (ou de la valeur de retour) de cette liaison est un objet de type A.
Le résultat est affecté (copié) à un objet instancié de type A dans le code; cet objet est appelé, une Voici des citations de la spécification C ++ sur l'opérateur de liaison, (. *). "L'opérateur binaire. * Se lie sa deuxième opérande, qui doit être de type" pointeur vers un membre de T "(où T est un type complètement défini classe) à son premier opérande, qui doit être de classe T. Le résultat est une objet du type spécifié par le second opérande. ". Maintenant, l'instruction suivante affiche la valeur de la propriété d'un int.
Cette valeur est 9, qui a été affectée à la propriété int de l'objet de type A qui est la propriété de la description de classe B. En raison de la liaison, le nouvel objet instancié, un, a la valeur dans sa propriété. L'opérateur binaire -> * Cet opérateur commence par le symbole -> suivi par *. Le but de cet opérateur pointeur à membre est le même que celui de l'opérateur précédent, mais son premier opérande est un pointeur vers l'objet de b et b ne l'identificateur d'objet.
Le code suivant montre comment l'utiliser: #include using namespace std; classe A {public: int propA; }; classe B {public: Un propB; }; A B :: * propBPtr = & B :: propB; int main () {B * bptr; bPtr-> propB.propA = 9; A a = bptr -> * propBPtr; Cout return 0; } Dans le code ci-dessus, la déclaration de l'opérateur pointeur à membre est, A a = bptr -> * propBPtr; Les opérateurs pointeur à membre opèrent à partir de gauche à droite. Vous avez deux d'entre eux, qui sont * et -.
>