Pointeurs vers des objets




с++, pointeurs vers des objets, Programmation pour les débutants, c++c ++Tout d'abord connaissance avec des pointeurs en C ++ (voir. Pointeurs en C ++. partie 1 ) il peut y avoir une représentation simplifiée, que les pointeurs peuvent pointer uniquement aux variables individuelles intégrées (skalyarnıx) Type de C, et que cela est juste une, une variante de l'accès à de telles variables. Dans un tel pointeurs application serait une belle addition de la langue, mais avec une capacité très limitée.

Un examen plus approfondi des pointeurs C ++, nous trouvons, le pointeur peut être l'adresse d'hébergement (le point de) tout admissible dans une application: structure, objet de classe, tableau, fonctions, ou encore, un pointeur vers un objet, ou un pointeur vers un pointeur, etc.… Il fait des signes presque l'outil le plus puissant du programmeur C ++ ... mais aussi les plus dangereux en termes d'erreurs cachées possibles.

Pensez à ces modes de réalisation. L'option la plus simple est d'utiliser des pointeurs vers des objets complexes (objets de la classe et les structures). Mais une telle utilisation de pointeurs ouvre de larges perspectives en C ++, comme nous le verrons.

si, nous savons déjà, que la description de la classe ne crée pas d'objets de base de données nouvelles dans le programme - il est seulement une description d'un modèle, nouveau le type de données, selon lequel créera réel objets données. lorsque vous créez (publicité) de nouveaux objets de données, nous pouvons calculer l'adresse de ces objets et de les assigner pointeurs vers des objets cette classe. Ecrire un programme simple, operiruyushtuyu avec pointeurs vers des objets une classe (файл ex1.cc):

Ici, nous voyons relativement nouveau dans nos sujets de construction:

cette concepteur nouvelle classe mon, mais avec un paramètre création. Lorsque vous appelez appelle le constructeur de la classe parent (nombre(engourdi)), en lui donnant la même valeur. Les supports suivants {} cadre nul code de bloc, lesquels moyens, que rien de plus à faire sur et au-dessus du constructeur parent d'appel. ne pas oublier, que la séquence entière des constructeurs de toutes les classes parentes – causé (dans l'ordre inverse de succession) lors de l'appel engendré par le constructeur de la classe, mais il est uniquement pour les concepteurs sans paramètres. Dans le cas des constructeurs paramétrés rodieley vous devrez appeler la apparemment.

Mais nous allons faire une digression du sujet de notre discussion… Et maintenant il est temps de rassembler et de voir l'exécution du programme que nous avons reçu:

с++, pointeurs vers des objets, Programmation pour les débutants, c++c ++

Jusqu'à présent, rien de nouveau, et tout cela est un peu comme la, nous avons travaillé avec des pointeurs vers des variables de type double, disons.

rappel, en plus, que оператор nouveau pour générer dynamiquement un objet:

et) cause gestionnaire de gestion de la mémoire dynamique et alloue un nouveau volume pour placer un objet tel;

b) les causes concepteur la classe correspondante (le type de données) pour le marquage initial (initialisation) mémoire dédiée. modifier légèrement son exemple (файл ex2.cc):

Et exécution de:

с++, pointeurs vers des objets, Programmation pour les débutants, c++c ++

Pourtant, il n'y a pas eu de changements radicaux ..., mais attention à la, que le programme (et il pourrait être arbitrairement grand programme) Ils ne sont pas déclarés et non utilisés explicitement objets - Le programme fonctionne uniquement avec des pointeurs vers des objets.

et, enfin, on se rapproche des techniques dans l'utilisation de pointeurs vers des objets, ce qui en fait les plus puissants indicateurs de l'outil de travail avec cours et les objets en C ++. à savoir: fonctions membres de la virtualisation et le polymorphisme de classe. polymorphisme concept (la variabilité de la forme, beaucoup de visages) – l'un des principaux développement C ++ sur son prédécesseur, le C. il est, que le géniteur d'une famille classes héritées annonce certaines de ses fonctions, des méthodes telles que virtuel. A différentes classes héritées de ces caractéristiques méthodes redéfinie différemment. cela signifie que, que les différentes classes dérivées (connexe) méthode de la fonction du même nom sera effectué de manière quelque peu différente, en fonction de la classe dans laquelle il est utilisé.

