Je débute avec la programmation POO en C++, on me demande d'implémenter une classe*qui ne pourrait pas être instanciée sans un nom de type std::string.
J'avoue que là, je suis un peu perdu sur comment je dois le faire.
Merci d'avance.
Je débute avec la programmation POO en C++, on me demande d'implémenter une classe*qui ne pourrait pas être instanciée sans un nom de type std::string.
J'avoue que là, je suis un peu perdu sur comment je dois le faire.
Merci d'avance.
Bonjour,
Ce n'est pas très clair. S'agit-il de déclarer et dériver une classe abstraite ? Peut-on avoir l'énoncé exact (et original) de ton problème ?
Voici l'énoncé exacte sur l'image ci-dessous.
D'accord, il s'agit d'une classe « Élève » et comme l'instancier revient à représenter un élève donné en mémoire, on attend d'elle qu'elle contienne le minimum d'information nécessaires à identifier un individu, donc en l'occurrence le nom de l'élève.
Hors contexte, on avait du mal à savoir où ils voulaient en venir, surtout si c'est à l'intention des débutants. S'ils comptaient dès le départ te faire écrire une classe template, ça aurait déjà été velu, s'ils avaient trouvé un moyen efficace de faire de l'introspection, c'est moi que ça aurait intéressé.
Je pense que ta classe doit tout simplement contenir un membre « name » de type std::string, donc ici :
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class Student { public: std::string name; };
… et pour qu'il soit nécessaire de le renseigner, il te faut un constructeur qui accepte une chaîne de type std::string en argument et qui s'en servent pour affecter ce nom au champ name. Tu écris alors ce constructeur et aucun autre pour le moment (en particulier, pas de constructeur par défaut), si bien qu'il sera effectivement nécessaire de passer ce nom à l'instanciation en l'absence de toute autre méthode de construction.
On reste volontairement flou ici s'il s'agit d'un exercice car tu dois avoir les billes pour le faire. Dans le cas contraire, on développera un peu plus.
Bon courage.
Je comprends que la classe ne doit pas avoir de constructeur par défaut.
Je ne suis pas habitué à ce qu'on mette en avant cette contrainte dans des exos d'initiation. C'est plus souvent une conséquence due à un autre choix. Même s'il est vrai que c'est un choix de conception pertinent.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Salut,
Arf, Obsidian est parti trop vite, il a laissé ses meilleurs joueurs sur le banc de touche: private et const.
On comprend bien la notion de snippet, mais quelqu'un qui débute peut y voir une mesure incitative, du coup, on les fait participer.
Et si ça a été enseigné, il conviendra aussi de s'interroger si le constructeur doit être spécifié explicit et s'il doit être défini en dehors de sa classe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class Student { public: //... private: const std::string name; }
C'est mieux, quitte à relaxer plus tard et comprendre pourquoi, que l'inverse.
Merci beaucoup pour votre aide, je vais suivre cette piste puis je verrai les retours de la moulinette.
Encore une fois merci.
Partager