[C++] Conversions

Conversions [C++] - C++ - Programmation

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  :heink: .
 
 
Merci d'avance.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 04-11-2004 à 21:40:07   

Reply

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 :
  1. Chaque classe Dx offre un constructeur du genre Dx( const B& ) ). Cette conversion n'est pas possible dans tous les cas.

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

Reply

Marsh Posté le 04-11-2004 à 21:45:36    

Code :
  1. struct D : B;

La conversion B vers D n'existe pas par défaut, n'est ce pas ?


---------------
Cordialement, Xterm-in'Hate...
Reply

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).


---------------
Cordialement, Xterm-in'Hate...
Reply

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.

Reply

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.


---------------
Cordialement, Xterm-in'Hate...
Reply

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 :o

Reply

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....


Message édité par xterminhate le 04-11-2004 à 22:01:38

---------------
Cordialement, Xterm-in'Hate...
Reply

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.


---------------
Cordialement, Xterm-in'Hate...
Reply

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.

Reply

Marsh Posté le 05-11-2004 à 00:16:24   

Reply

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.
 


---------------
Cordialement, Xterm-in'Hate...
Reply

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

Reply

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.
 


---------------
Cordialement, Xterm-in'Hate...
Reply

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...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed