CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Help : Heritage en C++

Ruffi
Ruffi
Niveau 9
28 février 2004 à 19:53:35

HS_Dino " Il n´y a pas de problèmes."

:)
" Dis plutot ce que tu souhaiterais obtenir et que tu n´obtients pas."

Ce que je souhaite obtenir :

J´ai une classe CIcone auquelles sont derivé deux autres classe CIconeFeu et CIconesFleches. Elles ont les caracteristiques d´un sauf qu´un sert a faire une ligne de feu et l´autre une fleche. Elles continenent chacune leur propre methode afficher. J´ai une classe CModif qui contient differentes caracteristiques, dont un objet de type CIcone. Je voudrai donc mettre dans cet objet un CIcone, un CIconeFeu ou un CIconeFleche et que lorsque je fait la methode afficher de cette objet, il m´appele la fonction afficher de la bonne classe

Pour l´instant, il m´appelle uniquement la methode afficher du CIcone ( j´ai verifié avec le debugueur)

Le probleme vient peut-etre du fait que j´utilise une CListe de CModif que je parcour en faisant a chaque fois afficher pour son CIcone

Sinon, en remplacement du dynamic_cast, y a-t-il une autre solution ?

Ruffi
Ruffi
Niveau 9
28 février 2004 à 19:55:47

Il manque le mot CIcone :
( ...)caracteristiques d´un CIcone sauf qu´un sert(...)
:(

i_am_the_law
i_am_the_law
Niveau 6
28 février 2004 à 20:47:52

A la place de la liste qui vient des mfc pourquoi ne pas utiliser la liste de STL ?

voila un petit exemple qui devrait marcher
Si j´ai bien compris, c´est ce que tu veux faire

  1. include < iostream>
  2. include < list>

using namespace std;
class A
{
public:
virtual void aff(){cout<<"a\n";}
};

class B:public A
{
public:
virtual void aff(){cout<<"b\n";}
};

class C:public A
{
public:
virtual void aff(){cout<<"c\n";}
};

int main()
{
list<A*> l;
A* a=new A;
A* b= new B;
A* c= new C;
l.push_back(a);
l.push_back(b);
l.push_back(c);
list<A*>::iterator it;
for(it=l.begin();it!=l.end();++it)
{
(*it)->aff();
}
return 0;
};

i_am_the_law
i_am_the_law
Niveau 6
28 février 2004 à 20:50:23

maxime999 > Comment veux tu faire du polymorphisme sans pointeurs?

Ruffi
Ruffi
Niveau 9
29 février 2004 à 00:23:11

Donc, obliger de faire par pointeur? ok, c´est noté :)
J´utilisait les CListe car mes classes ont besoin d´etre serialisé, mais vu comment les CListe me font chier, je vais passer à la STL.

L´exemple est pas exactement ce que je veux : moi c´est une liste d´objet D qui contient un objet A, B ou C.
Mais le principe y est, donc merci :) :-)

Ruffi
Ruffi
Niveau 9
29 février 2004 à 11:55:47

Mais avec les pointeurs, j´ai toujours le meme probleme avec le constructeur de copie de la classe contenant un objet de type A* :

Je doit recréer le pointeur m_objet de type A*
je fait :
D(const D &){
/ /On s´occupe des autres données membres
if(original.m_objet){ / / si l´objet existe
m_objet=new A; / / Arg, il me fait forcement un A
m_objet=original.m_objet;
}
else
m_objet=NULL;
}

Probleme : il me fera donc un new A meme si c´est un objet B ou C.

kookii m´avait parlé de dynamic_cast, mais Dino a dis que c´etait pas tres bon... Quelle est la meilleure solution ?

hs_dino
hs_dino
Niveau 9
29 février 2004 à 12:06:21

:d) m_objet=new A; / / Arg, il me fait forcement un A
:d) m_objet=original.m_objet;

Oula ! Stop ! Grosse erreur !
Tu alloues un objet, puis 1 ligne après tu l´oublies dans l´espace intersidérale de la mémoire. Si tu veux copier un objet, il faut faire *m_objet = *original.m_objet;
Bien evidement, on considere que cette classe m_objet n´a pas de pointeur dans ces membres, sinon il y a duplication de pointeur et ca va se terminer en Access Violation.

Mais bon, il y a un problème général de conception dans tout ton code. Il faut absolument que tu nous donnes ton programme et de nous dire là ou ca ne fait pas ce que tu veux.

pour les CListe, ca sera pareil avec la STL. Si tu as commencé avec les MFC, fini avec les MFC, c´est du pareil au meme, surtout si tu as besoin des services des MFC comme la serialization, etc...