Montrons cette technique par exemple. créer (файл ex3.cc) classe, qui décrit en général toute forme plate sur un plan (cela pourrait être des éléments d'un scénario de jeu 2D):

Ici, nous avons un exemple de, que C ++ est appelée abstrait classe: classe, ce qui définit au moins une virtuel fonction avec un certain type:

Dans les caractéristiques de classe illustrés tels que beaucoup 3. naturellement, qui créent objet classe abstraite impossible, il contient une fonction, lequel corps est pas défini. Toute tentative de déclarer les objets de cette classe provoquera une erreur de syntaxe. Mais d'une telle classe, vous pouvez hériter, créer des classes dérivées, , qui héritera des propriétés générales d'un résumé générique (par exemple, Les coordonnées X et et le centre de la figure et sa taille r).

définir 3 dérivés à partir de figure classe: rond, carré et un triangle équilatéral:

Maintenant, nous sommes prêts à créer un programme, pour lequel ils ont été construits tous ces préparatifs: créer un nombre différent 2D géométrique objets, sur laquelle nous pouvons effectuer uniforme (virtuel) actes, quels que soient leurs natures différentes:

Dans cet exemple très simple illustre la, dans modèle d'objet C de langue appelé polymorphismes. Et cette propriété est l'un des outils les plus puissants d'expression de C ++. Et cette technique est toujours réalisée par pointeurs vers des objets (figure*).

Voici à quoi il ressemblera la compilation et la mise en œuvre de notre exemple (ex3.cc) au terminal du système d'exploitation Linux lors de l'utilisation du compilateur GCC avec le langage C ++ (il confirme une nouvelle fois, que la programmation en langage C ++ dans le moins dépendant du système d'exploitation):

с++, pointeurs vers des objets, Programmation pour les débutants, c++c ++

En se référant à nouveau à l'aide du code présenté dans l'exemple, et encore une fois corriger le fait extrêmement important, que les pointeurs C ++ de toujours typé: Index ne peut pas être « un pointeur vers quelque chose ». La langue du C – une langue Nom forte tipizacieй. Tapez le pointeur est: un pointeur pour indiquer le type de celui-ci la variable, tels que « pointeur sur un double». Pointeurs à différents types sont incompatibles entre eux et par rapport à Assigned.

La technologie des fonctions virtuelles et polymorphisme sont tellement au cœur de la philosophie de C ++, qui nécessitent un examen détaillé séparé. A propos de ce discours dans l'une des leçons suivantes.

Pour soutenir notre site – cliquez sur la tirelire et choisir un moyen pratique.

Bulletin de nouvelles leçons sur la programmation:

Pointeurs vers des objets
5 (100%) 1 vote

huile

Sur huile

une expérience pratique sur le développement de logiciels 40 ans. société de logiciels internationale Global Teacher Logic. IBM Developer Works auteur permanent des publications. éditeur scientifique de l'ordinateur littérature maison d'édition "Symbole-Plus", Saint-Pétersbourg.

7 réflexions sur "Pointeurs vers des objets

  1. par thème – le pointeur indique le début de la zone de mémoire (stocke l'adresse). Et il n'y a plus rien à écrire à ce sujet, tk. en utilisant le pointeur vous suffit de prendre la valeur à cette adresse, et le conduire au type désiré (tout).
    Si divulguer le sujet – À mon humble avis, il est nécessaire d'écrire à ce sujet, quels sont les problèmes résolus pointeurs (sans toucher l'OLP, tk. alors ce thème est presque pas divulguée) et écrire sur la base des pointeurs vs liens (le sujet a été décrit dans Myers, vous pouvez le prendre base).

    Mais vous aimez ce que vous déplaciez considérablement polymorphisme. Il est pas mal, mais pour les utilisateurs, qui ne lisent que votre site Web est maintenant peu qui est clair. Avant cela,, décrivant les classes que vous n'avez pas écrit sur les fonctions virtuelles, et même sur l'héritage. Et puis est soudainement tombé au lecteur toutes les classes abstraites et ce.

    A la fin de l'article que vous décrivez polymorphisme – Je pense que ça vaut un article distinct. Mais avant cela, d'écrire un article sur “les classes d'héritage en C ++” (Ce dernier thème dans votre plan sur la page principale)

  2. dire, et qui est admin? Lily ou Igor? J'ai toujours pensé, que le nom de l'administrateur écrit Igor.

  3. A, signifier que la ligne? Dans la première liste

    1. L'objet de classe (type) mon – M1.
      Un pointeur vers l'objet – PM1.
      m1.show() – appel de méthode (fonctions) montrer() ma classe pour l'objet m1.
      pm1->montrer() – appel exactement le même méthode de spectacle() ma classe par aiguille objet m1.

      1. En fait, m1 – il est un objet, et PM1 – un pointeur vers un objet complètement différent de la même classe (le tas).

Laisser un commentaire

Votre adresse email ne sera pas publiée. les champs requis sont indiqués *