QCM sur la programmation orientée objet en C++ – Partie 4

QCM sur C++ avec des réponses pour la préparation des concours, des tests en ligne, examens et aux certifications. Ces questions et réponses sur C++ comprennent divers sujets. Et sont tirés d’un vrai concours écrit. Cette méthode d’apprentissage systématique préparera facilement toute personne pour réussir son test sur C++.
 
 

1. Choisissez une autre définition pour les objets.

A Membre de la classe

B Associé de la classe

C Attribut de la classe

D Instance de la classe

D
Un objet représente une instance d’une classe, c’est-à-dire une variable de ce type de classe ayant accès à ses membres de données et à ses fonctions membres de l’extérieur si elle est autorisée.

 

2. Combien d’objets peuvent être présents dans une même classe ?

A 1

B 2

C 3

D Autant que possible

D
Une classe peut contenir un nombre quelconque d’objets en fonction de sa conformité.

 

3. Quelle est la sortie du programme C++ suivant?
#include<iostream>
using namespace std;

class Point {
private:
    int x;
    int y;
public:
    Point(int a = 0, int b = 0);    // Constructeur Normal 
   Point(const Point &p); // Constructeur de Copier
}; 

Point::Point(int a, int b)  {
    x = a;
    y = b;
    cout << "Constructeur normal appelé\n";
}

Point::Point(const Point &p) {
   x = p.x;
   y = p.y;
   cout << "Constructeur de copier appelé\n";
}

int main()
{
   Point *p1, *p2;
   p1 = new Point(5, 10);
   p2 = new Point(*p1);
   Point p3 = *p1;
   Point p4;
   p4 = p3;
   return 0;
}

A

Constructeur normal est appelé
Constructeur de copier est appelé
Constructeur de copier est appelé
Constructeur normal est appelé

B

Constructeur normal est appelé
Constructeur normal est appelé
Constructeur normal est appelé
Constructeur de copier est appelé
Constructeur de copier est appelé
Constructeur normal est appelé

C

Constructeur de copier est appelé
Constructeur normal est appelé
Constructeur de copier est appelé
Constructeur de copier est appelé
Constructeur normal est appelé

D Aucune de ces réponses n’est vraie.

A
Voir les commentaires suivants pour plus de détails:

Point *p1, *p2;   // Aucun appel de constructeur
p1 = new Point(5, 10);  // Constructeur normal est appelé
p2 = new Point(*p1);   // Constructeur de copier est appelé
Point p3 = *p1;  // Constructeur de copier est appelé
Point p4;   // Constructeur normal est appelé
p4 = p3;   // Appel l'opérateur d'affectation

La sortie du programme ci-dessus :

 

 
 

4. La réutilisation du code peut être atteint dans un programmes C++ à l’aide de ______.

A Polymorphisme

B Encapsulation

C Héritage

D Les deux A et C sont vrais.

C
L’héritage est un processus de définition d’une nouvelle classe basée sur une classe existante en héritant ses membres et méthodes communs. L’héritage nous permet de réutiliser du code, cela améliore la réutilisabilité dans votre code C++.

 

5. Quel caractère est utilisé pour marquer la fin d’une classe?

A :

B ;

C #

D ,

B
Comme à la fin d’une instruction, une classe se termine également par un point-virgule (;).

 

6. Quelle est la sortie du programme C++ suivant?
#include<iostream> 
using namespace std; 
  
class MaClasse { 
    int val; 
public: 
    MaClasse(int v); 
}; 
  
MaClasse::MaClasse(int v) { 
    val = v; 
    cout << "Constructeur appelé\n";
} 
  
int main() { 
    MaClasse tab[100]; 
    return 0; 
}

A Affiche « Constructeur appelé »

B N’affiche rien

C Erreur de compilation

D Aucune de ces réponses n’est vraie.

C
La classe MaClasse a un constructeur défini par l’utilisateur “MaClasse (int v)” qui attend un argument. Il n’a pas de constructeur sans argument car le compilateur ne crée pas le constructeur par défaut si l’utilisateur a déjà définit un constructeur, donc le programme affichera une erreur.
 

 

7. Lesquels des instructions suivants est/sont valables pour allouer de la mémoire dynamiquement pour un entier en C++?

A int *ptr = new int(100);

B int *ptr; ptr=new int; *ptr=100;

C int *ptr=NULL; ptr=new int; *ptr=100;

D Tout les réponses sont vrais

D

 

 
 

8. Les variables statiques dans une classe sont initialisées _____.

A lorsque chaque objet de la classe est créé.

B lorsque le dernier objet de la classe est créé.

C lorsque le premier objet de la classe est créé.

D lors de la compilation.

E Pas besoin d’initialiser une variable statique.

D
Les variables statiques dans une classe sont initialisées lors de la compilation. Exemple:

class Person {
 public:
   Person() {
     .....
     .....
    }    
};

void myFunction() {
    static Person p;
}

Lorsque le compilateur compile l’instruction static Person p;, il fait 2 choses. La première est l’allocation de mémoire pour l’objet ‘p’. La deuxième est l’initialisation de l’objet en appelant le constructeur.

 

9. Pour effectuer des opérations d’E/S sur fichier, vous devez utiliser le fichier d’en-tête __________.

A <ifstream>

B <ofstream>

C <fstream>

D Aucune de ces réponses n’est vraie.

C
Pour effectuer des traitements sur des fichiers en C++, les fichiers d’en-tête <iostream> et <fstream> doivent être inclus dans votre fichier source C++.

 

10. Quelle est la sortie du programme C++ suivant?
#include<iostream> 
using namespace std;
int &f() {
  static int x = 10;
  return x;
}

int main() {
  int &y = f();
  y = y +5;
  cout << f();
  return 0;
}

A 10

B 5

C 15

D Erreur de compilation

C
Le programme fonctionne correctement car ‘x’ est statique. Puisque ‘x’ est une variable statique, son emplacement en mémoire reste valide même après le retour de f(). Ainsi, on peut retourner une référence d’une variable statique.
 

 

 
 

2 réflexions sur “QCM sur la programmation orientée objet en C++ – Partie 4

  • juin 18, 2022 à 3:50 pm
    Permalien

    Question 8 : la réponse est fausse.
    En effet, les membres static d’une classe sont initialisés à 0, même si aucun objet, aucune instanciation de la classe n’est créée. Ils sont initialisés à l’exécution du programme. Ainsi le code :

    #include 
    using namespace std;
    class A
    {
       public:
         static int val;
    };
    int A::val;
    int main()
    {
       cout << A::val << '\n';
       return 0;
    }

    Affichera "0" car A::val a été initialisée à 0 par la déclaration "int A::val;", alors qu'aucun objet de la classe A n'a été créé. Il n'y a aucune instance de A dans ce programme.

    Répondre
    • juin 19, 2022 à 12:12 am
      Permalien

      Merci pour cette remarque 🙂

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *