L’héritage multiple en programmation C++

Exercice 1 :
a) Créer une classe volante qui a comme donnée membre nombre_ailes et qui a
un constructeur, un destructeur et une fonction affiche
b) Créer une classe animal qui a comme données membres nombre_pattes et type_pelage et qui a un constructeur, un destructeur et une fonction affiche.
c) Créer une classe oiseau qui dérive publiquement des classes volante et animal.
Elle a comme donnée membre nombre_oeufs et qui a un constructeur, un destructeur et une fonction affiche qui affiche la donnée membre et qui fait appel aux fonctions affiche des classes de base.
d) Créer un programme qui crée un objet de type oiseau et teste ses fonctions.
Solution:
#include <iostream.h>
#include <string.h>
#define MAX 20
class volante{
int nombre_ailes;
public:
volante(int na=2);
~volante();
void affiche();
};
class animal{
int nombre_pattes;
char type_pelage[MAX];
public:
animal(int np=4,char *tp="");
~animal();
void affiche();
};
class oiseau:public volante,public animal{
int nombre_oeufs;
public:
oiseau(int no=1,int na=2,int np=4,char *tp="");
~oiseau();
void affiche();
};
volante::volante(int na){
nombre_ailes=na;
cout<<"constructeur volante"<<endl;
}
volante::~volante(){
cout<<"destructeur volante"<<endl;
}
void volante::affiche(){
cout<<"nombre d'ailes:"<<nombre_ailes<<endl;
}
animal::animal(int np,char *tp){
nombre_pattes=np;
strcpy(type_pelage,tp);
cout<<"constructeur animal"<<endl;
}
animal::~animal(){
cout<<"destructeur animal"<<endl;
}
void animal::affiche(){
cout<<"nombre de pattes:"<<nombre_pattes<<endl;
cout<<"type de pelage: "<<type_pelage<<endl;
}
oiseau::oiseau(int no,int na,int np,char *tp):volante(na),animal(np,tp){
nombre_oeufs=no;
cout<<"constructeur oiseau"<<endl;
}
oiseau::~oiseau(){
cout<<"destructeur oiseau"<<endl;
}
void oiseau::affiche(){
volante::affiche();
animal::affiche();
cout<<"nombre d'oeufs: "<<nombre_oeufs<<endl;
}
void main()
{
int k;
oiseau o;
o.affiche();
cin>>k;
}

Exercice 2 :
a) Créer une classe moniteur comprenant :
- les données membres : type (chaîne de caractères), couleurs (long), x_reso(int) et y-reso(int)
- un constructeur initialisant les données membres
- une fonction montrer_moniteur qui affiche les informations sur le Moniteur
b) Créer une classe carte_mere comprenant :
- les données membres : processeur(int), vitesse(int) et ram(int).
- un constructeur initialisant les données membres.
- une fonction montrer_carte qui affiche les informations sur la carte.
c) Créer une classe ordinateur dérivant publiquement des classes moniteur et
carte_mere et qui contient :
- les données membres :nom(chaînes de caractères), hd(int),lecteur(float)
- un constructeur initialisant les données membres
- une fonction montrer_ordinateur qui affiche les informations sur
l’ordinateur et appelle les fonctions montrer_moniteur et montrer_carte.
d) Créer un programme qui crée un objet ordinateur et qui affiche les informations sur cet   
        objet