Ruffi
Ruffi
Niveau 9
29 février 2004 à 12:47:44

il y a un problème général de conception dans tout ton code

:snif:

Je reprend les cours demain, mais je vais essayer de mettre le projet en ligne, en commentant le mieux possible pour que vous compreniez bien ce que le projet doit faire.

Merci de votre aide :)

Ruffi
Ruffi
Niveau 9
29 février 2004 à 16:46:46

Il y a effectivement un probleme de conception.
En y reflechissant, je pense avoir trouvé une meilleure façon de faire. Dites moi ce que vous en pensez, que je ne parte pas une nouvelle fois sur une voie de garage :

avant :
class A : public Cobjet
class B : public A
class C : public A
class D : public Cobjet, contient un pointeur vers un A

maintenant :
class D : public Cobjet
class A : public D
class B : public A
class C : public A

Comme ça, au lieu de faire une liste de D qui contient un A*, j´ai une liste de D* qui peut contenir un D*,un A*(cad un D* avec des truc en +),un B* ou un C* ( cad un A*avec des truc en +).

hs_dino
hs_dino
Niveau 9
29 février 2004 à 18:04:14

:d) Dites moi ce que vous en pensez, que je ne parte pas une nouvelle fois sur une voie de garage

Tu pars sur une voie de garage.
Ceci :
class A : public Cobjet
class B : public A
class C : public A
class D : public Cobjet, contient un pointeur vers un A

C´est parfaitement correct et de cette manière que ca doit fonctionner, le polymorphisme est là pour çà. Lorsque dans ta liste de A* qui est dans D tu fais un appele à A->Affiche() ceci appele la bonne fonction selon le type si A est un pointeur sur A, B ou C.

hs_dino
hs_dino
Niveau 9
29 février 2004 à 18:05:05

:d) Je reprend les cours demain

Tu fais quoi comme étude ?

maxime999
maxime999
Niveau 8
01 mars 2004 à 00:04:55

i_am_the_law > mh, excs javais mal lu

Ruffi
Ruffi
Niveau 9
01 mars 2004 à 10:44:36

" Tu fais quoi comme étude ? "

Je suis en IUT informatique à Arles, en deusième année. Mon probleme intervient dans le projet tuteuré que je doit rendre dans un peu plus d´un mois...Apres, en stage :) http://147.94.176.19/raffin.r/recherche/stages/index_carto.html :)

" class A : public Cobjet

class B : public A
class C : public A
class D : public Cobjet, contient un pointeur vers un A
C´est parfaitement correct"

Mais j´ai toujours le probleme pour faire le constructeur de copie et l´operateur =.
A moins que je copie le pointeur, sans faire de new.

Ruffi
Ruffi
Niveau 9
01 mars 2004 à 13:46:19

" Tu pars sur une voie de garage."

Pourquoi ce n´est pas bon ? ( je suis là pour apprendre, alors je veux comprendre mes erreurs pour progresser)

Ruffi
Ruffi
Niveau 9
02 mars 2004 à 15:32:51

Help ! je rend le projet dans 29 jours !
( c´est stressant la fin d´un projet)

Ruffi
Ruffi
Niveau 9
03 mars 2004 à 10:25:38

:up:

Ruffi
Ruffi
Niveau 9
04 mars 2004 à 08:08:29

Personne pour m´aider ?

hs_dino
hs_dino
Niveau 9
04 mars 2004 à 14:29:06

On peut en discuter sur MSN Messenger, si ca peux t´aider...

:d) hsdino@hotmail.com

Ruffi
Ruffi
Niveau 9
06 mars 2004 à 19:13:26

Ok, je t´ai rajouté dans mes contacts.
Merci :)

kookii
kookii
Niveau 4
06 mars 2004 à 19:27:11

Si tu as besoin de copier ta liste, as tu vraiment besoin de duppliquer également les objets qu´elle contient?
Logiquement tu n´as pas besoin.. enfin tout depend de ce que tu veux en faire.
Au pire tu cree une focntion virtuel copy()
et dans cette fonction tu sais qui de quel type il s´agit. Par ex la fct copy de B donnerait
B* nv = new B(....)
nv->...=... ( copie des different parametres)

return nv;

apres si tu veux copier les elements de ta liste tu fais appel a copy

m_objet=orignal->copy();

Mais bon, reflechit bien si qd tu veux copier ta liste, tu as besoin de dupliquer les elements. En general, l´objet n´existe qu´une seule fois. Ton icone est cree une fois pour toute en memoire, et apres tu manipule le pointeur. Tu crees un nv pointeur qui pointe sur lui et tu auras 2 listes identiques. Est-ce bien necessaire d´avoir en memoire 2 fois le meme icone?

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment