QCM : POO C++ et encapsulation — 24 questions

Questions et réponses du QCM

1. Que réalise principalement l’encapsulation dans une classe ?

Elle sépare les données des fonctions afin de faciliter leur remplacement
Elle transforme les données privées en paramètres accessibles à toute fonction
Elle regroupe plusieurs classes sans associer leurs données à leurs méthodes
Elle associe les données d’une structure au code qui les manipule

Elle associe les données d’une structure au code qui les manipule

Explication

L’encapsulation réunit les données d’une structure et les fonctions qui les manipulent au sein d’une classe. La séparation complète entre données et fonctions décrit une organisation opposée à ce principe.

2. Quelle distinction décrit correctement une classe et les données d’un objet ?

Une classe contient les données de chaque objet et l’objet fournit les méthodes correspondantes
Une classe regroupe uniquement des méthodes, tandis que les attributs sont créés par le constructeur
Une classe définit des attributs et des méthodes sans contenir les données propres à chaque objet
Une classe représente une donnée concrète, tandis que l’objet décrit les opérations applicables à cette donnée

Une classe définit des attributs et des méthodes sans contenir les données propres à chaque objet

Explication

Une classe déclare les attributs et les méthodes qui serviront de modèle aux objets, mais elle ne contient pas les données propres à une instance. L’objet concret est celui qui possède ces données.

3. Quel membre reste accessible dans une classe dérivée, mais pas lorsqu’il est déclaré private dans la classe de base ?

Un membre protected
Un membre package
Un membre public
Un membre local

Un membre protected

Explication

Un membre protected est accessible dans la classe qui le déclare et dans ses classes dérivées. Un membre private est limité à la classe elle-même, tandis que public est aussi accessible depuis l’extérieur.

4. Pourquoi utilise-t-on un contrôle d’accès non public pour une donnée d’objet ?

Pour empêcher sa modification directe et faire vérifier sa validité par une méthode publique
Pour rendre sa valeur visible à toutes les fonctions sans passer par une méthode
Pour supprimer la nécessité de définir des méthodes publiques dans la classe
Pour permettre aux classes dérivées de modifier chaque valeur sans contrôle supplémentaire

Pour empêcher sa modification directe et faire vérifier sa validité par une méthode publique

Explication

Un accès non public protège la donnée contre une écriture directe et permet à une méthode publique de contrôler la validité de la nouvelle valeur. Rendre la donnée accessible sans contrôle produirait l’effet inverse.

5. Quelle relation décrit correctement une classe et un objet ?

La classe est un modèle, tandis que l’objet est une instance concrète contenant ses données
La classe et l’objet sont deux noms pour une même structure sans différence conceptuelle
La classe représente une méthode, tandis que l’objet représente l’ensemble des paramètres associés
La classe est une instance contenant des données, tandis que l’objet est le modèle général

La classe est un modèle, tandis que l’objet est une instance concrète contenant ses données

Explication

Une classe définit le type ou le modèle, alors qu’un objet en est une réalisation concrète avec ses propres données. Confondre ces deux niveaux revient à prendre le modèle pour l’instance.

6. Quelle caractéristique définit un constructeur en C++ ?

Il porte le nom de la classe, retourne un objet et s’exécute après la destruction de celui-ci
Il porte le nom de la classe, reçoit obligatoirement un paramètre et retourne un pointeur
Il porte le nom de la classe, construit l’objet et ne possède pas de valeur de retour définie
Il porte un nom différent de la classe, initialise l’objet et retourne une valeur entière

Il porte le nom de la classe, construit l’objet et ne possède pas de valeur de retour définie

Explication

Le constructeur est une méthode particulière portant le nom de la classe, utilisée pour construire et initialiser l’objet sans valeur de retour définie. Une valeur de retour ou un nom différent correspondrait à une autre forme de fonction.

7. Dans quelle condition une classe peut-elle posséder plusieurs constructeurs ?

