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
_status
de typebool
qui indique si le livre est prêté ; -
d’un constructeur qui initialise l’attribut à
false
; -
des méthodes publiques
bool isLended() const
qui renvoit la valeur de_status
,void lend()
qui modifie le valeur de_status
àtrue
etvoid 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
LendableBook
allouée automatiquement ; - sur un pointeur de type
Book
contenant l’adresse de cette instance deLendableBook
; - sur une référence de type
Book
sur 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.