syntaxe C++ que je ne comprends pas - C++ - Programmation
Marsh Posté le 05-01-2007 à 16:49:35
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.
Marsh Posté le 05-01-2007 à 17:06:42
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.
Marsh Posté le 05-01-2007 à 17:13:45
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
Marsh Posté le 05-01-2007 à 17:29:57
carabin a écrit : donc ca revient au même que si on faisait : |
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.
Marsh Posté le 05-01-2007 à 17:38:15
carabin a écrit : donc ca revient au même que si on faisait : |
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 :
|
lorsque tu construis un objet de type B, les opérations effectuées sont :
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 :
voila, j'espère que c'est un peu clair...
[edit] grillé...
Marsh Posté le 05-01-2007 à 18:05:26
franceso a écrit : [edit] grillé... |
On en a un peu marre de te manger grillé. Au bain marie, la prochaine fois stp
Marsh Posté le 05-01-2007 à 18:11:16
++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
Marsh Posté le 06-01-2007 à 00:16:38
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 !
Marsh Posté le 06-01-2007 à 01:38:51
carabin a écrit : donc ca revient au même que si on faisait : |
si t'avais pas d'opérateur =, tu serais marron si ça avait cette signification.
Marsh Posté le 06-01-2007 à 16:03:14
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. |
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.
Marsh Posté le 05-01-2007 à 16:40:01
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
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