Problème d'héritage en cpp

Résolu/Fermé
surfeur29 Messages postés 75 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 18 novembre 2010 - 20 mai 2008 à 00:16
 Ké - 24 avril 2009 à 12:43
Bonjour, j'ai un tableau à deux dimensions _parcelles[i][j] que j'instancie dans un constructeur de la classe Terrain. J'ai créer deux classes filles de Parcelle qui sont Terre et Eau. Je voudrais, dans mon constructeur de la classe Terrain, dire qu'une _parcelle est soit de type Terre , soit de type Eau, mais je ne sait pas comment écrire cela. J'ai un pointeur sur Terre et un pointeur sur Eau mais je peux malheureusement pas ecrire que mon pointeur de pointeur _parcelles[i][j] = mon pointeur de _terre !!!

voici une partie du code de mon constructeur de Terrain :

Terrain::Terrain(int nbParcelleX, int nbParcelleY)
{

....

// instanciation du tableau de parcelles

_parcelles = new Parcelle*[_nbParcelleX];

for(int i=0;i<_nbParcelleX;i++)
{
_parcelles[i] = new Parcelle[_nbParcelleY];
}


Terre* _solide = new Terre();
Eau* _liquide = new Eau();



// initialisation du tableau de parcelles

for(int i=0;i<_nbParcelleX;i++){

for(int j=0;j<_nbParcelleY;j++){



_parcelles[i][j].SetTemp(15.0);
_parcelles[i][j].SetDiff(0.99);
_parcelles[i][j].SetX(i);
_parcelles[i][j].SetY(j);
_parcelles[i][j].SetPerte(0.01);
_parcelles[i][j].SetTerrain(this);

}
}


merci de vos propositions, je suis vraiment bloqué et c'est un projet à rendre très rapidement !

merci de votre aide !!!

3 réponses

Non désolé je peux pas t'aider, je suis nul en C++.
2
surfeur29 Messages postés 75 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 18 novembre 2010 5
27 mai 2008 à 15:30
up ! jsuis toujours bloqué !! es que quelqu'un peut m'aider ?? please ...
1
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
20 mai 2008 à 10:25
bonjour,

_parcelles n'est qu'un tableau de pointeur sur des Parcelle, donc tu ne trouvera jamais ed Terre ou Eau dans ce tableau car dès la création tu n'en mets aucun dedans:

si Eau et Terre dérive de Parcelle alors tu peux faire (comme tu l'as fait):

_parcelles = new Parcelle*[_nbParcelleX];

et alors à ce moment tu peux faire _parcelles[i] = new Eau() ou new Terre(), tu utilise à ce moment ce qu'on appelle le polymorphisme.

ensuite soit tu instancie dans tes classe un magic_number qui te permets de savoir quel est le type de l'objet utilisé soit tu fait un dynamic_cast, du genre if (dynamic_cast<Eau>_parcelles[i]){ ... ton_code...} et idem pour Terre.

voila j'espere t'avoir aidé et n'avoir pas dit trop de connerie

tchû
0
surfeur29 Messages postés 75 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 18 novembre 2010 5
20 mai 2008 à 14:33
merci de ton aide mais je ne comprends pas comment faire parce que mon tableau est en deux dimensions, je ne peux donc pas utiliser _parcelles[i] mais je suis obligé d'utiliser _parcelles[i][j] ... ou alors je me trompe... mais du coup lorsque je test ce que tu propose j'ai une erreur de segmentation ...

i a t-il une solution pour utiliser _parcelles[i][j] avec ton idée : _parcelles[i] = new Eau() ou new Terre() ?????

merci de ton aide
0