Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2840 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  syntaxe C++ que je ne comprends pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

syntaxe C++ que je ne comprends pas

n°1499426
carabin
Posté le 05-01-2007 à 16:40:01  profilanswer
 

Bonjour,
 
En lisant un tuto sur win32 et c++, je suis tombé sur une classe qui as une syntaxe dint je ne connais pas la signification  (je ne trouve rien dans mon bouquin c++ qui n'est pourtant pas très vieux, et je ne vois pas trop comment formuler la recherche sur google)
 
Voici la syntaxe qui me chagrine  :sweat:  
 

Code :
  1. class WinSimpleClass
  2. {
  3. public:
  4. WinSimpleClass (char const * name, HINSTANCE hInst)
  5.  : _name (name), _hInstance (hInst)
  6. {}
  7. WinSimpleClass (int resId, HINSTANCE hInst);
  8. char const * GetName () const { return _name.c_str (); }
  9. HINSTANCE GetInstance () const { return _hInstance; }
  10.     HWND GetRunningWindow ();
  11. protected:
  12. HINSTANCE _hInstance;
  13. std::string _name;
  14. };


 
En fiat c'est la partie en rouge que je ne comprends pas  
 
public:
 WinSimpleClass (char const * name, HINSTANCE hInst)
  : _name (name), _hInstance (hInst)
 
je deduit que  _name et _hinstance sont privées, puisqu'ils commence par un underscore, mais que viennent t'ils faire (précédés d'un : ) dans la signature de la fonction ?
 
Pour info, ca vient de la : http://www.relisoft.com/win32/generic.html
 
Merci pour vas réponses  

mood
Publicité
Posté le 05-01-2007 à 16:40:01  profilanswer
 

n°1499431
Taz
bisounours-codeur
Posté le 05-01-2007 à 16:42:35  profilanswer
 

initialisation des membres.

n°1499437
++fab
victime du syndrome IH
Posté le 05-01-2007 à 16:49:35  profilanswer
 

D'ailleurs, l'initialisation des membres d'une classe se fait dans l'ordre de leurs déclarations, comme cet exemple ne le laisse pas penser.

n°1499449
++fab
victime du syndrome IH
Posté le 05-01-2007 à 17:06:42  profilanswer
 

carabin a écrit :

je deduit que  _name et _hinstance sont privées, puisqu'ils commence par un underscore


En l'occurrence, ils sont protected. Le fait qu'ils sont précédés d'un underscore n'y change rien -- et il vaut mieux éviter cette convention de nomage.

Message cité 1 fois
Message édité par ++fab le 05-01-2007 à 17:07:32
n°1499452
carabin
Posté le 05-01-2007 à 17:13:45  profilanswer
 

donc ca revient au même que si on faisait :
_name = name;
 
C'est ca ?
 

++fab a écrit :

En l'occurrence, ils sont protected. Le fait qu'ils sont précédés d'un underscore n'y change rien --


Oui, ca je sais que ce n'est pas le underscore quiles rend protected, et que c'est juste un moyen de reperer. Mais pourquoi vaut-il mieux l'eviter ? Et est ce que c'est pareil pour la notation a la hongroise (h pour les handles, i pour int, etc .. ) ?
 
En tout cas, merci a tout les deux  

n°1499457
++fab
victime du syndrome IH
Posté le 05-01-2007 à 17:29:57  profilanswer
 

carabin a écrit :

donc ca revient au même que si on faisait :
_name = name;
C'est ca ?

 

Avant de faire une affectation à un objet, celui ci doit avoir été construit au préalable.
Sans la liste d'initialisation, tu construit "_name" par défaut, puis tu luis affecte ensuite "name".
La liste d'initialisation permet de s'affranchir de la construction par défaut.

 
carabin a écrit :

Oui, ca je sais que ce n'est pas le underscore quiles rend protected, et que c'est juste un moyen de reperer. Mais pourquoi vaut-il mieux l'eviter ?


Parce que dans certains cas, ce sont des noms réservés à l'implémentation. Ici c'est légal, mais je serais toi, je l'éviterai.


Message édité par ++fab le 05-01-2007 à 18:01:02
n°1499462
franceso
Posté le 05-01-2007 à 17:38:15  profilanswer
 

carabin a écrit :

donc ca revient au même que si on faisait :
_name = name;


pas tout à fait :
lorsque tu entres dans le corps du constructeur, tous tes membres ont été créés, ce qui signifie en particulier que pour les membres dont le type est une classe, un constructeur par défaut a été appelé si tu n'as pas explicitement fourni une initialisation.
 
Un exemple pour éclaircir ces explications confuses :

Code :
  1. class A;
  2. class B
  3. {
  4.   A membre;
  5.   B (A a)
  6.   {
  7.     membre = a;
  8.   }
  9. };
  10. class C
  11. {
  12.   A membre;
  13.   C (A a)
  14.   : membre (a)
  15.   { }
  16. };


 
lorsque tu construis un objet de type B, les opérations effectuées sont :

  • initialisation de 'membre' par appel du constructeur par défaut de A
  • recopie de 'a' dans 'membre'

Ici, tu fais donc un appel inutile au constructeur par défaut de A
 
lorsque tu construis un objet de type C, comme tu as précisé une initialisation pour 'membre', tu ne fais que l'opération voulue :

  • initialisation de 'membre' par appel du constructeur par recopie de A


voila, j'espère que c'est un peu clair...
 
[edit]  [:benou_grilled]  grillé...

Message cité 1 fois
Message édité par franceso le 05-01-2007 à 17:39:06

---------------
TriScale innov
n°1499482
++fab
victime du syndrome IH
Posté le 05-01-2007 à 18:05:26  profilanswer
 

franceso a écrit :

[edit]  [:benou_grilled]  grillé...


On en a un peu marre de te manger grillé. Au bain marie, la prochaine fois stp :)

n°1499483
franceso
Posté le 05-01-2007 à 18:11:16  profilanswer
 

++fab a écrit :

On en a un peu marre de te manger grillé. Au bain marie, la prochaine fois stp :)


