Exercice 1 | Exercice 2 | Exercice 3 | Exercice 4 |
class Apero { public: void bis() const { cout << "Encore une ?" << endl; } };
class Fleur { public: Fleur(const string& espece, const string& couleur) : couleur(couleur) { cout << espece << " fraichement cueillie" << endl; } Fleur(const Fleur& f) : couleur(f.couleur) { cout << "Fragile corolle taillee" << endl; } ~Fleur() { cout << "qu'un simple souffle..." << endl; } void eclore() const { cout << "veine de " << couleur << endl; } private: const string couleur; };
Voici une solution possible pour la première partie (voir les commentaires) :
#include <iostream> #include <string> #include <vector> using namespace std; // ====================================================================== class Compte { public: * du comptes. */ Compte(string const& nom, double taux) : intitule(nom), solde(0.0), taux(taux) {} const string& nom() const { return intitule; } /* Pour ajouter de l'argent sur le compte. */ void crediter(double somme) { solde += somme; } */ void bouclement() { crediter(solde * taux); } // Affichage du compte. void afficher() const { cout << " Compte " << intitule << " : " << solde << " francs" << endl; } // ---------------------------------------- private: const string intitule; double solde; double taux; }; // ====================================================================== class Client { public: /* Un client a au moins un nom et une adresse (= ville ici). */ Client(string const& nom, string const& adresse, double taux_negocie = 0.01) : nom(nom), ville(adresse) , portefeuille(1, Compte("courant", taux_negocie)) {} // Pour ouvrir un nouveau compte void ouvre_compte(string const& nom, double taux) { portefeuille.push_back(Compte(nom, taux)); } // Affichage des informations du client void afficher() const { cout << "Client " << nom << " de " << ville << endl; for (const auto & compte : portefeuille) { compte.afficher(); } } // Bouclement de tous les comptes du client void bouclement() { for (auto & compte : portefeuille) { compte.bouclement(); } } void crediter(string const& intitule, double somme) { for (auto & compte : portefeuille) { if (compte.nom() == intitule) { compte.crediter(somme); return; } } } // ---------------------------------------- private: const string nom; string ville; vector<Compte> portefeuille; }; // ====================================================================== class Banque { public: // Pour ajouter un nouveau client void nouveau_client(Client& quidam) { clients.push_back(&quidam); } // Pour faire le bouclement void bouclement() { for(auto & client : clients) { client->bouclement(); } } // Pour afficher les comptes des clients void afficher() const { for(auto & client : clients) { client->afficher(); } } // ---------------------------------------- private: /* La banque n'A pas vraiment ses clients, au mieux "un moyen de les * contacter" = pointeurs vers les clients */ vector<Client*> clients; }; // ====================================================================== int main() { Banque fictive; fictive.nouveau_client(pedro); pedro.crediter("courant", 1000.0); Client alexandra("Alexandra", "Lausanne"); fictive.nouveau_client(alexandra); alexandra.crediter("courant", 3000.0); fictive.afficher(); fictive.bouclement(); fictive.afficher(); return 0; }
et sa révision pour la seconde partie :
#include <iostream> #include <string> #include <vector> using namespace std; // ====================================================================== class Compte { public: * du comptes. */ Compte(string const& nom, double taux) : intitule(nom), solde(0.0), taux(taux) {} const string& nom() const { return intitule; } /* Pour ajouter de l'argent sur le compte. */ void crediter(double somme) { solde += somme; } */ void bouclement() { crediter(solde * taux); } // Affichage du compte. void afficher() const { cout << " Compte " << intitule << " : " << solde << " francs" << endl; } // ---------------------------------------- private: const string intitule; double solde; double taux; }; // ====================================================================== class Client { public: /* Un client a au moins un nom et une adresse (= ville ici). */ Client(string const& nom, string const& adresse, bool homme = true, double taux_negocie = 0.01) : nom(nom), ville(adresse), homme(homme) , portefeuille(1, Compte("courant", taux_negocie)) {} // Pour ouvrir un nouveau compte void ouvre_compte(string const& nom, double taux) { portefeuille.push_back(Compte(nom, taux)); } // Affichage des informations du client void afficher() const { cout << "Client" ; if (not homme) cout << 'e'; cout << " " << nom << " de " << ville << endl; for (const auto & compte : portefeuille) { compte.afficher(); } } // Bouclement de tous les comptes du client void bouclement() { for (auto & compte : portefeuille) { compte.bouclement(); } } void crediter(string const& intitule, double somme) { for (auto & compte : portefeuille) { if (compte.nom() == intitule) { compte.crediter(somme); return; } } } // ---------------------------------------- private: const string nom; string ville; const bool homme; vector<Compte> portefeuille; }; // ====================================================================== class Banque { public: // Pour ajouter un nouveau client void nouveau_client(Client& quidam) { clients.push_back(&quidam); } // Pour faire le bouclement void bouclement() { for(auto & client : clients) { client->bouclement(); } } // Pour afficher les comptes des clients void afficher() const { for(auto & client : clients) { client->afficher(); } } // ---------------------------------------- private: /* La banque n'A pas vraiment ses clients, au mieux "un moyen de les * contacter" = pointeurs vers les clients */ vector<Client*> clients; }; // ====================================================================== int main() { Banque fictive; fictive.nouveau_client(pedro); pedro.crediter("courant", 1000.0); Client alexandra("Alexandra", "Lausanne", false); fictive.nouveau_client(alexandra); alexandra.crediter("courant", 3000.0); fictive.afficher(); fictive.bouclement(); fictive.afficher(); return 0; }
#include <iostream> #include <vector> #include <string> using namespace std; // ====================================================================== class Article { public: Article(string const& nom, double prix, bool action = false) : nom_(nom), prix_(prix), action_(action) {} double prix() const { return prix_; } string nom() const { return nom_; } bool est_en_action() const { return action_; } private: const string nom_ ; double prix_ ; bool action_ ; }; // ====================================================================== class Achat { public: Achat(Article const& article, unsigned int quantite = 1) : article_(article), quantite_(quantite) {} double prix() const { double prix_( quantite_ * article_.prix() ); if (article_.est_en_action()) { prix_ *= 0.5; } return prix_; } void afficher() const { cout << article_.nom() << " : " << article_.prix() << " x " << quantite_ << " = " << prix() << " F"; if (article_.est_en_action()) { cout << " (en action)"; } cout << endl; } private: const Article article_; const unsigned int quantite_; }; // ====================================================================== class Caddie { public: void remplir(Article const& article, unsigned int quantite = 1) { achats.push_back(Achat(article, quantite)); } double total() const { double somme(0.0); for (auto const& achat : achats) { achat.afficher(); somme += achat.prix(); } return somme; } private: vector<Achat> achats; }; // ====================================================================== class Caisse { public: Caisse() : total(0.0) {} void afficher() const { cout << total << " F"; } void scanner(Caddie const& caddie) { double montant(caddie.total()); total += montant; cout << "-----" << endl; } private: double total; }; // ====================================================================== int main() { Article choufleur ("Chou-fleur extra" , 3.50 ); Article roman ("Les malheurs de Sophie", 16.50, true ); Article camembert ("Cremeux 100%MG" , 5.80 ); Article cdrom ("C++ en trois jours" , 48.50 ); Article boisson ("Petit-lait" , 2.50, true); Article petitspois("Pois surgeles" , 4.35 ); Article poisson ("Sardines" , 6.50 ); Article biscuits ("Cookies de grand-mere" , 3.20 ); Article poires ("Poires Williams" , 4.80 ); Article cafe ("100% Arabica" , 6.90, true); Article pain ("Pain d'epautre" , 6.90 ); vector<Caddie> caddies(3); vector<Caisse> caisses(2); // Les clients font leurs achats : // remplissage du 1er caddie caddies[0].remplir(choufleur, 2); caddies[0].remplir(cdrom ); caddies[0].remplir(biscuits , 4); caddies[0].remplir(boisson , 6); caddies[0].remplir(poisson , 2); // remplissage du 2eme caddie caddies[1].remplir(roman ); caddies[1].remplir(camembert ); caddies[1].remplir(petitspois, 2); caddies[1].remplir(poires , 2); // remplissage du 3eme caddie caddies[2].remplir(cafe , 2); caddies[2].remplir(pain ); caddies[2].remplir(camembert, 2); caisses[0].scanner(caddies[0]); cout << "=========================================" << endl; caisses[0].scanner(caddies[1]); cout << "=========================================" << endl; caisses[1].scanner(caddies[2]); cout << "=========================================" << endl; for (size_t i(0); i < caisses.size(); ++i) { cout << "Caisse " << i+1 << " : " ; caisses[i].afficher(); cout << endl; } return 0; }