QCM : Maîtrise de la programmation orientée objet en C++ — 10 questions

Questions et réponses du QCM

1. Qu'est-ce que la généricité en C++ ?

La vérification des types lors de l'exécution pour garantir la compatibilité
L'utilisation de bibliothèques standard pour la manipulation de différents types
La réutilisation de code par héritage et polymorphisme dynamique
La capacité à écrire du code indépendant des types spécifiques, notamment grâce aux templates

La capacité à écrire du code indépendant des types spécifiques, notamment grâce aux templates

Explication

La généricité en C++ permet d'écrire du code qui fonctionne avec différents types sans duplication, principalement grâce aux templates, qui sont une forme de programmation générique à la compilation.

2. Qui a écrit 'The C++ Programming Language', une référence sur le langage C++ ?

Andrei Alexandrescu
Scott Meyers
Herb Sutter
Bjarne Stroustrup

Bjarne Stroustrup

Explication

Bjarne Stroustrup est l'auteur de 'The C++ Programming Language', une référence fondamentale pour comprendre le langage C++. Scott Meyers, Herb Sutter et Andrei Alexandrescu sont également des experts en C++, mais ils n'ont pas écrit cette œuvre spécifique.

3. Quel est le rôle principal des fonctions membres virtuelles en C++ dans le contexte du polymorphisme ?

Gérer la mémoire de manière automatique lors de l'allocation d'objets
Optimiser la compilation du code en évitant la surcharge
Faciliter la conversion entre différents types d'objets dans une hiérarchie
Permettre la redéfinition dans les classes dérivées pour un comportement spécifique

Permettre la redéfinition dans les classes dérivées pour un comportement spécifique

Explication

Les fonctions membres virtuelles en C++ permettent la redéfinition dans les classes dérivées et assurent la liaison dynamique, ce qui est essentiel pour le polymorphisme. Elles permettent d'appeler la version spécifique d'une fonction selon le type réel de l'objet lors de l'exécution.

4. Quand la propriété selon laquelle une référence constante liée à un temporaire prolonge la durée de vie de celui-ci a-t-elle été officiellement établie dans la norme C++ ?

Dans la norme C++03
Dans la norme C++11
Dans la norme C++98
Dans la norme C++17

Dans la norme C++11

Explication

La propriété selon laquelle une référence constante liée à un temporaire prolonge la durée de vie de celui-ci a été formellement introduite et clarifiée dans la norme C++11, notamment pour la gestion des xvalues et des temporaires. Avant cette norme, cette propriété était implicite ou moins clairement spécifiée. La norme C++11 a permis une meilleure compréhension et utilisation de cette règle, ce qui est une étape importante dans l'évolution de la gestion des temporaires et des références en C++.

5. Quelle est la différence principale entre la généricité en C++ et en Java ?

En C++, la généricité repose sur les templates, qui sont traités à la compilation, tandis qu'en Java, elle est basée sur la vérification à l'exécution avec des types paramétrés.
En C++, la généricité est réalisée par l'héritage multiple, alors qu'en Java, elle utilise uniquement des interfaces.
En C++, la généricité est limitée aux classes, alors qu'en Java, elle peut aussi s'appliquer aux méthodes.
En C++, la généricité permet la surcharge des fonctions, alors qu'en Java, elle ne le permet pas.

En C++, la généricité repose sur les templates, qui sont traités à la compilation, tandis qu'en Java, elle est basée sur la vérification à l'exécution avec des types paramétrés.

Explication

La différence majeure est que C++ utilise les templates pour la généricité, qui sont traités lors de la compilation, offrant une généricité statique, alors que Java utilise la vérification à l'exécution avec des types paramétrés, ce qui constitue une généricité dynamique. Les autres options confondent ou mélangent des concepts qui ne sont pas directement liés à la mécanistique de la généricité.

6. Qui a formulé ou introduit le concept de templates en C++ ?

Scott Meyers
Bjarne Stroustrup
Herbert Schildt
Andrei Alexandrescu

Bjarne Stroustrup

Explication

Bjarne Stroustrup, créateur de C++, est crédité d’avoir introduit et formalisé le mécanisme de templates dans le langage, permettant la programmation générique à la compilation.

