LendableBook.
Nous voulons étendre la classe Book avec un service qui indique si un livre est prêté ou non.
Un livre prêté.
La nouvelle classe à écrire est LendableBook: cette classe est une sous classe de Book.
En plus de la méthode héritée de Book, elle dispose:
-
d’un attribut
_statusde typeboolqui indique si le livre est prêté ; -
d’un constructeur qui initialise l’attribut à
false; -
des méthodes publiques
bool isLended() constqui renvoit la valeur de_status,void lend()qui modifie le valeur de_statusàtrueetvoid giveBack()qui modifie le valeur de_statusàfalse.
Ecrire cette classe: fichiers LendableBook.hpp et LendableBook.cpp.
Avec l'exemple de programme suivant :
Vérifier le comportement dans l'utilisation du constructeur par copie et de l'affectatio et de libération. Pour cela, utiliser les traces contenues dans le code de la classe `CharSequence`. Vérifier aussi la libération mémoire.#include <cstdio>
#include "LendableBook.hpp"
int main() {
std::printf("\ninstantiation\n");
LendableBook lb{"9 791039", "Legendes & lattes"};
std::printf("lb isLended: %d\n", lb.isLended());
LendableBook lc{"9 782376", "Sidooh"};
lc.lend();
std::printf("lc isLended: %d\n", lc.isLended());
std::printf("\ninstantiation par copie\n");
LendableBook ld{lc};
std::printf("ld isLended: %d\n", ld.isLended());
std::printf("\nAffectation\n");
lc=lb;
std::printf("lc isLended: %d\n", lc.isLended());
std::printf("\nfin main\n");
return 0;
} #include <iostream>
using std::cout;
using std::endl;
#include "LendableBook.hpp"
int main() {
cout << "\ninstantiation\n";
LendableBook lb{"9 791039", "Legendes & lattes"};
cout << "lb isLended: " << std::boolalpha << lb.isLended() << endl;
LendableBook lc{"9 782376", "Sidooh"};
lc.lend();
cout << "lc isLended: " << std::boolalpha << lc.isLended() << endl;
cout << "\ninstantiation par copie\n";
LendableBook ld{lc};
cout << "ld isLended: " << std::boolalpha << ld.isLended() << endl;
cout << "\nAffectation\n";
lc=lb;
cout << "lc isLended: " << std::boolalpha << lc.isLended() << endl;
cout << "\nfin main\n";
return 0;
} La méthode héritée getInfo().
Dans la classe LendableBook, modifier le traitement de la méthode getInfo() pour renvoyer une instance de CharSequence de valeur “_status:_id:Book:_title” (avec comme valeur de _status lended ou ready to lend).
Appel de la méthode getInfo().
Écrire un programme progamLend.cpp qui utilise la méthode getInfo() :
- sur une instance de
LendableBookallouée automatiquement ; - sur un pointeur de type
Bookcontenant l’adresse de cette instance deLendableBook; - sur une référence de type
Booksur cette instance de deLendableBook.
Et ajouter l’affichage de sizeof(LendableBook) et de sizeof(Book).
Compiler, exécuter et expliquer le comportement de ces appels.