Ensuite, quelques remarques en vrac :
Je remarque que tu mélanges allègrement du C et du C++, j'ai vu des std::cin d'un côté et un getchar() de l'autre, c'est rarement une bonne idée ; j'ai déjà eu l'occasion de constater en TP que certaines bibliothèques de base du C utilisent des niveaux différents pour les entrées/sorties qui peuvent poser problèmes entre elles.
L'usage à outrance des macros est fortement déconseillé en C++, en dehors des cas où elles sont nécessaires comme pour les gardes d'inclusion. Utilise plutôt des constantes :
Par ailleurs, n'oublie qu'un tableau utilisé pour gérer les chaînes de caractères ne peut contenir que 'taille-1' caractères, car il faut toujours en avoir un pour placer la sentinelle de fin de chaîne '\0'. La SL propose d'ailleurs l'objet std::string pour gérer les chaînes de caractères de façon plus simple et plus sécurisée ; la fonction std::string::c_str() permet d'obtenir un tableau de caractères terminé par un '\0', s'il faut l'utiliser avec une fonction C.
Si tu utilises une std:string pour des fonctions comme modifier_nom(), et que tu ne requiers pas des paramètre explicites, tu pourras utiliser cette fonction avec des std::string, avec des chaînes de caractère type C, ou avec des constantes chaînes de caractères ("David").
void Personne::modifier_nom(const std::string& nom)
En effet, std::string dispose d'un constructeur qui prend une chaîne C en paramètre, par conséquent, si tu appelles ta fonction en lui passant une chaîne C ou une constante, le compilateur créera implicitement une std::string, qui sera elle passée à la fonction.
Dans le main, ce n'est pas une structure personne qu'il te faut créer, mais une classe Personne, à moins que tu puisse utiliser une structure Personne::personne pour initialiser une classe Personne, ce qui requerra un constructeur approprié ( Personne(const & Personne::personne), par exemple).
Pour les fonction qui ne modifient pas la classe, comme affiche(), mets les en const :
1 2 3 4 5 6 7
|
class Personne{
/* code */
public:
void affiche() const;
/* code */
}; |
Cela permettra à la compilation de vérifier qu'aucune instruction de la fonction, et qu'aucun appel à la fonction, n'entraîne une modification de l'objet personne sur lequel la fonction est appelée. C'est essentiellement un garde-fou, qui permet par exemple de se protéger de certains copier-coller "sauvages".
Partager