7. Quelle est la cause principale des ambiguïtés rencontrées lors de l'héritage multiple en C++ ?

Le fait que les classes de base soient déclarées avec des modes d'héritage différents
L'utilisation de membres privés dans les classes de base
La présence de membres ou méthodes identiques dans plusieurs classes de base
L'absence de gestion explicite des constructeurs dans les classes de base

La présence de membres ou méthodes identiques dans plusieurs classes de base

Explication

Les ambiguïtés dans l'héritage multiple proviennent principalement de la présence de membres ou méthodes avec le même nom dans plusieurs classes de base, ce qui peut conduire à des conflits. L'héritage virtuel est une technique utilisée pour résoudre ces ambiguïtés en garantissant qu'une seule instance partagée de la classe de base est utilisée dans la hiérarchie.

8. Comment appliquer efficacement l'héritage multiple en C++ pour éviter les ambiguïtés lors de l'héritage de plusieurs classes de base possédant des membres communs ?

En déclarant la classe dérivée sans spécifier le mode d'héritage, car c'est implicite.
En déclarant la classe dérivée en utilisant l'héritage virtuel pour chaque classe de base concernée.
En utilisant l'héritage privé pour toutes les classes de base.
En évitant d'utiliser l'héritage multiple et en préférant la composition.

En déclarant la classe dérivée en utilisant l'héritage virtuel pour chaque classe de base concernée.

Explication

L'héritage virtuel est la technique recommandée en C++ pour résoudre le problème d'ambiguïtés dans l'héritage multiple, en assurant qu'une seule instance de la classe de base partagée est utilisée. La déclaration avec `virtual` dans la classe de base permet d'éviter la duplication des membres et les ambiguïtés.

9. Quelles sont les caractéristiques principales de l'upcast et du downcast en C++ ?

L'upcast est une opération qui nécessite toujours une vérification avec 'dynamic_cast', alors que le downcast est implicite et sûr.
L'upcast est une opération risquée qui doit toujours être vérifiée avec 'dynamic_cast', tandis que le downcast est implicite et généralement sans risque.
L'upcast et le downcast sont tous deux implicites et toujours sûrs, permettant de convertir n'importe quel pointeur dans une hiérarchie d'héritage.
L'upcast est une conversion implicite vers une classe de base, généralement sûre, tandis que le downcast est risqué et nécessite une vérification de type.

L'upcast est une conversion implicite vers une classe de base, généralement sûre, tandis que le downcast est risqué et nécessite une vérification de type.

Explication

L'upcast consiste à convertir un pointeur ou référence d'une classe dérivée vers une classe de base, généralement implicite et sûre, permettant de traiter un objet dérivé comme un objet de la classe de base. Le downcast, en revanche, consiste à convertir un pointeur ou référence d'une classe de base vers une classe dérivée, ce qui est risqué et doit être vérifié à l'exécution avec 'dynamic_cast' pour assurer la sécurité.

10. Qu'est-ce que la visibilité membres en C++ ?

Le niveau d’accès d’un membre d’une classe, déterminé par public, protected ou private
La capacité à accéder aux membres d’une classe depuis l’extérieur, indépendamment de leur déclaration
Le mécanisme permettant de rendre tous les membres d’une classe accessibles dans toute l’application
La visibilité des membres correspond à leur position physique dans le fichier source

Le niveau d’accès d’un membre d’une classe, déterminé par public, protected ou private

Explication

La visibilité membres en C++ désigne le niveau d’accès d’un membre d’une classe, qui peut être public, protected ou private, et détermine où et comment ce membre peut être accessible dans le code.

Révisez avec les flashcards

Mémorisez les réponses avec 20 flashcards sur Maîtrise de la programmation orientée objet en C++.

Généricité en C++ — définition ?

Utilisation de templates pour code indépendant du type.

Héritage en C++ — rôle ?

Réutiliser et spécialiser des classes.

Polymorphisme C++ — mécanisme ?

Appel dynamique de fonctions virtuelles.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Maîtrise de la programmation orientée objet en C++.

Voir la fiche →

Cours similaires

Crée tes propres QCM

Importe ton cours et l'IA génère des QCM avec corrections en 30 secondes.

Générateur de QCM