e) Remplacer les fonctions montrer_moniteur, montrer-carte et montrer_ordinateur par 3 fonctions appelées montrer.Faire les modifications nécessaires au bon fonctionnement du programme.
Solution:
//2.a,b,c,d
#include <iostream.h>
#include <string.h>
class moniteur{
char type[5];
long int couleur;
int x_reso;
int y_reso;
public:
moniteur(char tp[5]="", long int coul=0, int x=0, int y=0);
void montrer_moniteur();
};
class carte_mere{
int processeur;
int vitesse;
int ram;
public:
carte_mere(int pro=0, int vi=0, int rm=0);
void montrer_carte();
};
class ordinateur:public moniteur, carte_mere{
char nom[10];
int hardisk;
float lecteur;
public:
ordinateur(char nm[10], int hd, float lct,char tp[5],long int coul, int x, int y,int
pro, int vi, int rm);
//attention ne pas oublier
void montrer_ordinateur();
};
moniteur::moniteur(char tp[5], int long coul, int x, int y){
strcpy(type,tp);
couleur=coul;
x_reso=x;
y_reso=y;
}
void moniteur::montrer_moniteur(){
cout<<"type de moniteur: "<<type<<endl;
cout<<"couleur: "<<couleur<<endl;
cout<<"x_reso: "<<x_reso<<endl;
cout<<"y_reso: "<<y_reso<<endl;
}
carte_mere::carte_mere(int pro, int vi, int rm){
processeur=pro;
vitesse=vi;
ram=rm;
}
void carte_mere::montrer_carte(){
cout<<"processeur: "<<processeur<<endl;
cout<<"vitesse: "<<vitesse<<endl;
cout<<"ram: "<<ram<<endl;
}
ordinateur::ordinateur(char nm[10], int hd, float lct,char tp[5],long int coul, int x, int
y,int pro, int vi, int rm): moniteur(tp,coul,x,y),carte_mere(pro,vi,rm){
//je mets public a chak fois... erreur de syntaxe
strcpy(nom,nm);
hardisk=hd;
lecteur=lct;
}
void ordinateur::montrer_ordinateur(){
moniteur::montrer_moniteur();
carte_mere::montrer_carte();
cout<<"nom du PC: "<<nom<<endl;
cout<<"hd: "<<hardisk<<endl;
cout<<"lecteur: "<<lecteur<<endl;
}
void main()
{
int k;
moniteur a("moniteur",256,800,600);
a.montrer_moniteur();
cout<<endl;
carte_mere b(64,3,1024);
b.montrer_carte();
cout<<endl;
ordinateur c("junior",160,5.4,"moniteur",256,800,600,64,3,1024);
c.montrer_ordinateur();
cin>>k;
}
//2.e
#include <iostream.h>
#include <string.h>
class moniteur{
char type[5];
long int couleur;
int x_reso;
int y_reso;
public:
moniteur(char tp[5]="", long int coul=0, int x=0, int y=0);
void montrer();
};
class carte_mere{
int processeur;
int vitesse;
int ram;
public:
carte_mere(int pro=0, int vi=0, int rm=0);
void montrer();
};
class ordinateur:public moniteur, carte_mere{
char nom[10];
int hardisk;
float lecteur;
public:
ordinateur(char nm[10], int hd, float lct,char tp[5],long int coul, int x, int y,int
pro, int vi, int rm);
//attention ne pas oublier
void montrer();
};
moniteur::moniteur(char tp[5], int long coul, int x, int y){
strcpy(type,tp);
couleur=coul;
x_reso=x;
y_reso=y;
}
void moniteur::montrer(){
cout<<"type de moniteur: "<<type<<endl;
cout<<"couleur: "<<couleur<<endl;
cout<<"x_reso: "<<x_reso<<endl;
cout<<"y_reso: "<<y_reso<<endl;
}
carte_mere::carte_mere(int pro, int vi, int rm){
processeur=pro;
vitesse=vi;
ram=rm;
}
void carte_mere::montrer(){
cout<<"processeur: "<<processeur<<endl;
cout<<"vitesse: "<<vitesse<<endl;
cout<<"ram: "<<ram<<endl;
}
ordinateur::ordinateur(char nm[10], int hd, float lct,char tp[5],long int coul, int x, int
y,int pro, int vi, int rm): moniteur(tp,coul,x,y),carte_mere(pro,vi,rm){
//je mets public a chak fois... erreur de syntaxe
strcpy(nom,nm);
hardisk=hd;
lecteur=lct;
}
void ordinateur::montrer(){
moniteur::montrer();
carte_mere::montrer();
cout<<"nom du PC: "<<nom<<endl;
cout<<"hd: "<<hardisk<<endl;
cout<<"lecteur: "<<lecteur<<endl;
}
void main()
{
moniteur a("moniteur",256,800,600);
a.montrer();
cout<<endl;
carte_mere b(64,3,1024);
b.montrer();
cout<<endl;
ordinateur c("junior",160,5.4,"moniteur",256,800,600,64,3,1024);
c.montrer();
}

