Bonjour, je suis entrain de coder un petit projet pour m'entraîner en C++. J'ai défini deux objets (Vector et Ball) avec les constructeurs, getters et setters.
J'ai voulu tester toutes les méthodes, mais j'ai un problème avec le constructeurs de Ball. J'initialise une "ball1" et j'essaye de visualiser tous ses attributs : main.cpp
Mais là sans que je ne comprenne pourquoi, chaque attribut est bien initialisé sauf position_ et velocity_. J'ai vérifié le constructeur de Vector fonctionne bien, et quand j'utilise ball1.setPosition( , ) cette fois les valeurs de position/velocity sont bien changées. J'en ai déduit que c'était un problème de constructeurs pour Ball. Si quelqu'un a une idée je suis preneur Merci
Merci pour ta réponse mais je ne comprends pas. Comment fait on pour déclarer un objet en tant que membres d'une autre classe. Et ensuite pouvoir le modifier etc ?
Ainsi, tu mets du code dans le corps du constructeur. Mais en fait tu as initialisé 2 fois tes 5 membres! Tes membres doivent être créés et initialisés avant le corps, ensuite tu en changes la valeur. C'est quand même dommage! En utilisant la liste d'initialisation, tu crées et initialises chacun de tes membres une seule fois.
Dans ce code précis, il n'y a pas d'objets à charge déportée. Les moves finissent aussi en copies.
> à bannir pour faire les choses correctement.
Ici les setters aussi n'ont pas le moindre sens. Tes données n'ont pas d'invariants, et encore moins de services. OSEF si l'utilisateur va taper dedans.
> Il ne faut pas oublier l'initialisation lors de la déclaration. (Meme si lmghs n'aime pas)
J'ai repensé à notre discussion cet aprèm suite à l'annonce de GCC 12 par redhat. Il y a une amélioration de la détection des membres non initialisés.
Ici les setters aussi n'ont pas le moindre sens. Tes données n'ont pas d'invariants, et encore moins de services. OSEF si l'utilisateur va taper dedans.
Sans les setters je ne vois pas trop comment je vais pouvoir les modifier dans la suite du programme (en les mettant en attributs publics ?)
A la place ce qui aurait du sens, c'est fournir un service
Ball:update_position(double dt) {
position += velocity * dt;
}
Et même chose pour les forces qui vont agir sur la vélocité.
Autant sur la balle on peut se poser une question car on peut imaginer des services propres à tout mobile.
Sur le vecteur par contre... Où sont les services autres que de stocker des coordonnées? Et éventuellement supporter une algèbre (pour les additionner, soustraire, multiplier, etc). Ici, il y a (AMA) un bon désign de vecteur mathématique: https://marzer.github.io/muu/structmuu_1_1vector.html
On peut imaginer différents events (bonus par exemple) qui donnerait des caractéristiques à la balle et donc pourquoi pas changerait de couleur. Mais je comprends le principe de ne pas mettre des setters pour tout et n'importe quoi, il faut plutôt privilégié des méthodes qui modifient les attributs certes mais dans des cas précis comme ton exemple
Ball:update_position(double dt);
Merci pour ces explications, je vais tacher de rendre le code plus propre !
27 avril 2022 à 16:47:57
- Message modéré pour le motif suivant : Message complètement hors sujet
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
27 avril 2022 à 17:12:32
- Message modéré pour le motif suivant : Message complètement hors sujet
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Constructeurs d'une classe dans une autre
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Discord NaN. Mon site.
Discord NaN. Mon site.
En recherche d'emploi.
Discord NaN. Mon site.
Discord NaN. Mon site.