J'ai une question dans le cours chapitres II Surchargez un opérateur. Il y a cette partie qui me perturbe :
void Duree::operator+=(const Duree& a)
{
//1 : ajout des secondes
m_secondes += a.m_secondes;
//Si le nombre de secondes dépasse 60, on rajoute des minutes
//Et on met un nombre de secondes inférieur à 60
m_minutes += m_secondes / 60;
m_secondes %= 60;
//2 : ajout des minutes
m_minutes += a.m_minutes;
//Si le nombre de minutes dépasse 60, on rajoute des heures
//Et on met un nombre de minutes inférieur à 60
m_heures += m_minutes / 60;
m_minutes %= 60;
//3 : ajout des heures
m_heures += a.m_heures;
}
ma question est pourquoi on a accès "m_heures", "m_"minutes" ... de l'objet "a" ? vu qu'ils sont en private.
void Duree::operator+=(const Duree& a) // la fonction fait partie de la classe, mais on lui passe en argument une instance externe (ici le "a"?)
dans le code on ne fait pas un "this->m_heures" mais un "a.m_...". Et pour moi "a" est externe, d'ailleurs cette astuce est utilisé pour additionner les valeurs de deux objets distincts. l'objet actuel où les variables sont directement accessibles "m_secondes" et les variable de l'objet "a" "a.m_secondes" ....
Je suis désolé mais je n'arrive pas à schématiser la logique...
EDIT: j'ai trouvé ma réponse un peu plus loin dans le cours dans un autre exemple
Vous vous demandez peut-être comment cela se fait qu'on puisse accéder aux attributsm_vieetm_manadupersonnageACopier? Si vous vous l'êtes demandé, je vous félicite, cela veut dire que le principe d'encapsulation commence à rentrer dans votre tête.
Eh oui, en effet,m_vieetm_manasont privés donc on ne peut pas y accéder depuis l'extérieur de la classe… sauf qu'il y a une exception ici : on est dans une méthode de la classePersonnageet on a donc le droit d'accéder à tous les éléments (même privés) d'un autrePersonnage. C'est un peu tordu, je l'avoue, mais dans le cas présent cela nous simplifie grandement la vie. Retenez donc qu'un objet de typeXpeut accéder à tous les éléments (même privés) d'un autre objet du même typeX.
J'avoue que cette logique me perturbé depuis un long moment.
Le but de private est d’empêcher le monde extérieur à la classe de savoir ce qui se passe dans la classe. Quand vous définissez Duree::operator+=, vous êtes dans la classe Duree, donc dans ce contexte, vous pouvez "examiner au scalpel" toute instance de Duree, puisque vous en êtes une, les autres instances n’ont rien à vous cacher puisque vous connaissez vos propres entrailles, qui sont les mêmes pour les autres instances
J'ai une question sur les classes abstraites , dans le cours on dit qu'il est possible de faire hériter des classes de classe abstraite sans générer d'erreurs en utilisant le code suivant:
int main(){
Vehicule* ptr(0);
Voiture caisse(20000,5);
ptr = &caisse;
cout << ptr->nbrRoues() << endl;
}.
Mais lorsque je compile , le compilateur me dit que la classe Voiture ne peut pas hériter de la classe abstraite.
Le code d'une classe a accès aux détails techniques de la classe, et heureusement. Sinon on ne pourrait rien faire.
Même sî ils sont déclarés privés pour rester des détails internes de réalisation, pas accessibles depuis ailleurs. La réalisation, elle est faite par les fonctions membres de la classe.
--
Classe abstraite : il faudrait voir le code de voiture et de la classe abstraite, ainsi que le message d'erreur complet.
Une classe abstraite sert généralement de base à d'autres classes, l'héritage est donc possible.
- Edité par michelbillaud 1 novembre 2021 à 9:14:48
bonsoir dans le livre, on dit que le code minimal d'un programme Qt est:
#include
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
return app.exec();
}
Mais je ne vois pas de <QApplication>, j'utilise <QApplicationStateChangeEvent> et on me dit que la variable "app" a été déclarée mais manque d'inforamations.
Il est probable qu'il manque le module GUI (ou widgets ? Je sais plus). Le cours a ete ecrit a l'époque de Qt4 (où ce module n'existait pas) et le fonctionnement n'est plus le même. Lors de l'auto completion dans Qt Creator, il ne trouve pas `QApplication` (puisque inaccessible) et propose ce qu'il trouve de plus proche (QApplicationStateChangeEvent qui doit etre defini pour QCoreApplication, je suppose).
Sur la partie transmission des paramètres du chapitre dédié à l'héritage, lorsque vous dites que l'on peut "transmettre" les paramètres du constructeur de la classe Magicien à celui de la classe Personnage, cela signifie que je peux créer un Magicien avec par exemple le nom "Pierre" qui n'était pas déclaré dans la classe Personnage et le faire accepter par cette classe et toutes les classes qui en héritent .Je ne comprends pas bien cette partie du cours, s'il vous plaît quelqu'un pourrait-il m'aider?
@StephieGoune Bonsoir, merci de ne pas déterrer d'ancien sujet résolu. Créer le votre dans le respect des règles du forum à savoir qu'un message commence par des règles de politesses (un bonjour ou des salutations à la communauté et se termine par des remerciements par avance pour les futures réponses) un descriptif de votre problème et le code que vous avez écrit inséré sur le forum avec l'outil d'intégration de code soit le bouton code </>.
Discord NaN. Mon site.
Discord NaN. Mon site.
Discord NaN. Mon site.
Discord NaN. Mon site.