c'est vrai que là, avec presque 10min de retard, je devais être vraiment carbonisé !
 
Promis, je ferais mieux la prochaine fois :sweat:


---------------
TriScale innov
n°1499620
carabin
Posté le 06-01-2007 à 00:16:38  profilanswer
 

C'est très clair, merci pour vos explications. Et une fois que je sais qu'il s'agit d'une initialisation des membres, je sais au moins quoi taper dans Google comme recherche, ce qui m'as permis entre autre de trouver ceci http://ltiwww.epfl.ch/Cxx/c2_4.html#c2_4_2
Parce qu'avant, j'avis du mal a savoir quoi demander (???)
(Mieux, j'ai même trouvé dans mon bouquin en entrefilet de 3 lignes ou on y fait allusion)
 
J'aurais une autre question sur un point qui n'est pas très clair pour moi, si ca ne vous dérange pas.  
 
On a une classe A avec un membre static m. On déclare une classe B qui hérite de A, et donc normalement aussi de ce membre static.  
 
La question est est ce que c'est la même variable (c-a-d même emplacement mémoire) qui seras commun aux classes A et aux classes B, ou bien y a t'il un membre m commun a toutes les classes A et un autre communs a toutes les classes (B + A) ?
 
J'espère avoir été clair !

mood
Publicité
Posté le 06-01-2007 à 00:16:38  profilanswer
 

n°1499641
Taz
bisounours-codeur
Posté le 06-01-2007 à 01:38:51  profilanswer
 

carabin a écrit :

donc ca revient au même que si on faisait :
_name = name;
 
C'est ca ?


si t'avais pas d'opérateur =, tu serais marron si ça avait cette signification.

n°1499766
boulgakov
Posté le 06-01-2007 à 16:03:14  profilanswer
 

carabin a écrit :

On a une classe A avec un membre static m. On déclare une classe B qui hérite de A, et donc normalement aussi de ce membre static.  
 
La question est est ce que c'est la même variable (c-a-d même emplacement mémoire) qui seras commun aux classes A et aux classes B, ou bien y a t'il un membre m commun a toutes les classes A et un autre communs a toutes les classes (B + A) ?


 
Première solution. Comme tu le dis toi-même, B hérite du membre statique. Un objet de type B est un objet de type A, entre autres.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  syntaxe C++ que je ne comprends pas

 

Sujets relatifs
[C] Des accolades "just pour le fun" ?Classes, fonctions, comment décrire leur syntaxe ?
Je comprends pas d'où vient mon erreursyntaxe xhtml est elle reellement valide ?
[Access] Liste déroulante à partir d'une fonction (syntaxe)problème de 'quote' dan sune syntaxe XML
[DOS] Syntaxe incorrecte....... pourquoi?Problème de syntaxe ???
generateur/validateur de syntaxe SQLerreur de syntaxe agacante
Plus de sujets relatifs à : syntaxe C++ que je ne comprends pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR