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
| class CPersonne{
private:
/* une variable par ligne, c'est beaucoup plus facile à lire et à comprendre
*
* la directive using namespace std; est une aberration, surtout si elle se trouve dans un fichier d'en-tête
* il faut donc utiliser le nom pleinement qualifié des fonctionnalités proposées par la S(T)L !
*/
std::string nom;
std::string prenom;
std::string id;
std::string mail;
public:
/* !!!! Toute les personnes doivent au minimum être identifiées par un nom, un prénom, et un id!!!
* le constructeur par défaut n'a donc absolument aucun intérêt !!!!!
*/
//CPersonne();
/* Dés que l'on décide de transmettre -- pour faire simple -- une structure ou une classe à une fonction,
* il est préférable de la transmettre par référence, pour éviter les copies inutiles
* Si la fonction n'a pas vocation à modifier la valeur en question, nous choisirons de la transmettre sous
* la forme d'une référence constante
* le fait d'indiquer le nom des paramètres peut avoir une influence positive sur la compréhension du code
* nous pouvons en outre définir une valeur par défaut (connue pour être invalide) à l'adresse E-mail
*/
CPersonne(std::string const & id, std::string const & nom, std::string const & prenom, std::string const & mail="invalid@invalid.com");
/* Il n'y a aucune raison pour que l'on décide de changer le nom, le prénom ou l'id d'une
* personne!!!
* Ces informations sont fournies à la naissance / à la création, et restent les même jusqu'à
* la mort / la destruction de ta personne!!!
* il n'y a donc aucune raison de fournir les fonctions set_nom, set_prenom et set_id (*)
*/
// void set_nom(string);
// void set_prenom(string);
//void set_id(string);
/* l'adresse mail est la seule information qui ** eventuellement ** susceptible d'évoluer dans le
* temps... Et encore!!!
*/
void set_mail(std::string const & newmail);
/* autant renvoyer une référence constante sur les données membres, pour éviter (une fois encore)
* les copies inutiles
*/
std::string const & get_nom() const;
std::string const & get_prenom() const;
std::string const & get_id() const;
std::string const & get_mail() const;
/* lorsque tu transmet une personne, l'idéal est de la transmettre sous la forme d'une référence,
* voire, sous la forme d'une référence constante si la fonction n'a pas vocation à modifier la personne!
*
* NOTA: une classe CPersonne a -- de toutes évidences -- sémantique d'entité... Il n'y aurait normalement
* aucune raison de vouloir comparer deux personnes entre elles, bien que l'on puisse envisager de comparer
* les différentes données auxquelles on a accès ;)
*/
friend bool operator ==(CPersonne const &, CPersonne const &);
friend ostream& operator<<(ostream& out,CPersonne const & p);
/* si l'on n'utilise plus les pointeur, le compilateur sait exactement comment faire pour détruire notre
* personne!!! A moins de prévoir que l'on aura affaire à une hiérarchie de classe dont CPersonne serait
* la classe de base, et que l'on voudra pouvoir être en mesure de détruire n'importe quelle personne alors
* que nous la connaissons comme étant... de type CPersonne (ce qui justifierait un destructeur virtuel),
* nous pouvons donc laisser le compilateur fournir lui-même le destructeur ;)
*/
//~CPersonne();
}; |
Partager