Problème d'héritage en cpp
Résolu
surfeur29
Messages postés
75
Date d'inscription
Statut
Membre
Dernière intervention
-
Ké -
Ké -
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 !!!
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
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û
_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û
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
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