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

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. À quoi sert les constructeurs?

A Initialiser les objets

B Construire les membres de données

C À la fois initialiser les objets et construire les données membres

D Supprimer les objets

A
Une fois que l’objet est déclaré, le constructeur est également déclaré par défaut.

 

2. Lorsque « struct » est utilisé à la place du mot-clé « class », est ce que quelque chose va changer dans le programme?

A L’accès est public par défaut

B L’accès est privé par défaut

C L’accès est protégé par défaut

D L’accès est refusé

A
Pour les structures, par défaut, tous les membres(données et fonctions) sont publics.

 

3. Quel constructeur de classe est appelé dans le code C++ suivant?
#include<iostream> 
  
using namespace std; 

class A { 
 public: 
     A() 
     { cout << " Le constructeur de la classe A est appelé." << endl;  } 
}; 
  
class B { 
 public: 
     B() 
     { cout << " Le constructeur de la classe B est appelé." << endl;  } 
}; 
  
class C: public A, public B { 
   public: 
     C() 
     {  cout << " Le constructeur de la classe C est appelé." << endl;  } 
}; 
  
int main() 
{ 
   C c; 
   return 0; 
}

A Classe C

B Classe A et B

C Classe A, B et C

D Erreur de compilation.

C
En cas d’héritage multiple, les les constructeurs de classes mère sont toujours appelés dans l’ordre de l’héritage de gauche à droite et les destructeurs sont appelés dans l’ordre inverse.
 

 

 
 

4. Supposons que la taille d’un entier est 4 octets, quelle est la sortie du code suivant?
#include<iostream> 

using namespace std; 
  
class A { 
    int tab[10];      
}; 
  
class B: public A { }; 
  
class C: public A { }; 
  
class D: public B, public C {}; 
  
int main(void) 
{  
  cout << sizeof(D); 
  return 0; 
}

A 4

B 40

C 80

D 160

C
Puisque B et C héritent de la classe mère A, deux copies de la classe mère sont présentes dans la classe D, donc 2*(4*10)=80 octets
 

 

5. Quelle est la sortie du code suivant?
#include<iostream> 
using namespace std; 
 
class A {
 private: 
    int val; 	
 public: 
    A(int v = 0) : val(v) {} 
    void display() { cout << "val = " << val << endl;} 
}; 
 
class B { 
 private: 
    int val; 
 public: 
    B(int v) : val(v) {} 
    operator A() const { return A(val); } 
}; 
 
void f(A a) 
{  a.display(); } 
 
int main() { 
  B b(5); 
  f(b); 
  f(55); 
  return 0; 
}

A val = 5 et val = 5

B val = 5 et val = 55

C val = 5

D val = 55

B
Puisqu’il existe un constructeur de conversion dans la classe A, une valeur entière peut être affectée aux objets de la classe A et l’appel de fonction f(55) fonctionne correctement. En plus, il y a un opérateur de conversion surchargé dans la classe B, nous pouvons donc appeler f() avec des objets de classe B.
 

 

6. Comment les objets sont auto-référencés dans une fonction membre de classe?

A Utiliser * avec le nom de cet objet

B Utilisation le mot-clé « object »

C Utiliser le pointeur « this »

D En passant « self » comme paramètre dans la fonction membre

C
Dans les classes, les objets sont auto-référencés à l’aide du pointeur « this » à l’intérieur des fonctions membres. par exemple this->val pour accéder au membre de données de l’objet courant.

 

 
 

7. Que signifie un membre mutable d’une classe?

A Un membre qui ne peut jamais être modifié

B Un membre qui ne peut être modifié que s’il n’est pas membre d’un objet constant

C Un membre qui peut être modifié même s’il est membre d’un objet constant

D Un membre qui est global dans toute la classe

C
Les membres mutables sont ceux qui peuvent être modifié même s’il est membre d’un objet constant. Vous pouvez modifier leur valeur même à partir d’une fonction membre constante de cette classe.

 

8. Quelle est la sortie du code suivant?
#include<iostream>

using namespace std;

class A {
public:
   void show()
   { cout <<" show du classe A"; }
};

class B : public A {
public:
   void show()
   { cout <<" show du classe B"; }
};

class C: public B {
}; 
  
int main(void)
{ 
  C c; 
  c.show(); 
  return 0; 
}

A « show du classe A »

B « show du classe B »

C Les deux A et B sont vrais.

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

B
La fonction show n’est pas définie dans la classe C. Elle est donc recherchée dans la hiérarchie des héritages. show() est présent dans les deux classes A et B, lequel doit être appelé? L’idée est la suivante: s’il y a un héritage à plusieurs niveaux, la fonction est ensuite recherchée linéairement dans la hiérarchie de l’héritage jusqu’à ce qu’une fonction correspondante soit trouvée.
 

 

9. Choisissez la bonne déclaration.

A Les macros et les fonctions inline sont la même chose.

B Les macros ressemblent à des appels de fonction mais ne le sont pas.

C Les fonctions inline ressemblent à des fonctions mais ne le sont pas.

D Les fonctions inline sont toujours grandes.

B
Les macros dans C++ ressemblent à des appels de fonction mais ne sont en réalité pas des appels de fonction.

 

10. Quelle est la sortie du code C++ suivant?
#include <iostream> 
using namespace std; 
class A 
{ 
	int s; 
   public: 
	#define ABC(A::s)
};
 
int main(int argc, char const *argv[])
{
	cout << "Welcome to WayToLearnX!";
	return 0;
}

A Welcome to WayToLearnX!

B Erreur de compilation

C Segmentation Fault

D Aucune sortie.

B
Les macros ne peuvent pas accéder au membre privé d’une classe donc #define ABC (A::s) affichera une erreur.
 

 

 
 
Partagez cet article

Laisser un commentaire

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