Exercice 3 :
Créer une classe poste_de_travail dérivant publiquement de la classe ordinateur
    (voir exercice 2)  Elle contient :
- la donnée membre syst_exploi (chaîne de caractères)
- un constructeur initialisant la donnée membre
- une fonction montrer qui affiche les informations sur le poste de travail en faisant appel à la
     fonction montrer de la classe ordinateur.
Solution:
#include <iostream.h>
#include <string.h>
class moniteur{
char type[5];
long int couleur;
int x_reso;
int y_reso;
public:
moniteur(char tp[5]="", long int coul=0, int x=0, int y=0);
void montrer();
};
class carte_mere{
int processeur;
int vitesse;
int ram;
public:
carte_mere(int pro=0, int vi=0, int rm=0);
void montrer();
};
class ordinateur:public moniteur, carte_mere{
char nom[10];
int hardisk;
float lecteur;
public:
ordinateur(char nm[10], int hd, float lct,char tp[5],long int coul, int x, int y,int
pro, int vi, int rm);
//attention ne pas oublier
void montrer();
};
class poste_travail:public ordinateur{
char syst_exploi[10];
public:
poste_travail(char s_e[10],char nm[10], int hd, float lct,char tp[5],long int coul, int x,
int y,int pro, int vi, int rm);
void montrer();
};
poste_travail::poste_travail(char s_e[10],char nm[10], int hd, float lct,char tp[5],long
int coul, int x, int y,int pro, int vi, int rm):ordinateur(nm,hd,lct,tp,coul,x,y,pro,vi,rm){
strcpy(syst_exploi,s_e);
}
void poste_travail::montrer(){
ordinateur::montrer();
cout<<"Systeme d'exploitation : "<<syst_exploi<<endl;
}
moniteur::moniteur(char tp[5], int long coul, int x, int y){
strcpy(type,tp);
couleur=coul;
x_reso=x;
y_reso=y;
}
void moniteur::montrer(){
cout<<"type de moniteur: "<<type<<endl;
cout<<"couleur: "<<couleur<<endl;
cout<<"x_reso: "<<x_reso<<endl;
cout<<"y_reso: "<<y_reso<<endl;
}
carte_mere::carte_mere(int pro, int vi, int rm){
processeur=pro;
vitesse=vi;
ram=rm;
}
void carte_mere::montrer(){
cout<<"processeur: "<<processeur<<endl;
cout<<"vitesse: "<<vitesse<<endl;
cout<<"ram: "<<ram<<endl;
}
ordinateur::ordinateur(char nm[10], int hd, float lct,char tp[5],long int coul, int x, int
y,int pro, int vi, int rm): moniteur(tp,coul,x,y),carte_mere(pro,vi,rm){
//je mets public a chak fois... erreur de syntaxe
strcpy(nom,nm);
hardisk=hd;
lecteur=lct;
}
void ordinateur::montrer(){
moniteur::montrer();
carte_mere::montrer();
cout<<"nom du PC: "<<nom<<endl;
cout<<"hd: "<<hardisk<<endl;
cout<<"lecteur: "<<lecteur<<endl;
}
void main()
{
moniteur a("moniteur",256,800,600);
a.montrer();
cout<<endl;
carte_mere b(64,3,1024);
b.montrer();
cout<<endl;
ordinateur c("junior",160,5.4,"moniteur",256,800,600,64,3,1024);
c.montrer();
cout<<endl;
poste_travail d("XP","junior",160,5.4,"moniteur",256,800,600,64,3,1024);
d.montrer();
}

