Partage
  • Partager sur Facebook
  • Partager sur Twitter

Constructeur surchargé & tableau de char

Sujet résolu
    29 janvier 2019 à 13:48:18

    Bonjour,

    Je suis désolée si ma question a déjà été posée quelque part, j'ai cherché un peu partout mais je me retrouve face à un souci que j'ai du mal à résoudre...


    Je dois, pour un exercice, créer une classe Personne avec des tableaux de char pour le nom et le prénom, et je me retrouve face à des erreurs de compilations de type "array must be initialized with brace-enclosed initializer" lorsque je tente de créer un constructeur surchargé de la même façon que dans le cours d'OpenClassroom. (j'ai mis le lien vers une capture d'écran à la fin du message).

    Serait-il possible de m'indiquer comment construire ce constructeur et/ou où se trouvent mes erreurs ?

    De plus, mes accesseurs invoquent un message d'erreur de type "invalid conversion from char* to char" (ce qui est logique puisque j'ai mis le type char), comment lui indiquer qu'il s'agit d'un tableau de char ? (sans passer par char*)

    En vous remerciant d'avance

    :D

    #include <iostream>
    #include <string>
    #include <Personne.h>
    
    using namespace std;
    
    
    ///// constructeurs /////
    
    // par défaut
    
    Personne::Personne() {
        char m_nom[20] = "exempleNom";
        char m_prenom[20] = "exemplePrenom";
        int m_age = 25;
    }
    
    // de copie
    
    
    // surchargé
    Personne::Personne(char nom[], char prenom[], int age) {
        char m_nom[0] = nom;
        char m_prenom[0] = prenom;
        int m_age(age);
    }
    
    ///// destructeurs /////
    
    Personne::~Personne() {
    }
    
    ///// accesseurs /////
    
    char Personne::getNom() {
        return m_nom;
    }
    
    char Personne::getPrenom() {
        return m_prenom;
    }
    
    int Personne::getAge() {
        return m_age;
    }
    
    ///// methodes /////
    
    void Personne::afficher() const {
        cout << "Nom : " << m_nom << endl;
        cout << "Prénom : " << m_prenom << endl;
        cout << "Âge : " << m_age << endl;
    }
    
    
    
    
    
    #ifndef PERSONNE_H_INCLUDED
    #define PERSONNE_H_INCLUDED
    
    #include <iostream>
    #include <string>
    
    
    class Personne {
    
        private :
            char m_nom[];
            char m_prenom[];
            int m_age;
    
        public :
            //constructeurs
            Personne(); // par défaut
            Personne(char nom[], char prenom[], int age); // surchargé
    
            //destructeur
            ~Personne();
    
            //accesseurs
            char getNom();
            char getPrenom();
            int getAge();
    
            //méthodes
            void afficher() const;
    
    
    };
    
    
    #endif // PERSONNE_H_INCLUDED
    
    #include <iostream>
    #include <string>
    #include <Personne.h>
    
    using namespace std;
    
    
    int main () {
    
    
    Personne exemple1 = new Personne(); //appel au constructeur par défaut
    
    Personne exemple2 = new Personne("Dupont", "Mathias", 28); //appel au constructeur surchargé
    
    Personne exemple3 = new Personne(exemple2); //appel au constructeur de copie
    
    return 0;
    }
    







    -
    Edité par HoneyDule 29 janvier 2019 à 17:53:53

    • Partager sur Facebook
    • Partager sur Twitter
      29 janvier 2019 à 14:10:23

      Hello,

      Pourquoi tu n'utilise pas std::string ?

      • Partager sur Facebook
      • Partager sur Twitter

      Architecte logiciel - Software craftsmanship convaincu.

        29 janvier 2019 à 14:25:33

        Parce qu'ils souhaitent explicitement qu'on utilise les tableaux de char...

        Pour éviter l'utilisation des strings justement, dans un but pédagogique de progression linéaire je présume, mais j'ai personnellement fait l'exercice avec uniquement des strings au début c'était nettement plus simple...

        Donc je suis tout à fait d'accord que c'est se compliquer la vie pour pas grand chose, mais je devrai malheureusement bien lui rendre un exercice :(

        • Partager sur Facebook
        • Partager sur Twitter
          29 janvier 2019 à 14:31:33

          HoneyDule a écrit:

          Parce qu'ils souhaitent explicitement qu'on utilise les tableaux de char...

          Pourtant le crétacé c'était y'a un moment... Il n'y a aucun intérêt d'utiliser des char[] ou char* dans ce cas, et surtout ça n'apprend absolument rien aux élèves.
          • Partager sur Facebook
          • Partager sur Twitter
            29 janvier 2019 à 15:02:45

            Pourquoi ne pas changer de professeur dans ce cas?

            Je suis désole mais cela n'est pas dans un cadre pédagogique.

            Il n'y a aucune raison d'apprendre les tableaux de char* en C++, c'est comme si tu devais apprendre comment fonctionne le filtre de ta cafetières avant de faire du café.

            Si on fait chier le monde avec le SRP et l'OCP c'est pas pour rien.

            -
            Edité par necros211 29 janvier 2019 à 15:03:29

            • Partager sur Facebook
            • Partager sur Twitter

            Architecte logiciel - Software craftsmanship convaincu.

              29 janvier 2019 à 15:10:59

              Ca vous est arrivé souvent de dire, en master, "ce prof me plait pas et ses exercices à rendre sont obsolètes, je ne vais donc pas les faire et je voudrais changer de prof s'il vous plait." ?

              Je sais pertinemment que c'est stupide, il s'avère que ça fait quand même partie des exercices notés que je dois rendre dans deux semaines, et que si je lui marque que ses exercices (et probablement elle-même) sont dépassés de quelques dizaines d'années au lieu de lui rendre un exercice, ça m'étonnerait que ça lui plaise beaucoup, et à ma note aussi...

              Donc, même s'il n'y a aucune raison de l'apprendre, est-il possible que quelqu'un m'aide avec ce souci ?

              -
              Edité par HoneyDule 29 janvier 2019 à 15:11:15

              • Partager sur Facebook
              • Partager sur Twitter
                29 janvier 2019 à 15:24:49

                Oui, et le professeur fut remplacer l’année suivante.

                C'est important de faire de l'auto-critique sur tous les cours.

                Si quelque chose parait bizarre, se regrouper en groupe d’élève, faire un argumentaire et aller voir la direction.

                Surtout si c'est un cours de Master, c'est une honte.

                Sinon, sans code on ne peux pas voir ou tu as un problème.

                • Partager sur Facebook
                • Partager sur Twitter

                Architecte logiciel - Software craftsmanship convaincu.

                  29 janvier 2019 à 15:27:54

                  necros211 a écrit:

                  Oui, et le professeur fut remplacer l’année suivante.

                  C'est important de faire de l'auto-critique sur tous les cours.

                  C'est important d'accepter la critique, mais ce n'est pas pour autant répandu.

                  Sinon @HoneyDule :

                  char m_nom[0] = nom;

                  Comment comprends-tu cet extrait du code ?

                  Edit : D'ailleurs, pourrais-tu le poster conformément aux règles du forum ? (le bouton </>)

                  -
                  Edité par Emrak 29 janvier 2019 à 15:29:04

                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 janvier 2019 à 15:29:25

                    necros211 a écrit:

                    Oui, et le professeur fut remplacer l’année suivante.

                    C'est important de faire de l'auto-critique sur tous les cours.

                    Si quelque chose parait bizarre, se regrouper en groupe d’élève, faire un argumentaire et aller voir la direction.

                    Surtout si c'est un cours de Master, c'est une honte.

                    Sinon, sans code on ne peux pas voir ou tu as un problème.


                    Déjà fait par les (actuels) M2 qui se sont plaints que les cours de ladite prof étaient anciens. C'est une prof qui "n'appartient" pas à notre master mais y intervient uniquement, nous n'avons pas de pouvoir décisionnaire, même en se plaignant, sur sa présence ou non puisqu'il n'y a personne d'autre qu'elle pour faire ces cours semblerait-il.

                    L'exercice en question compose la première question d'un seul td sur six, bien que ça reste stupide d'apprendre des trucs aussi obsolètes, je ne pense pas qu'ils soit non plus utile que je m'attarde plus longtemps sur le fait que ce soit dépassé que sur le fait de composer avec le fait que ce soit dépassé...

                    Et j'ai indiqué que j'ai mis le lien vers mon code en fin du premier message.

                    Emrak a écrit:

                    necros211 a écrit:

                    Oui, et le professeur fut remplacer l’année suivante.

                    C'est important de faire de l'auto-critique sur tous les cours.

                    C'est important d'accepter la critique, mais ce n'est pas pour autant répandu.

                    Sinon @HoneyDule :

                    char m_nom[0] = nom;

                    Comment comprends-tu cet extrait du code ?

                    Edit : D'ailleurs, pourrais-tu le poster conformément aux règles du forum ? (le bouton </>)

                    -
                    Edité par Emrak il y a moins de 30s


                    J'ai essayé de le poster comme cela, mais cela déformait la page du navigateur, j'ai donc préféré y inclure un lien...

                    Je cherchais à réutiliser mon tableau de caractères m_nom et à y inclure, en emplacement 0, ce que contiendrait la variable nom (une fois qu'elle serait définie dans le main du coup). Je me doutais bien que la syntaxe n'était pas la bonne mais je ne vois pas trop comment faire ça, j'ai tenté beaucoup de trucs ^^'


                    -
                    Edité par HoneyDule 29 janvier 2019 à 15:33:41

                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 janvier 2019 à 16:10:47

                      J'entends la contrainte forte

                      option 1: faire les choses pseudo-correctement en dupliquant 50 fois ce qu'il est nécessaire de faire pour chaque champ de chaine. C'est ce que tu cherches à faire, et que je ne te conseille pas de faire.

                      option 2: décomposer pour mieux régner. Je sais, je détourne l'adage, mais cela reste un principe majeur en développement informatique -- et dans plein d'autres métiers. L'idée, tu n'as pas le droit de faire ce que nous attendons de toi en industrie (utiliser std::string), mais rien ne t'empêche à priori de te définir une classe chaine, qui gère donc une seule chaine à la fois. Pour le coup, cela a un intérêt pédagogique, mais le niveau est cependant avancé.

                      Fais à minima en sorte que ta chaine supporte:
                      - construction par copie
                      - affectation par copie
                      - destruction
                      - construction par défaut
                      - construction depuis un 'char const*'
                      - affichage et lecture via operator<< et operator>>
                      - la concaténation si vraiment tu t'embêtes, mais tu va pouvoir t'en passer dans un premier temps probablement.

                      et tu auras résolu simplement tous les problèmes qui pourraient se mettre en travers de ta route.

                      Comprendre avec cette "option": reinventer la roue pour des soucis pédagogiques, pourquoi pas. Mais on ne prend pas un problème complexe sans le décomposer en sous-problèmes simples. Ce n'est pas maintenable. On ne branche pas une plaque de cuisson directement à un domino de fils dénudés, on se donne d'abord les moyens de manipuler des choses entre qui nous permettrons de survivre. Quitte à apprendre à les réaliser soi-même ces choses. Pourquoi pas.

                      option 0: faire remonter cette initiative internationalle à ton université: https://groups.google.com/a/isocpp.org/d/msg/sg20/6Q9eNdrYWp0/Vkg4LLGBEAAJ
                      TL;DR, nous professionnels du développement attendons des débutants qui ont été formés aux bonnes pratiques contemporaines et non à des pratiques dangereuses que nous passons notre temps à nettoyer dans les codes des personnes qui n'ont pas suivi des formations adéquates.

                      Je suis sûr que ton université préférerait former des gens que nous voudrons recruter sans nous, industriels, nous poser de questions.

                      • Partager sur Facebook
                      • Partager sur Twitter
                      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                        29 janvier 2019 à 16:50:48

                        HoneyDule a écrit:

                        Je cherchais à réutiliser mon tableau de caractères m_nom et à y inclure, en emplacement 0, ce que contiendrait la variable nom (une fois qu'elle serait définie dans le main du coup). Je me doutais bien que la syntaxe n'était pas la bonne mais je ne vois pas trop comment faire ça, j'ai tenté beaucoup de trucs ^^'

                        Déjà, tu n'as visiblement pas compris que m_nom et m_prenom devaient être des données membres (attributs) de Personne.

                        Les données membres, ça se déclare au niveau des membres de la classe, pas à l'intérieur des fonctions.

                        class Personne {
                        
                           char m_nom[10];
                        
                           Personne() {
                             ...
                           }
                        };
                        

                        Un truc à tenter : bien lire les cours :-)


                        PS: Il n' s'agit certainement pas d'une filière dont le but serait de former des gens compétents en C++, ou en développement tout court. C'est pas en M2 (BAC+5) qu'on se met à commencer apprendre les bases de la programmation pour ce type de boulot

                        Probablement un simple enseignement d'initiation à la programmation, pour lequel C++ a été choisi comme outil par quelqu'un qui ne connaissait que ça, et encore.

                        -
                        Edité par michelbillaud 29 janvier 2019 à 17:00:58

                        • Partager sur Facebook
                        • Partager sur Twitter
                          29 janvier 2019 à 17:25:43

                          J'ai essayé de le poster comme cela, mais cela déformait la page du navigateur, j'ai donc préféré y inclure un lien...

                          Je cherchais à réutiliser mon tableau de caractères m_nom et à y inclure, en emplacement 0, ce que contiendrait la variable nom (une fois qu'elle serait définie dans le main du coup). Je me doutais bien que la syntaxe n'était pas la bonne mais je ne vois pas trop comment faire ça, j'ai tenté beaucoup de trucs ^^'


                          Emrak a écrit:

                          necros211 a écrit:

                          Oui, et le professeur fut remplacer l’année suivante.

                          C'est important de faire de l'auto-critique sur tous les cours.

                          C'est important d'accepter la critique, mais ce n'est pas pour autant répandu.

                          Sinon @HoneyDule :

                          char m_nom[0] = nom;

                          Comment comprends-tu cet extrait du code ?

                          Edit : D'ailleurs, pourrais-tu le poster conformément aux règles du forum ? (le bouton </>)

                          -
                          Edité par Emrak il y a moins de 30s



                          • Partager sur Facebook
                          • Partager sur Twitter
                            29 janvier 2019 à 17:31:55

                            La programmation, ça marche assez mal en "tentant de faire des trucs" au pif, sans avoir lu et compris le cours.

                            Déjà, retour au chapitre sur les tableaux, on ne peut pas en affecter un dans un autre

                            char a[10];
                            char b[10];
                            
                            a = b;    // non
                            

                            il fa donc falloir que tu fasses une boucle de copie, ou que tu fasses appel à une fonction qui fait ça.



                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 janvier 2019 à 17:41:29

                              lmghs a écrit:

                              J'entends la contrainte forte

                              option 1: faire les choses pseudo-correctement en dupliquant 50 fois ce qu'il est nécessaire de faire pour chaque champ de chaine. C'est ce que tu cherches à faire, et que je ne te conseille pas de faire.

                              option 2: décomposer pour mieux régner. Je sais, je détourne l'adage, mais cela reste un principe majeur en développement informatique -- et dans plein d'autres métiers. L'idée, tu n'as pas le droit de faire ce que nous attendons de toi en industrie (utiliser std::string), mais rien ne t'empêche à priori de te définir une classe chaine, qui gère donc une seule chaine à la fois. Pour le coup, cela a un intérêt pédagogique, mais le niveau est cependant avancé.

                              Fais à minima en sorte que ta chaine supporte:
                              - construction par copie
                              - affectation par copie
                              - destruction
                              - construction par défaut
                              - construction depuis un 'char const*'
                              - affichage et lecture via operator<< et operator>>
                              - la concaténation si vraiment tu t'embêtes, mais tu va pouvoir t'en passer dans un premier temps probablement.

                              et tu auras résolu simplement tous les problèmes qui pourraient se mettre en travers de ta route.

                              Comprendre avec cette "option": reinventer la roue pour des soucis pédagogiques, pourquoi pas. Mais on ne prend pas un problème complexe sans le décomposer en sous-problèmes simples. Ce n'est pas maintenable. On ne branche pas une plaque de cuisson directement à un domino de fils dénudés, on se donne d'abord les moyens de manipuler des choses entre qui nous permettrons de survivre. Quitte à apprendre à les réaliser soi-même ces choses. Pourquoi pas.

                              option 0: faire remonter cette initiative internationalle à ton université: https://groups.google.com/a/isocpp.org/d/msg/sg20/6Q9eNdrYWp0/Vkg4LLGBEAAJ
                              TL;DR, nous professionnels du développement attendons des débutants qui ont été formés aux bonnes pratiques contemporaines et non à des pratiques dangereuses que nous passons notre temps à nettoyer dans les codes des personnes qui n'ont pas suivi des formations adéquates.

                              Je suis sûr que ton université préférerait former des gens que nous voudrons recruter sans nous, industriels, nous poser de questions.


                              Je te remercie beaucoup de ta réponse, je vais tenter cette méthode alors. On va essayer de lui faire subtilement comprendre que son exercice est ridicule ^^

                              michelbillaud a écrit:

                              HoneyDule a écrit:

                              Je cherchais à réutiliser mon tableau de caractères m_nom et à y inclure, en emplacement 0, ce que contiendrait la variable nom (une fois qu'elle serait définie dans le main du coup). Je me doutais bien que la syntaxe n'était pas la bonne mais je ne vois pas trop comment faire ça, j'ai tenté beaucoup de trucs ^^'

                              Déjà, tu n'as visiblement pas compris que m_nom et m_prenom devaient être des données membres (attributs) de Personne.

                              Les données membres, ça se déclare au niveau des membres de la classe, pas à l'intérieur des fonctions.

                              class Personne {
                              
                                 char m_nom[10];
                              
                                 Personne() {
                                   ...
                                 }
                              };
                              

                              Un truc à tenter : bien lire les cours :-)


                              PS: Il n' s'agit certainement pas d'une filière dont le but serait de former des gens compétents en C++, ou en développement tout court. C'est pas en M2 (BAC+5) qu'on se met à commencer apprendre les bases de la programmation pour ce type de boulot

                              Probablement un simple enseignement d'initiation à la programmation, pour lequel C++ a été choisi comme outil par quelqu'un qui ne connaissait que ça, et encore.

                              -
                              Edité par michelbillaud il y a 24 minutes

                              J'ai compris le principe des variables membres, sur ma capture d'écran elles sont d'ailleurs déclarées dans le header, en private, comme dans le cours.  Ici, le but était de l"'initialiser" dans un constructeur surchargé avec une variable de type nom comme dans cette partie du cours :

                              //user.oc-static.com/upload/2019/01/29/15487803022257_Sans%20titre.png



                              Je suis peut-être mal placée pour faire la leçon (qui n'en est pas une, du coup, juste une remarque), mais je trouve ça triste qu'on utilise l'argument "bien lire le cours", sans même lire ce que j'ai écrit ou répondre à la question, alors que je n'arrête pas de dire que les syntaxes que j'ai employées sont "temporaires et eronnées" parce que je n'arrive pas à écrire ce dont j'ai besoin et que c'est exactement ce pour quoi je pose les questions...

                              Ah, et non, ce n'est pas un "cours d'initiation", oui, ce master forme des développeurs, et oui, en M1 on peut commencer un langage de programmation me semble-t-il, comme à tout âge.

                              C'est sûr en effet que je ne risque pas d'être ""formée de façon compétente au C++" si, lorsque j'ai des lacunes et que je cherche des réponses, en l'occurrence sur un site dont j'ai confiance en les méthodes, cela déclenche à chaque fois un débat (sauf Emrak et lmghs,  merci à vous du coup) sur les méthodes de ma prof plutôt qu'une réponse potentielle à un exercice pour me permettre de passer aux exercices suivants... (qui utilisent ces fichiers et que je ne peux donc pas sauter).

                              Bref, devant le "tolé" que semble déclencher ma prof, je vais juste marquer ce sujet comme résolu. Merci encore, lmghs pour ta bienveillante réponse :)



                              -
                              Edité par HoneyDule 29 janvier 2019 à 17:46:43

                              • Partager sur Facebook
                              • Partager sur Twitter
                                29 janvier 2019 à 17:44:40

                                Bah, moi j'attend juste ton code . . .
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Architecte logiciel - Software craftsmanship convaincu.

                                  29 janvier 2019 à 17:45:45

                                  C'est dommage de baisser les bras si vite @HoneyDule, car en soi tout le monde essaie de t'aider ici... (avec plus ou moins de tact, j'en conviens)

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    29 janvier 2019 à 17:50:53

                                    necros211 a écrit:

                                    Bah, moi j'attend juste ton code . . .


                                    Il est (toujours) à la fin de mon premier message en fait ^^'

                                    EDIT : Je viens de piger (oui j'suis un peu lente c'est aussi pour ça que je pose des questions) que tu voulais le code et pas seulement une capture d'écran ^^ Il est rajouté du coup

                                    Emrak a écrit:

                                    C'est dommage de baisser les bras si vite @HoneyDule, car en soi tout le monde essaie de t'aider ici... (avec plus ou moins de tact, j'en conviens)

                                    C'est très gentil, et je le remarque bien, mais je ne baisse pas les bras ! C'est juste que, quand on tourne depuis deux jours sur le même exercice tant qu'on se résigne à poster plutôt que chercher sur internet, et qu'on a en retours que des commentaires sur 'l'obsolescence, la façon de faire de la prof, ou d'autres trucs qui ne font absolument pas avancer le schmilblick, je trouve ça juste un peu triste... et mes nerfs arrivent un peu à leur terme ^^' Je suis désolée.

                                    -
                                    Edité par HoneyDule 29 janvier 2019 à 17:54:32

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      29 janvier 2019 à 18:20:34

                                      HoneyDule a écrit:

                                      michelbillaud a écrit:

                                      HoneyDule a écrit:

                                      Je cherchais à réutiliser mon tableau de caractères m_nom et à y inclure, en emplacement 0, ce que contiendrait la variable nom (une fois qu'elle serait définie dans le main du coup). Je me doutais bien que la syntaxe n'était pas la bonne mais je ne vois pas trop comment faire ça, j'ai tenté beaucoup de trucs ^^'

                                      Déjà, tu n'as visiblement pas compris que m_nom et m_prenom devaient être des données membres (attributs) de Personne.

                                      Les données membres, ça se déclare au niveau des membres de la classe, pas à l'intérieur des fonctions.

                                      class Personne {
                                      
                                         char m_nom[10];
                                      
                                         Personne() {
                                           ...
                                         }
                                      };
                                      

                                      Un truc à tenter : bien lire les cours :-)

                                      J'ai compris le principe des variables membres, sur ma capture d'écran elles sont d'ailleurs déclarées dans le header, en private, comme dans le cours.  Ici, le but était de l"'initialiser" dans un constructeur surchargé avec une variable de type nom comme dans cette partie du cours :

                                      Merci de lire avec attention. Ce que tu as fait, c'est _redéclarer_ , dans le constructeur, des variables locales portant le même nom que les variables membres.

                                      Comme dans :

                                      class Personne {
                                         char m_nom [10];             // variable membre
                                      
                                         Personne( ) {                // constructeur
                                            char m_nom[10] = ....;    // var. locale avec même nom
                                         ...
                                         }
                                      };

                                      C'est _une_ des causes de tes ennuis.

                                      Si il s'agissait de copier quelque chose dans la variable membre, ça serait plutot (horreur, strcpy en C++...)

                                      Personne::Personne() {
                                          strcpy(m_nom, "Hello");
                                          ...
                                      }
                                      



                                      -
                                      Edité par michelbillaud 29 janvier 2019 à 18:22:27

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        29 janvier 2019 à 18:32:18

                                        Dans ton constructeur : 

                                        Retire les char

                                        Retire le `[0]`

                                        C'est etrange que tu parle de master, car c'est niveau License L1.

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Architecte logiciel - Software craftsmanship convaincu.

                                        Constructeur surchargé & tableau de char

                                        × 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.
                                        • Editeur
                                        • Markdown