Problème d'heritage

Fermé
DDChri - Modifié par DDChri le 11/02/2013 à 22:31
mamiemando Messages postés 33100 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 13 mai 2024 - 15 févr. 2013 à 01:45
Bonjour,



j'ai besoin d'aide pour ce petit code en C++ sur l'héritage et surtout sur l'héritage multiple



voici mon code:



Donc dans ce code, mixte hérite de immeuble de bureau et immeuble de logement, immeuble de bureau et immeuble de logement héritent de immeuble, j'ai surement un gros problème au niveau de l'héritage multiple.



Merci pour votre aide.



#include <iostream>   
#include <ostream>   
#include <stdlib.h>   
#include <typeinfo>   
#include <vector>   
#include <string>   


using namespace std;   


 
class Immeuble{   
    
        protected:    
                  int annee_construction;   
                  string description_etat;   
                  string adresse;     
                  int i;   
    
         public:   
                  Immeuble(int annee, string descript, string add, int ii);   
                  virtual int ajout_contenu(int a)=0;   
                  int getI();   
                  ~Immeuble(void);   
};   

Immeuble::Immeuble(int annee, string descript, string add, int ii){   
         annee_construction=annee;   
         description_etat=descript;   
         adresse=add;   
         i=ii;   
}   

Immeuble::~Immeuble(void){   
    
}   

int Immeuble::ajout_contenu(int a){   

}   

int Immeuble::getI(){   
         return i;   
}   


class Industriel:public Immeuble{   
         public:   
                  int ajout_contenu(int a);   
                  Industriel(int annee, string descript, string add, int ii);   
};   

Industriel::Industriel(int annee, string descript, string add, int ii):Immeuble(annee, descript, add, ii){   
    
}   

int Industriel::ajout_contenu(int a){   
         i+=a;   
}   

////////////////////////////////////////////////////////:   
class Immeuble_de_logement:public Immeuble{   
         public:   
                  int ajout_contenu(int a);   
                  Immeuble_de_logement(int annee, string descript, string add, int ii);   
};   

Immeuble_de_logement::Immeuble_de_logement(int annee, string descript, string add, int ii) : Immeuble(annee, descript, add, ii){   
    
}   

int Immeuble_de_logement::ajout_contenu(int a){   
         i+=a;   
}   


class Immeuble_de_bureau:public Immeuble{   
         public:   
                  int ajout_contenu(int a);   
                  Immeuble_de_bureau(int annee, string descript, string add, int ii);   
};   

Immeuble_de_bureau::Immeuble_de_bureau(int annee, string descript, string add, int ii) : Immeuble(annee, descript, add, ii){   

}   


int Immeuble_de_bureau::ajout_contenu(int a){   
 i+=a;   
}   

  
class Mixte:public Immeuble_de_logement, public Immeuble_de_bureau{   
                 public:   
                  int ajout_contenu1(int a);   
                  Mixte(int annee, string descript, string add, int ii);   
};   

Mixte::Mixte(int annee, string descript, string add, int ii):Immeuble_de_logement(annee, descript, add, ii),Immeuble_de_bureau(annee, descript, add, ii){   

}   

int Mixte::ajout_contenu1(int a){   
         Immeuble_de_logement::ajout_contenu(a);   
}   


int main (){   

         cout << "\nTest:\nCreation Mixte\n";    
    
         string *des=new string;   
         string *ad=new string;   
         int ann;   
    
         cout << "\nAnnee: ";   
         cin >> ann;   
         cout << "\nDescription: ";   
         cin >> *des;   
         cout << "\nAdresse: ";   
         cin >> *ad;   
            
         Mixte *m = new Mixte(ann,*des,*ad,0);   
    
         cout << "\nVerification:\n\tI: " << m->getI();   
    
         return 0;   
    
}

1 réponse

mamiemando Messages postés 33100 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 13 mai 2024 7 753
15 févr. 2013 à 01:45
Le programme compile à condition de modifier la déclaration/implémentation de getI :

class Immeuble{

    protected:
        int annee_construction;
        string description_etat;
        string adresse;
        int i;

    public:
        Immeuble(int annee, string descript, string add, int ii);
        virtual int ajout_contenu(int a)=0;
        inline int getI() { return i; }
        ~Immeuble(void);
};


Quelques recommandations :
- déplace la déclaration et l'implémentation de tes classes dans des fichiers hpp et cpp dédiés (par exemple Immeuble.hpp et Immeuble.cpp), à raison d'un fichier par classe
- adopte des conventions de nommage cohérente : les classes en c++ se notent généralement ma_classe ou MaClasse. Personnellement je note toutes mes classes sur le format ma_classe_t.
- inclue <cstdlib> au lieu de <stdlib.h>
- pourquoi est ce que tu inclues <ostream> et <typeinfo> ?
- aère ton code (par exemple en mettant des espaces autour des "=", "+=", en rajoutant des espaces derrière les virgules etc...

Bonne chance
0