Partage
  • Partager sur Facebook
  • Partager sur Twitter

QCM C++ compréhension

    22 mars 2019 à 0:36:39

    Bonjour,

    j'essaye de comprendre quelques bases de C++ dans un QCM, et je me suis bloqué dans 2 questions

    Q1/ Déterminez quelle instanciation est correcte dans ce contexte : class A{A(const A&a); public : A(); protected: void* operator new(size_t objsize);};

    a)   A* a = new A();

    b)   A b = a;

    c)   A a;

    d)   A b(a);

    Q2/ Quel doit être le type de retour d'une surcharge de l'opérateur -> pour la classe A

    a) A&

    b) A*

    c)  A const*

    d) A* const

    je vous remercie.

    • Partager sur Facebook
    • Partager sur Twitter
      22 mars 2019 à 7:59:01

      Comme je sais pas si tu plaisantes ou si tu es sérieux, je précise : les 2 réponses sont fausses
      • Partager sur Facebook
      • Partager sur Twitter
        22 mars 2019 à 8:51:32

        Après réflexion, je pense que la première question, n'a aucune réponse correcte

        Pour la deuxième question, ton opérateur -> n'a pas assez de contexte pour donner une réponse

        -
        Edité par pseudo-simple 22 mars 2019 à 10:14:55

        • Partager sur Facebook
        • Partager sur Twitter
          22 mars 2019 à 10:24:49

          Salut,

          Tu n'arrives pas à trouver les bonnes réponses à ces questions, ou tu n'arrives pas à les comprendre ? Qu'est-ce qui te pose problème ?

          @YES,man balance pas de réponse au pif, et si, les questions sont claires, (y'a juste `A b = a` que je trouve pas top parce qu'on ne connait pas le type de a). Le contexte c'est une surcharge d'opérateur, ça a une syntaxe particulière.

          -
          Edité par romantik 22 mars 2019 à 10:44:48

          • Partager sur Facebook
          • Partager sur Twitter
          Dream on, Dream on, Dream until your dream comes true
            22 mars 2019 à 10:45:33

            J'arrive à comprendre les questions, mais j'ai pas pu arriver à des réponses que je trouve correctes
            • Partager sur Facebook
            • Partager sur Twitter
              22 mars 2019 à 10:55:39

              J'ai testé la première question avec mon compilateur Clang et les 4 réponses sont refusées

              Donc, pour la première question, je considère que les 4 réponses sont fausses, puisque Clang refuse tout, surtout que le constructeur par copie est private, pas public et que ton opérateur new est protected, pas public.

              Pour la deuxième question, j'aurais dit A*  à priori (ce n'est pas au pif).

              -
              Edité par pseudo-simple 22 mars 2019 à 10:56:27

              • Partager sur Facebook
              • Partager sur Twitter
                22 mars 2019 à 11:32:04

                Pour la première question, pose toi d'abord ces questions et tu auras la réponse :

                - Quel est l'accessibilité par défaut des membres d'un objet défini avec le mot clé class?

                - Quel constructeur de A tente d'appeler chacune de tes expressions?

                - Lequel de ces constructeurs est accessible?

                Je précise tout de même qu'une des réponses à la première question est correcte.

                • Partager sur Facebook
                • Partager sur Twitter
                  22 mars 2019 à 11:34:40

                  Tu dois pouvoir apporter des justifications à tes réponses ... sinon oui, c'est du pif

                  Et il semblerait que tu ne saches pas recopier du code, parce qu'il y a bien une bonne réponse dans la première question.

                  EDIT :

                  J'avais donné les réponses, mais vaut peut-être mieux laisser chercher encore un peu :s

                  -
                  Edité par romantik 22 mars 2019 à 11:36:22

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Dream on, Dream on, Dream until your dream comes true
                    22 mars 2019 à 11:39:15

                    @YES, man j'ai testé aussi et je trouve aucune réponse juste pour les deux questions.

                    je rencontre aussi des difficultés à répondre à ces deux questions :

                    Q24 :  Quelle est la visibilité des membres de B hérités de A ?

                    class B : protected A{};

                    a)Les membres de B hérités de A gardent leur visibilités

                    b)Les membres publics de A dérivés dans B deviennent protégés.

                    c)Tous les membres de B hérités de A deviennent protégés.

                    d)Les membres de B hérités de A n’acquièrent une visibilité protégés que s'ils la possédaient.

                    Q27 : Quelle instruction peut être ajoutée au gestionnaire d'exception de la fonction afunc?

                    #include<iostream>

                    const char spc = ' ';
                    using namespace std;

                    void afunc(const char* s) try
                    {
                        int y = 2;
                        throw 1;
                    }

                    catch(int e)
                    {
                    }

                    int main()
                    {
                        afunc("test");
                        return 0;
                    }

                    a) cerr<<s <<spc<<y<<spc<<e<<endl;

                    b) cerr<<s <<spc<<e<<endl;

                    c) cerr<<y<<spc<<v e<<endl;

                    d) Toutes ces instructions peuvent être ajoutées.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 mars 2019 à 11:46:08

                      @Truthseeker

                      En effet, en corrigeant un peu le code et en l'adaptant, je peux dire que  pour la

                      question 1, c) est correcte car ton constructeur par copie est private et l'opérateur new est acessible uniquement aux classes dérivées (par protected)

                      question 2, b) est correcte si tu ajoutes du code qui définit ta classe A, car quand j'avais étudié la surcharge de l'opérateur, on nous apprenait que la surcharge renvoie un pointeur, donc c'est A*, mais tu dois ajouter du code.

                      Il serait intéressant d'avoir une explication.

                      J'espère t'avoir aidé

                      -
                      Edité par pseudo-simple 22 mars 2019 à 11:54:33

                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 mars 2019 à 11:57:53

                        Alors là je suis perturbé Oo

                        Parce que la Q2 a plusieurs bonnes réponses ... donc je pensais qu'on pouvait concher plusieurs réponses ... auquel cas la réponse d) de la Q27 n'a aucun sens

                        Sinon @Truthseeker2, tu n'as pas essayé de répondre aux questions de SpaceIn, elles t'aideront bien :D

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Dream on, Dream on, Dream until your dream comes true
                          22 mars 2019 à 12:23:16

                          Effectivement, la question 2 est sujette à interprétation.

                          -
                          Edité par pseudo-simple 22 mars 2019 à 12:41:59

                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 mars 2019 à 15:31:16

                            Q2 n'a en fait qu'une seule bonne réponse.

                            The overload of operator -> must either return a raw
                            pointer, or return an object (by reference or by value) 
                            for which operator -> is in turn overloaded.
                            

                            Comme tous les choix proposés utilise la classe A, il ne peut pas s'agir d'une référence. (EDIT: apres reflexion, meme pas sur d'avoir raison ici. Techiquement, A a un operateur -> redefinie donc est valide. Donc A& peut etre une reponse acceptable)

                            Mais honnêtement, s'il faut lire la doc pour savoir répondre a un QCM, c'est un peu moisi.

                            Par défaut : toujours retourner un A*.

                            C'est des questions assez moisies...

                            Q1 -> règle des big 5 non respectée

                            Q2 -> osef, on utilise toujours la même signature

                            Q24 -> un héritage protected ? C'est quoi ce truc ?

                            Q27 -> un try-catch de fonction ? C'est quoi ce truc ? (Meme si la question porte en fait sur la portée des variables)

                            A part la question 1, les autres abordent des sujets complètement oubliables en pratique. La Q2 est une syntaxe possible, mais qu'on utilise rarement, donc on vérifiera toujours la syntaxe avant de redéfinir l'opérateur ->. Les 2 dernières (heritage protected, try-catch sur une fonction et pas un constructeur) n'ont pas d'utilisation valides a ma connaissance.

                            -
                            Edité par gbdivers 22 mars 2019 à 15:40:25

                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 mars 2019 à 15:55:02

                              Dans la Q2, je ne vois pas en quoi les const modifiers sont interdit, renvoyer un A* const ne change absolument rien puisqu'il est juste utilisé pour rappeler -> dessus donc il ne va pas être modifié, et const A * c'est également un raw pointer, même s'il ne me paraît pas souhaitable parce qu'on va être très surpris lors de l'utilisation ça ne me paraît pas illégal !

                              La référence ne me paraît pas illégale non plus mais c'est pour moi la seule réponse qui peut-être considéré vraiment comme fausse car elle se rappelle en boucle, donc deadlock.

                              Euh je suis assez d'accord que les questions sont moisies par rapport à la pratique, mais les notions de portée, visibilité et accessibilité sont essentielle à mon sens.

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Dream on, Dream on, Dream until your dream comes true
                                22 mars 2019 à 16:24:26

                                Tu as tout a fait raison pour les const. C'est tordu, mais c'est (probablement) effectivement légal.

                                Bien sur que les notions de portée, visibilité et accessibilité sont fondamentale. Mais les mettre au milieu de notions inutiles, c'est discutable d'un point de vue pédagogique. Ca apporte de la confusion et ca n'apporte rien en termes de connaissances ou d'évaluation des connaissances.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 mars 2019 à 9:21:02

                                  Clairement,

                                  La surcharge de new, c'est quand même pas le truc qu'on fait tous les jours (j'ai du y avoir recours une fois ou deux en 25 ans...), la surcharge de -> pareil, c'est pas tous les jours qu'on implémente un pointeur intelligent, quant à l'héritage protected, je n'ai jamais vu le moindre cas d'usage. Je dirais, que pédagogiquement c'est très contre-productif, on noie les notions fondamentales de portée et d'accessibilité sous des trucs, qui sont compliqués, et franchement accessoires, voire carrément inutiles (l'héritage protected). On voudrait induire des erreurs, on ne s'y prendrait pas autrement...

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug

                                  QCM C++ compréhension

                                  × 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