Salut,
Si le code est généralement lu de gauche à droite, il est, le plus souvent à interpréter... de droite à gauche
Ainsi, la première chose qui sera effectivement faite dans une expression complexe, c'est celle qui se trouve à l'extrème droite de l'expression (du moins, quand il ne s'agit pas d'un test, on est bien d'accord
)
En effet, le comportement indiqué par Davidbrcz est bel et bien le comportement observé, et voici la raison:
- CTabVehicules() : appelle le constructeur par défaut de la classe de CTabVehicules (car il faut bien un objet pour arriver à le caster )
- (const CGenerique&) caste (ce qui suit) en une référence constante sur un objet de type CGenerique
- la parenthèse ouverte avant le (const CGenerique&) et fermée apres le CTabVehicules() regroupes les informations à passer au constructeur de CTableauGenerique
- L'objet construit pend le doux nom de TabVehicules, et, enfin, en début de ligne, on retrouve le type de l'objet à construire
Ceci dit, ce code est de nature à souvlever énormément de questions, et à e faire hurler plus d'un "puriste"...
D'abord à cause du fait que c'est un cast "C style" qui est utilisé:
Ce genre de transtypage permet tout, y compris le pire.
On ne peut en effet jamais être sur que l'objet à transtyper est compatible, du point de vue de l'utilisation de la mémoire, avec l'objet dans lequel il doit être transtypé...
On préférera le plus souvent utiliser une méthode plus "controlée" du C++ telle que le static_cast ou le dynamic_cast
Ensuite, parce que l'on peut se poser la question de l'utilité même du transtypage.
En effet, le code semble indiquer que la classe CTabVehicules est compatible (et sans doute dérive) de la classe CGenerique.
Si ce n'est pas le cas, tu comprendra les risques encourus par le transtypage "C style" (et on pourrait se poser la question de savoir pourquoi ce n'est pas le cas), et, par contre, si c'est le cas, il faut savoir que l'objet créé est d'office un objet constant, et peut très bien faire office de référence constante sur un objet de la classe parent... ce qui rend le transtypage parfaitement inutile
En effet, les objet temporaires (tels que ceux créé spécifiquement pour servir d'argument passé à une fonction) ne peuvent s'intégrer que dans des fonctions pour lesquels l'argument est demandé sous forme de référence constante, ce qui *semble* etre le but du transtypage
Partager