Écrire un programme C++ pour créer une classe appelée « Animal » avec des attributs tels que le nom, la race et l’âge. Créez des sous-classes « Chien » et « Oiseau » qui ajoutent des attributs spécifiques tels que le jouet préféré pour les chiens et la taille de l’aile pour les oiseaux. Implémentez des méthodes pour afficher les détails de l’animal et calculer son âge en années humaines.
Solution:
#include <iostream>
#include <string>
using namespace std;
// Définir la classe Animal
class Animal {
protected:
// Attributs de la classe Animal
string nom;
string race;
int age;
public:
// Constructeur pour la classe Animal
Animal(string nom, string race, int age) {
this->nom = nom;
this->race = race;
this->age = age;
}
// Méthode d'affichage des détails de l'animal
virtual void afficher() {
cout << "Nom: " << nom << endl;
cout << "Race: " << race << endl;
cout << "Age: " << age << " années" << endl;
}
// Méthode de calcul de l'âge de l'animal en années humaines
virtual int calculerAge() {
if (race == "Chien") {
return age * 7;
} else {
// En supposant que l'âge de l'oiseau en années humaines
// est le même que l'âge réel
return age;
}
}
};
// Définir la classe Chien qui hérite de Animal
class Chien : public Animal {
private:
// Attribut supplémentaire pour la classe Chien
string jouet;
public:
// Constructeur pour la classe Chien
Chien(string nom, int age, string jouet) : Animal(nom, "Chien", age) {
this->jouet = jouet;
}
// Surcharger la méthode afficher pour inclure le jouet préféré
void afficher() override {
// Appeler la méthode de la classe mère
Animal::afficher();
cout << "Le jouet préféré: " << jouet << endl;
}
};
// Définir la classe Oiseau qui hérite de Animal
class Oiseau : public Animal {
private:
// Attribut supplémentaire pour la classe Oiseau
double tailleAile;
public:
// Constructeur pour la classe Oiseau
Oiseau(string nom, int age, double tailleAile) : Animal(nom, "Oiseau", age) {
this->tailleAile = tailleAile;
}
// Surcharger la méthode afficher pour inclure la taille de
// l'aile
void afficher() override {
// Appeler la méthode de la classe mère
Animal::afficher();
cout << "La taille de l'aile: " << tailleAile << " mètres" << endl;
}
};
// Définir la fonction Main
int main() {
// Créer une instance de Chien
Chien c("Beagle", 4, "Cordes");
// Créer une instance de Oiseau
Oiseau o("Calopsitte", 3, 1.5);
// Afficher les informations sur le chien
cout << "Informations sur le chien:" << endl;
c.afficher();
cout << "Âge du chien en années humaines: " << c.calculerAge() << endl;
// Afficher les informations sur l'oiseau
cout << "\nInformations sur l'oiseau:" << endl;
o.afficher();
cout << "Âge de l'oiseau en années humaines: " << o.calculerAge() << endl;
return 0;
}
Sortie:
Informations sur le chien:
Nom: Beagle
Race: Chien
Age: 4 années
Le jouet préféré: Cordes
Âge du chien en années humaines: 28
Informations sur l'oiseau:
Nom: Calopsitte
Race: Oiseau
Age: 3 années
La taille de l'aile: 1.5 mètres
Âge de l'oiseau en années humaines: 3
Écrire un programme C++ pour créer une classe appelée « AbonnementGym » avec des attributs pour le nom du membre, le type d'adhésion et la durée. Créer une sous-classe « AbonnementPremium » qui ajoute des attributs pour la disponibilité d'un entraîneur personnel et l'accès au spa. Implémentez des méthodes pour calculer les frais d'adhésion et vérifier s'il existe des offres spéciales basées sur le type d'adhésion.
Solution:
#include <iostream>
#include <string>
using namespace std;
// Définir la classe AbonnementGym
class AbonnementGym {
protected:
// Attributs pour AbonnementGym
string nom;
string type;
int duree; // en mois
public:
// Constructeur pour AbonnementGym
AbonnementGym(string nom, string type, int duree) {
this->nom = nom;
this->type = type;
this->duree = duree;
}
// Méthode de calcul des frais d'adhésion
virtual double calculerFrais() {
double base = 50.0; // Frais de base par mois
return base * duree;
}
// Méthode pour vérifier les offres spéciales
virtual string checkOffresSpeciales() {
if (type == "annuelle" || type == "Annuelle") {
return "10% réduction sur l'adhésion annuelle.";
} else {
return "Aucune offre spéciale n'est disponible.";
}
}
// Méthode pour afficher les détails sur l'abonnement
virtual void afficher() {
cout << "Nom du membre: " << nom << endl;
cout << "Type d'abonnement: " << type << endl;
cout << "Durée: " << duree << " mois" << endl;
cout << "Frais d'abonnement: " << calculerFrais() << " €" << endl;
cout << "Offre spéciale: " << checkOffresSpeciales() << endl;
}
};
// Définir la classe AbonnementPremium qui hérite de AbonnementGym
class AbonnementPremium : public AbonnementGym {
private:
// Attributs supplémentaires pour AbonnementPremium
bool entraineurPersonnel;
bool AccesSpa;
public:
// Constructeur pour AbonnementPremium
AbonnementPremium(string nom, string type, int duree, bool entraineurPersonnel, bool AccesSpa)
: AbonnementGym(nom, type, duree) {
this->entraineurPersonnel = entraineurPersonnel;
this->AccesSpa = AccesSpa;
}
// Surcharger la méthode calculerFrais pour inclure des coûts
// supplémentaires
double calculerFrais() override {
double base = AbonnementGym::calculerFrais();
double fraisSupplementaires = 0.0;
if (entraineurPersonnel) {
// Frais supplémentaires par mois pour un entraîneur
// personnel
fraisSupplementaires += 30.0 * duree;
}
if (AccesSpa) {
// Frais supplémentaires par mois pour l'accès au spa
fraisSupplementaires += 20.0 * duree;
}
return base + fraisSupplementaires;
}
// Surcharger la méthode afficher pour inclure les détails de
// l'abonnement premium
void afficher() override {
// Appeler la méthode de la classe mère
AbonnementGym::afficher();
cout << "Entraîneur personnel disponible: " << (entraineurPersonnel ? "Oui" : "Non") << endl;
cout << "Accès au spa: " << (AccesSpa ? "Oui" : "Non") << endl;
}
};
// Définir la fonction Main
int main() {
// Créer une instance de AbonnementGym
AbonnementGym a("Alex Babto", "Mensuel", 5);
// Créer une instance de AbonnementPremium
AbonnementPremium b("Emily Lyona", "Annuelle", 12, true, true);
// Afficher les détails de l'abonnement de base
cout << "Détails de l'abonnement de base:" << endl;
a.afficher();
// Afficher les détails de l'abonnement premium
cout << "\nDétails de l'abonnement premium:" << endl;
b.afficher();
return 0;
}
Sortie:
Détails de l'abonnement de base:
Nom du membre: Alex Babto
Type d'abonnement: Mensuel
Durée: 5 months
Frais d'abonnement: 250.0 €
Offre spéciale: Aucune offre spéciale n'est disponible.
Détails de l'abonnement premium:
Nom du membre: Emily Lyona
Type d'abonnement: Annuelle
Durée: 12 months
Frais d'abonnement: 1200.0 €
Offre spéciale: 10% réduction sur l'adhésion annuelle.
Entraîneur personnel disponible: Oui
Accès au spa: Oui