Lorsqu’ils sont tous déclarés avec une valeur de retour différente
Lorsqu’ils portent des noms de classes différents
Lorsqu’ils détruisent des objets appartenant à des classes différentes
Lorsque leurs listes de paramètres sont différentes

Lorsque leurs listes de paramètres sont différentes

Explication

Une classe peut définir plusieurs constructeurs grâce à des listes de paramètres différentes, ce qui permet de distinguer leurs appels. Changer une valeur de retour ne suffit pas à différencier des fonctions surchargées.

8. Quel est le rôle spécifique d’un constructeur de copie ?

Copier un objet existant à partir d’une référence vers un objet de la même classe
Initialiser un nouvel objet sans utiliser les données d’une autre instance
Accéder à l’objet courant lorsqu’un paramètre porte le même nom qu’un attribut
Détruire une instance en libérant sa mémoire et en fermant ses fichiers

Copier un objet existant à partir d’une référence vers un objet de la même classe

Explication

Le constructeur de copie reçoit une référence vers un objet de la même classe et sert à créer une copie de cet objet existant. L’initialisation indépendante relève plutôt d’un constructeur par défaut, tandis que la destruction relève du destructeur.

9. Quel opérateur permet d’accéder à un attribut ou à une méthode d’un objet ?

L’opérateur dièse, lorsque le membre est déclaré dans un fichier d’en-tête
L’opérateur point, lorsque le membre est accessible selon son statut
L’opérateur deux-points, lorsque le membre appartient à une classe dérivée
L’opérateur tilde, lorsque le membre doit être libéré avec l’objet

L’opérateur point, lorsque le membre est accessible selon son statut

Explication

L’opérateur point permet de sélectionner un attribut ou une méthode d’un objet, sous réserve que son statut d’accès l’autorise. Le tilde concerne la notation d’un destructeur et les autres opérateurs proposés ne remplissent pas ce rôle.

10. Quelle organisation correspond à une définition différée d’une classe ?

Les déclarations sont placées dans un fichier .h et les définitions dans un fichier .cpp
Les méthodes sont déclarées dans un fichier .cpp et leurs appels sont écrits dans un fichier .h
Les déclarations et les définitions sont regroupées dans un seul fichier pour chaque classe
Les données sont placées dans un fichier .cpp et les méthodes sont exécutées dans un fichier .h

Les déclarations sont placées dans un fichier .h et les définitions dans un fichier .cpp

Explication

La définition différée sépare les déclarations, généralement placées dans un fichier .h, des définitions écrites dans un fichier .cpp. Le regroupement des deux parties dans un seul fichier correspond à la définition immédiate.

11. Quel est le rôle principal d’un setter dans une classe ?

Partager une donnée unique entre toutes les instances
Appeler une méthode de classe sans créer d’objet
Lire une donnée masquée et la retourner à l’appelant
Modifier une donnée en vérifiant la validité de la nouvelle valeur

Modifier une donnée en vérifiant la validité de la nouvelle valeur

Explication

Un setter modifie une donnée tout en pouvant contrôler la validité de la valeur reçue. La lecture d’une donnée masquée relève plutôt du getter, qui n’effectue pas l’écriture.

12. Quelle opération un getter réalise-t-il dans une classe ?

Modifier une donnée après avoir vérifié sa nouvelle valeur
Lire et retourner une donnée qui n’est pas directement accessible
Créer une donnée commune à toutes les instances
Dessiner le contenu associé à un objet

Lire et retourner une donnée qui n’est pas directement accessible

Explication

Un getter permet de lire et de retourner une donnée masquée par la classe. La modification contrôlée d’une donnée correspond au rôle d’un setter.

13. Pour préserver la validité d’une donnée et contrôler son accès, quelle pratique faut-il adopter ?

Accéder directement à l’attribut lors des écritures et des lectures
Utiliser un getter pour chaque écriture et un setter pour la lecture
Utiliser une méthode static pour chaque modification de l’attribut
Utiliser un setter pour chaque écriture et un getter pour la lecture

Utiliser un setter pour chaque écriture et un getter pour la lecture

Explication

Le setter contrôle l’écriture et doit être utilisé lors de chaque modification afin de préserver la validité de la donnée, tandis que le getter contrôle sa lecture. Inverser ces rôles confond la validation des valeurs avec leur consultation.

14. Qu’est-ce qui caractérise un attribut static dans une classe ?

Il représente une méthode appelable sans définir d’objet particulier
Il vérifie la validité d’une nouvelle valeur avant son enregistrement
Il correspond à une donnée unique partagée par les objets de la classe
Il est copié séparément dans chaque objet créé à partir de la classe

Il correspond à une donnée unique partagée par les objets de la classe

Explication

Un attribut static est stocké comme une donnée commune et unique pour les objets d’une même classe. Un attribut propre à chaque instance, au contraire, possède une copie distincte dans chaque objet.

15. Dans la classe Fenetre, quels paramètres définissent la position et quels paramètres définissent la taille ?

lar et hau indiquent la position, tandis que x et y indiquent la taille
x et y indiquent la position, tandis que lar et hau indiquent la taille
y et hau indiquent la position, tandis que x et lar indiquent la taille
x et lar indiquent la position, tandis que y et hau indiquent la taille

x et y indiquent la position, tandis que lar et hau indiquent la taille

Explication

La fenêtre est positionnée par les coordonnées x et y de son coin supérieur gauche, alors que lar et hau décrivent ses dimensions. Confondre ces groupes revient à mélanger localisation et taille.

16. Quelle contrainte doit respecter la coordonnée x d’une fenêtre dans une console de 80 colonnes ?

Elle doit être comprise entre 1 et 80
Elle doit être comprise entre 0 et 79
Elle doit être comprise entre 1 et 79
Elle doit être comprise entre 0 et 25

Elle doit être comprise entre 0 et 79

Explication

Dans une console de 80 colonnes, x doit appartenir à l’intervalle allant de 0 à 79. Les valeurs 80 et les bornes liées aux 25 lignes ne respectent pas cette contrainte de colonne.

17. Quelle combinaison décrit correctement les responsabilités de la classe Fenetre ?

Le destructeur valide les paramètres, dessiner consulte les valeurs et les getters tracent le cadre
Les getters valident les paramètres, les setters les affichent, dessiner efface le cadre et le destructeur le trace
Dessiner valide les paramètres, les setters tracent le cadre et les getters effacent son contenu
Les setters valident les paramètres, les getters les affichent, dessiner trace le cadre et le destructeur l’efface

Les setters valident les paramètres, les getters les affichent, dessiner trace le cadre et le destructeur l’efface

Explication

La classe Fenetre s’appuie sur les setters pour valider les paramètres, sur les getters pour afficher ses informations, sur dessiner pour afficher le cadre et sur le destructeur pour l’effacer avec son contenu. Les getters consultent les valeurs, mais n’assurent pas leur validation.

18. Si Fenetre utilise Position dans une méthode, dans quel sens s’établit la dépendance ?

Fenetre dépend de Position, car elle utilise cette classe
Position dépend de Fenetre, car elle fournit les coordonnées utilisées
Aucune dépendance n’existe lorsqu’une classe est utilisée dans une méthode
Les deux classes dépendent l’une de l’autre dès qu’elles sont associées

Fenetre dépend de Position, car elle utilise cette classe

Explication

La dépendance va de la classe qui utilise vers la classe utilisée : Fenetre dépend donc de Position. Le simple fait que Position fournisse des informations à Fenetre ne crée pas une dépendance inverse.

19. Comment représente-t-on en UML une dépendance unidirectionnelle entre deux classes ?

Par un trait en pointillé sans flèche entre les deux classes
Par un trait en pointillé muni d’une flèche vers la classe utilisée
Par un trait plein muni d’une flèche vers la classe utilisatrice
Par un trait plein sans flèche reliant les deux classes

Par un trait en pointillé muni d’une flèche vers la classe utilisée

Explication

Une dépendance unidirectionnelle se représente par un trait en pointillé orienté vers la classe utilisée. Le trait plein correspond à une association, ce qui ne décrit pas cette notation de dépendance.

20. Quelle relation décrit le mieux la composition entre les classes Fenetre et Position ?

Position hérite des caractéristiques propres à Fenetre
Fenetre et Position échangent des données par valeur de retour
Fenetre utilise temporairement Position dans une méthode
Fenetre contient un objet Position comme attribut

Fenetre contient un objet Position comme attribut

Explication

La composition est une agrégation forte : un objet Fenetre contient un objet Position comme attribut. Une simple utilisation de Position dans une méthode correspond plutôt à une dépendance.

21. Lors de la construction d’une Fenetre, que permet une liste d’initialisation comme posHauGau(x,y)posHauGau(x, y) ?

Elle affecte une référence vers un objet Position existant
Elle appelle directement le constructeur surchargé de Position
Elle remplace Position par une classe dérivée temporaire
Elle reporte la construction de Position après celle de Fenetre

Elle appelle directement le constructeur surchargé de Position

Explication

La liste d’initialisation appelle directement le constructeur surchargé de Position avec les coordonnées fournies. Elle ne crée pas une simple référence et ne reporte pas la construction de l’attribut.

22. Comment une association permanente entre Fenetre et ListePersonnes est-elle généralement représentée en C++ ?

Par un objet ListePersonnes stocké comme attribut interne
Par un pointeur ou une référence vers ListePersonnes
Par une classe dérivée de ListePersonnes intégrée à Fenetre
Par une fonction statique qui recrée ListePersonnes à chaque appel

Par un pointeur ou une référence vers ListePersonnes

Explication

Une association établit un lien entre deux classes au moyen d’un pointeur ou d’une référence. Le stockage direct d’un objet comme attribut caractérise plutôt la composition.

23. Quelle opération instancie explicitement l’association entre une Fenetre et une ListePersonnes existante ?

Affecter à Fenetre l’adresse de la liste avec setPtrListePersonnes(&listepersonnes)
Appeler une méthode d’affichage avant de créer les deux objets
Construire automatiquement une nouvelle liste dans l’attribut de Fenetre
Déclarer ListePersonnes comme classe mère de Fenetre

Affecter à Fenetre l’adresse de la liste avec setPtrListePersonnes(&listepersonnes)

Explication

L’association doit relier explicitement les objets, par exemple en transmettant l’adresse de la liste à setPtrListePersonnes(&listepersonnes). À l’inverse, la composition construit automatiquement son objet contenu.

24. Que représente un objet de la classe Personne dans l’application de gestion des listes ?

Une liste pouvant contenir jusqu’à vingt personnes différentes
Une fenêtre possédant une position et une liste associée
Un pointeur reliant une fenêtre à une liste de personnes
Une personne identifiée par un nom et un identifiant numérique

Une personne identifiée par un nom et un identifiant numérique

Explication

La classe Personne modélise chaque personne au moyen de nomPersonne et d’un identifiant numérique idPersonne. Une liste, une fenêtre ou un pointeur décrivent d’autres éléments de l’application.

Révisez avec les flashcards

Mémorisez les réponses avec 43 flashcards sur POO C++ et encapsulation.

Qu'est-ce que l'encapsulation en programmation orientée objet ?

L'encapsulation fusionne données et fonctions dans une classe.

Que définit une classe en programmation orientée objet ?

Une classe définit des attributs et des méthodes sans contenir les données d'un objet.

Que signifie le statut public pour un membre d'une classe ?

Il rend le membre accessible depuis l'extérieur.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur POO C++ et encapsulation.

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