Exercice 4 :
a) Créer une classe objetassure comprenant :
- les données membres : montant(float), type (chaîne de caractères)
- un constructeur initialisant les données membres
- une fonction affiche qui affiche les informations sur l’objetassure
b) Créer une classe ordinateur dérivant publiquement de la classe objetassure et comprenant :
- les données membres : ram (int), hd(int), …
- un constructeur initialisant les données membres
- une fonction affiche qui affiche les informations sur l’ordinateur et qui appelle la fonction
     affiche de la classe objetassure
c) Créer une classe bagage dérivant publiquement de la classe objetassuré et comprenant :
- les données membres : type (chaîne de caractères), poids (float)
- un constructeur initialisant les données membres
- une fonction affiche affichant les informations sur le bagage et
appelant la fonction affiche de la classe objetassure.
d) Créer une classe ordinateurportable dérivant publiquement des classes ordinateur et bagage
      et comprenant :
- les données membres poids (float) et epaisseur (float)
- un constructeur initialisant les données membres
- une fonction affiche qui affiche les informations sur l’ordinateur portable et qui appelle les fonctions affiche des classes bagage et ordinateur
e) Créer un programme qui crée un objet ordinateurportable et qui affiche les informations sur  
       cet objet
Remarque : l’ordinateur portable doit bénéficier des 2 assurances, l’une contre le
vol (en tant qu’ordinateur) et l’autre contre la perte (en tant que bagage).
Solution:
#include <iostream.h>
#include <string.h>
#define MAX 20
class objetassure{
float montant;
char type[MAX];
public:
objetassure(float mt=0.0,char tp[MAX]="");
void affiche();
};
class ordinateur:public virtual objetassure{
int ram;
int hardisk;
public:
ordinateur(int rm=0,int hd=0,float mt=0.0,char tp[MAX]="");
void affiche();
};
class bagage:virtual public objetassure{
char type1[MAX];
float poids;
public:
bagage(char tp1[MAX]="",float pd=0,float mt=0.0,char tp[MAX]="");
void affiche();
};
class ordinateurportable:public ordinateur,public bagage{
float poids1;
float epaisseur;
public:
ordinateurportable(float pd1=0.0,float epaiss=0.0,int rm=0,int hd=0,char
tp1[MAX]="",float pd=0.0);
//pas obligation de mettre les autres paramètres de objetassure
//ici je ne le fais pas mais pour afficher il vaudrait mieux ;-)
void affiche();
};
objetassure::objetassure(float mt,char tp[MAX]){
montant=mt;
strcpy(type,tp);
}
void objetassure::affiche(){
cout<<"montant: "<<montant<<endl;
cout<<"objet assure type: "<<type<<endl;
}
ordinateur::ordinateur(int rm,int hd,float mt,char tp[MAX]):objetassure(mt,tp){
ram=rm;
hardisk=hd;
}
void ordinateur::affiche(){
objetassure::affiche();
cout<<"Mémoire type ram : "<<ram<<endl;
cout<<"Disque Dur: "<<hardisk<<endl;
}
bagage::bagage(char tp1[MAX],float pd,float mt,char tp[MAX]):objetassure(mt,tp){
strcpy(type1,tp1);
poids=pd;
}
void bagage::affiche(){
objetassure::affiche();
cout<<"Type de bagage: "<<type1<<endl;
cout<<"Poids du bagage: "<<poids<<endl;
}
ordinateurportable::ordinateurportable(float pd1,float epaiss,int rm,int hd,char
tp1[MAX],float pd):ordinateur(rm,hd),bagage(tp1,pd){
poids1=pd1;
epaisseur=epaiss;
}
void ordinateurportable::affiche(){
ordinateur::affiche();
bagage::affiche();
cout<<"ordinateur portable poids: "<<poids1<<endl;
cout<<"epaisseur: "<<epaisseur<<endl;
}
void main(){
int k;
ordinateurportable orpor(10,10,256,160,"a main",50);//attention a l affichage
orpor.affiche();
cin>>k;
}
Suivant
« Précédent
Précédent
Suivant »

ConversionConversion EmoticonEmoticon

Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.