La programmation en C++ moderne

Apprenez la programmation de zéro jusqu'à l'infini !

a marqué ce sujet comme résolu.

Reprise du dernier message de la page précédente

Le code n’est valable qu’a partir de C++ 17. Le compilateur gcc 9.3 ne compile par en C++17 par défaut à priori.

(/home/J0039644/src/zeste)===> gdb -quiet ./a
Reading symbols from ./a...done.
(gdb) br main
Breakpoint 1 at 0x1004010a5: file main.cpp, line 20.
(gdb) run
Starting program: /home/J0039644/src/zeste/a
[New Thread 6268.0x461c]
[New Thread 6268.0x432c]
[New Thread 6268.0x51e8]
[New Thread 6268.0x5f78]
[New Thread 6268.0x1cc4]

Thread 1 "a" hit Breakpoint 1, main () at main.cpp:20
20              Toto t = f();
(gdb) info source
Current source file is main.cpp
Compilation directory is /home/J0039644/src/zeste
Located in /home/J0039644/src/zeste/main.cpp
Contains 21 lines.
Source language is c++.
Producer is GNU C++14 9.3.0 -mtune=generic -march=x86-64 -g.
Compiled with DWARF 2 debugging format.
Does not include preprocessor macro info.

Édité par bluescaster

+0 -0

Salut à tous.

Un gros morceau aujourd’hui puisqu’on vous livre le chapitre sur la sémantique d’entité. Et y’a de quoi faire, même s’il reste des notions que je veux aborder.

  • La portée protected ?
  • Comment appeler une fonction d’une classe mère, pour réutiliser des comportements déjà codés.
  • Les exercices, pour bien faire pratiquer ce chapitre difficile.

Merci à tous pour votre aide et vos retours. Surtout qu’on vous livre des gros pavés. Merci, vos efforts sont ce qui ont fait de ce cours ce qu’il est aujourd’hui ! ;)

@informaticienzero


Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Édité par informaticienzero

Si ça peut donner des idées…

La portée protected ?

Je l’aborde en live en reprenant mon exemple de chat intoxiqué, et au lieu que le protagoniste soit le voisin à qui je donne les clés de la baraque, cela devient les enfants qui ne vont plus forcément respecter les invariants de porte qui doit rester fermée.

Sinon, ma conclusion haut niveau est généralement: données privés, mais services techniques protégés qui respectent les invariants.

Comment appeler une fonction d’une classe mère, pour réutiliser des comportements déjà codés.

Je ne l’aborde jamais sans faire une parenthèse avec le DP template method. Car seul ce dernier permet de contrôler exactement où est le point de variation. Avec l’appel de la fonction parente, on ne peut rajouter que du code avant ou après. Et in-fine, la vielle règle MISRA qui dit qu’il ne faut pas redéfinir une fonction qui a du code est loin d’être idiote.

Sinon, je n’ai pas trop le temps dans l’immédiat j’y jetterai un coup d’oeil plus tard.

+2 -0

Je n’ai pas relu la nouvelle version, c’est un peu pénible de ne pas avoir de diff. Il y a eu beaucoup de changement et ca vaut le coup que je relise ou pas ?

Pour poser des questions ou simplement discuter informatique, vous pouvez rejoindre le discord NaN.

+0 -0

Salut à tous.

Au programme, on a retravaillé les chapitres sur la sémantique d’entité et sur les handles. Nous sommes donc ouverts à toutes vos remarques et suggestions. Merci d’avance à tous. :)

@gbdivers : tu peux relire les deux chapitres pré-cités, ainsi que celui sur la sémantique de mouvement. Je n’ai pas de diff à montrer parce que déjà cette fonctionnalité manque sur ZdS, puis aussi parce que y’a eu des grosses réécritures sur ces trois chapitres. Merci pour ton aide, je sais qu’on te file un gros morceau là. ^^

PS : je suis tombé sur un cours POO aujourd’hui qui n’a pas l’air comme les autres. J’ai fais une lecture rapide, mais on parle de contrats, d’invariants, de SOLID. :)


Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Édité par informaticienzero

Bonjour,

Une petite typo: dans le chapitre https://zestedesavoir.com/contenus/beta/822/la-programmation-en-c-moderne/la-programmation-orientee-objet/la-semantique-de-mouvement/#2-rvalues-et-rvalue-references-1, vous dite:

Les rvalues, acronymes de … comme le temporaire m1 + m2 + m3 qu’on a vu en exemple dans la section précédente.

Hors, dans l’exemple précédent, c’est m3 = m1 + m2, donc le temporaire devait être m1 + m2.

Cordialement.

+1 -0

Bonjour,

