Conversions [C++] - C++ - Programmation
Marsh Posté le 04-11-2004 à 21:44:23
mais non, fais une sélection à coup de dynamic_cast et y a besoin de rien d'autre.
Code :
|
y a contradiction. un Dx est un B. Quoi qu'il arrive, ça passe. Sauf si tu décides que non. À ce moment là, c'est plus de l'héritage de structure mais de l'héritage de comportement. passe B en private et fait une ABC
Marsh Posté le 04-11-2004 à 21:45:36
Code :
|
La conversion B vers D n'existe pas par défaut, n'est ce pas ?
Marsh Posté le 04-11-2004 à 21:48:35
B contient une information brute, qui selon son contenu peut etre mis en forme selon 3 présentations possibles (D1,D2,D3).
Marsh Posté le 04-11-2004 à 21:55:26
pas en tant que tel.
mais static_cast<B&>(d) = b est valide et bien défini.
tu ferais bien de réfléchir si l'héritage est approprié dans ton cas. demande toi si D1, D2, et D3 sont des B. Moi à ce que tu racontes, j'ai l'impression que non.
Marsh Posté le 04-11-2004 à 21:56:18
Dynamix cast ne fonctionne-t-il pas uniquement avec des objets pointés par un pointeur de type de base ? Dans mon cas mes éléments B sont crées avec le type B à l'origine.
Marsh Posté le 04-11-2004 à 21:57:18
c'est bien ce que je dis : t'as pas d'héritage dans ton histoire
Marsh Posté le 04-11-2004 à 22:00:25
Dans mon cas, la conversion brutale B vers Dx n'a pas de sens. Au moment de la conversion, je réalise justement les traitements que je voulais masquer vu de l'tilisateur.
Pareil, j'ai l'impression que ma conception objet est foireuse. La seule autre alternative que je vois est de ne pas faire d'héritage du tout et je reviens à ma précédente conception que je ne toruvais pas terrible. Je perd la possibilité de masquer à l'utilisateur un certain nombre de traitements qui pouvaient être masqués dans les opérateurs de conversion implciites....
Marsh Posté le 04-11-2004 à 22:09:48
Je vais modifier un peu mes classes de sorte que la conversion B vers Dx soit tjs possible.
Merci.
Marsh Posté le 05-11-2004 à 00:16:24
Citation : Dans mon cas, la conversion brutale B vers Dx n'a pas de sens. |
donc pas d'héritage.
je vois pas pourquoi tu veux convertir quoi que ce soit. De toutes évidences, il te faut une classe D abstraite pure, avec une fonction membre traitant un B. Dx sont des classes concrètes, différents algorithmes s'appliquant à B. Il n'y rien à convertir.
Marsh Posté le 05-11-2004 à 05:07:27
J'ai modifié ma conception pour rendre posible cette conversion.
Conceptuellement, les classes B et D et leurs dérivées sont tres proches. L'héritage devrait donc s'appliquer.
Marsh Posté le 05-11-2004 à 10:29:56
ouais ben c'est là que tu te trompes. Demande toi si B est un D ou vice versa
Marsh Posté le 05-11-2004 à 21:48:59
J'ai modifé ma conception objet de sorte à diviser mon problème :
* B classe de base,
* D classe dérivée de B
La conversion B <=> D est toujours possisble et sensée.
Par ailleurs,
* E une classe abstraite indépendante de D,
* E1, E2, E3 mes classes spécialisées dérivées de E présentant la propriété D <=> Ex au cas par cas.
Marsh Posté le 06-11-2004 à 21:20:11
moi je crois que y a pas besoin de conversion tout court. Je comprends rien à ce que tu fais...
Marsh Posté le 04-11-2004 à 21:40:07
Soit B une classe de base et D1, D2 et D3, des classes dérivées de B.
Selon le contenu d'une instance de B, la conversion de cette instance vers un type Dx est possible. Chaque classe Dx offre un constructeur du genre Dx( const B& ) ). Cette conversion n'est pas possible dans tous les cas.
A partir d'une liste d'éléments de type B, je souhaite générer 3 listes contenant respectivement les éléments B convertibles en D1, les élements B convertibles en D2 et enfin les éléments B convertibles en D3.
Quelles contraintes dois je prendre en compte pour l'écriture des constructreurs de Dx ? Dois je modifier ma conception objet parce qu'elle est foireuse ? ...etc.
Je pensais par exemple à générer une exception spécifique lorsque la conversion B vers Dx échoue. Ainsi, si B vers D1 echoue, je tente B vers D2, puis B vers D3. Ca me parait complètement nul comme approche .
Merci d'avance.
---------------
Cordialement, Xterm-in'Hate...