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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Conversions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Conversions

n°890673
xterminhat​e
Si vis pacem, para bellum.
Posté le 04-11-2004 à 21:40:07  profilanswer
 

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...
mood
Publicité
Posté le 04-11-2004 à 21:40:07  profilanswer
 

n°890676
Taz
bisounours-codeur
Posté le 04-11-2004 à 21:44:23  profilanswer
 

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

n°890677
xterminhat​e
Si vis pacem, para bellum.
Posté le 04-11-2004 à 21:45:36  profilanswer
 

Code :
  1. struct D : B;

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


---------------
Cordialement, Xterm-in'Hate...
n°890683
xterminhat​e
Si vis pacem, para bellum.
Posté le 04-11-2004 à 21:48:35  profilanswer
 

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...
n°890690
Taz
bisounours-codeur
Posté le 04-11-2004 à 21:55:26  profilanswer
 

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.

n°890691
xterminhat​e
Si vis pacem, para bellum.
Posté le 04-11-2004 à 21:56:18  profilanswer
 

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...
n°890693
Taz
bisounours-codeur
Posté le 04-11-2004 à 21:57:18  profilanswer
 

c'est bien ce que je dis : t'as pas d'héritage dans ton histoire :o

n°890696
xterminhat​e
Si vis pacem, para bellum.
Posté le 04-11-2004 à 22:00:25  profilanswer
 

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...
n°890712
xterminhat​e
Si vis pacem, para bellum.
Posté le 04-11-2004 à 22:09:48  profilanswer
 

Je vais modifier un peu mes classes de sorte que la conversion B vers Dx soit tjs possible.
 
Merci.


---------------
Cordialement, Xterm-in'Hate...
n°890876
Taz
bisounours-codeur
Posté le 05-11-2004 à 00:16:24  profilanswer
 

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.

mood
Publicité
Posté le 05-11-2004 à 00:16:24  profilanswer
 

n°890955
xterminhat​e
Si vis pacem, para bellum.
Posté le 05-11-2004 à 05:07:27  profilanswer
 

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...
n°891049
Taz
bisounours-codeur
Posté le 05-11-2004 à 10:29:56  profilanswer
 

ouais ben c'est là que tu te trompes. Demande toi si B est un D ou vice versa

n°891548
xterminhat​e
Si vis pacem, para bellum.
Posté le 05-11-2004 à 21:48:59  profilanswer
 

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...
n°892130
Taz
bisounours-codeur
Posté le 06-11-2004 à 21:20:11  profilanswer
 

moi je crois que y a pas besoin de conversion tout court. Je comprends rien à ce que tu fais...


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

  [C++] Conversions

 

Sujets relatifs
Stringstreams & conversions strings -> types numériques 
Plus de sujets relatifs à : [C++] Conversions


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)