1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| class Auteur{
public:
Auteur(std::string const & nom, std::string const & langue):
nom_{nom}, langue_{langue}{
}
/* pour interdire la copie et l'affectation */
Auteur(Auteur const &) = delete; //C++11 et ultérieur "inside"
Auteur & operator=(Auteur const &) = delete;
/* on veut connaitre le nom de l'auteur */
std::string const & nom() const{
return nom_;
}
/* on veut savoir dans quelle langue il écrit ses oeuvres */
std::string const & langue() const{
return langue_;
}
private:
std::string nom_;
std::string langue_;
};
class Oeuvre{
public:
Oeuvre(std::string const & titre, Auteur const & auteur):
titre_{titre},auteur_{auteur}{
}
/* pour interdire la copie et l'affectation */
Oeuvre(Oeuvre const &) = delete;
Oeuvre & operator=(Oeuvre const &) = delete;
/* on veut connaire le titre original (dans la langue utilisée par l'auteur)
* de l'oeuvre
*/
std::string const & titreOriginal() const{
return titre_;
}
/* on veut savoir qui a écrit l'oeuvre */
std::string const & ecritPar() const{
return auteur_.nom();
}
/* on veut savoir la langue dans laquelle il a été écrit à l'origine */
std::string const & langueOriginale() const{
return auteur_.langue();
}
private:
std::string titre_;
Auteur const & auteur_; // comme on ne peut plus copier l'auteur, on en garde une réféence
// comme on n'a aucun droit de modifier l'auteur à partir de l'oevure
// la référence est constante
};
class Exemplaire{
public:
/* Parce que l'on a peut-être affaire à une traduction ... ou non */
Exemplaire(Oeuvre const & oeuvre, std::string const & titre = "", std::string const & langue=""):
oeuvre_{oeuvre}, titre_{titre}, langue_{langue}{
}
/* pour interdire la copie et l'affectation */
Exemplaire(Exemplaire const &) = delete;
Exemplaire & operator=(Exemplaire const &) = delete;
/* On veut savoir qui a écrit l'oeuvre */
std::string const & ecritPar() const{
return oeuvre_.ecritPar();
}
/* on veut connaitre le titre original de l'oeuvre*/
std::string const & titreOriginal() const{
return oeuvre_.titreOriginal();
}
/* on veut connaitre le titre de l'exemplaire actuel:
* - soit, c'est le titre original de l'oeuvre,
* - soit, c'est la traduction (dans une langue donnée) de ce titre
*/
std::string const & titre() const{
if(titre_.empty())
return titreOriginal();
return titre_;
}
/* on veut connaire la langue original de l'oeuvre */
std::string const & langueOriginale() const{
return oeuvre_.langueOriginale();
}
/* on veut connaitre la langue spécifique de l'exemplaire
* - Soit c'est la langue originale de l'eouvre
* - soit c'est la langue dans laquelle l'oeuvre a été traduit
*/
std::string const & langue() const{
if(langue_.empty())
return langueOriginale();
return langue_;
}
private:
Oeuvre const & oeuvre_;
std::string titre_;
std::string langue_;
}; |
Partager