Sauf erreur de ma part, il y a une petite erreur dans le dernier exemple du chapitre https://zestedesavoir.com/contenus/beta/822/la-programmation-en-c-moderne/la-programmation-orientee-objet/classes-a-semantique-dentites/#exemple-concret. votre exemple doit afficher:

Des décisions importantes doivent être prises aujourd'hui pour le service DSI !

hors, le code est:

void Directeur::assister_reunions() const noexcept
{
    std::cout << "Des décisions importantes doivent être prises aujourd'hui !\n";
}

le code devait être:

void Directeur::assister_reunions() const noexcept
{
    std::cout << "Des décisions importantes doivent être prises aujourd'hui pour le service " << m_direction << " !\n";
}

De plus, je vous pose la question de la meilleur syntaxe (des () ou des {}) pour:

Directeur::Directeur(std::string const& nom, std::string const& prenom, int salaire, std::string const& direction)
    : Personne(nom, prenom, salaire), m_direction(direction)

ou peut être

Directeur::Directeur(std::string const& nom, std::string const& prenom, int salaire, std::string const& direction)
    : Personne{nom, prenom, salaire}, m_direction{direction}

Autre remarque, dans le premier exemple du chapitre https://zestedesavoir.com/contenus/beta/822/la-programmation-en-c-moderne/la-programmation-orientee-objet/classes-a-semantique-dentites/#le-principe-de-substitution-de-liskov, ligne 19, c’est la première fois que l’on trouve la directive "protected:", et elle n’est pas présentée.

Cordialement.

Édité par Dedeun

+3 -0

Salut à tous.

Pas mal de modification sur les entités et sur l’héritage au programme de cette bêta. On a décidé de parler de NVI et pour cela, on a rajouté un chapitre sur l’héritage, sinon le chapitre entités aurait été bien trop lourd (en plus de faire un peu du hors-sujet).

On ne sait pas encore si on va parler de protected, j’y réfléchis. En attendant, n’hésitez pas à relire ces deux chapitres et à nous dire s’ils vous paraissent clairs, s’il manque des choses, si vous voyez d’autres notions importantes à rajouter.

Merci d’avance à tous. :)


Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.

Édité par informaticienzero

Bonjour,

Oups! J’ai beau lire, relire ces chapitres, c’est pas encore clair pour moi … Mais ça, c’est mon problème.

Et comme je les lis et relis, je remarque des détailles ("c’est pas bien grave, mon bon m’sieur")

Dans le chapitre https://zestedesavoir.com/contenus/beta/822/la-programmation-en-c-moderne/la-programmation-orientee-objet/classes-a-semantique-dentites/#h%C3%A9ritage-et-constructeurs, dans le 2ème exemple de code, vous avez inclus "#include <cassert>", alors qu’il n’y a pas de "assert" dans le code. Pour le premier exemple, le code proposé n’est pas complet. Si j’étais vous, j’ajouterai au debut de l’exemple 3 points:

...
int main()
{
    Directeur const patron { "Ron"s, "Pat"s, 2500 };
    patron.travailler();

    return 0;
}

Je ne comprend pas l’objectif du chapitre https://zestedesavoir.com/contenus/beta/822/la-programmation-en-c-moderne/la-programmation-orientee-objet/classes-a-semantique-dentites/#une-question-de-visibilit%C3%A9. Il n’est pas fini ? Vous allez y introduire la description de la directive "protected:" ?

M’enfin ! Si ça peut aider …

Cordialement

+2 -0

Merci pour tes retours. :)

vous avez inclus "#include <cassert>", alors qu’il n’y a pas de "assert" dans le code

Oui bien vu. Je le mets à chaque fois dans mes tests, mais je ne pense pas toujours à le retirer lors de l’écriture du tutoriel.

Pour le premier exemple, le code proposé n’est pas complet. Si j’étais vous, j’ajouterai au debut de l’exemple 3 points:

Bien vu, on va faire ça.

Je ne comprend pas l’objectif du chapitre https://zestedesavoir.com/contenus/beta/822/la-programmation-en-c-moderne/la-programmation-orientee-objet/classes-a-semantique-dentites/#une-question-de-visibilit%C3%A9. Il n’est pas fini ? Vous allez y introduire la description de la directive "protected:" ?

Le but est d’expliquer à un débutant que tout ce qui est private n’est pas accessible dans les classes enfants. Ça peut sembler évident, mais c’est toujours mieux quand on le dit. :)

Pour protected, je ne sais pas encore. Il présente des risques décapsulatoires (pour reprendre les propos de @lmghs) plus élevés et si tu utilises le NVI, les situations où la fonction membre virtuelle doit être protected et non private sont rares. J’y réfléchis toujours.

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte