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

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. Les membres d’une classe peuvent être déclarés avec les classes auto, extern ou register.

A Vrai

B Faux

B
Les classes de stockage en C++ sont :

  • auto
  • register
  • static
  • extern
  • mutable
Les classes de stockage en C++
2. Lequel des opérateurs suivants ne peut pas être surchargé lorsque cette fonction est déclarée en tant qu’une fonction amie d’une classe?

A -=

B []

C ||

D ==

B
Les opérateurs suivant = () [] -> ne peut pas être surchargé lors de la déclaration de cette fonction en tant que fonction ami.

 

3. Lequel des opérateurs suivants peut être surchargé lorsque cette fonction est déclarée en tant qu’une fonction amie d’une classe?

A ()

B []

C ->

D |=

D
Les opérateurs suivant = () [] -> ne peut pas être surchargé lors de la déclaration de cette fonction en tant que fonction ami.

 

 
 

4. Quelle est la sortie du code suivant?
class A {
    int y;
};

class B {
    int x;
    A a;
public:
    operator A() { return a; }
    operator int() { return x; }
};

void myFunction ( int x )  { };
void myFunction ( A a ) { };

int main() {
    B b;
    myFunction(b);
    return 0;
}

A Le code fonctionne correctement.

B Le code génère une erreur.

C Le code n’affiche rien.

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

B
Deux opérateurs de conversion sont définis dans la classe B. Ainsi, les objets de la classe B peuvent être automatiquement convertis en int et A. Donc, l’appel de fonction myFunction(b) est ambigu puisqu’il existe deux fonctions, void myFunction(int) et void myFunction(A). Le compilateur n’a aucun moyen de décider quelle fonction appeler. Les opérateurs de conversion doivent être surchargés avec précaution car ils peuvent générer une ambiguïté.
 

 

5. Parmi les propositions suivantes, laquelle définit le mieux la syntaxe d’une fonction template?

A Template

B Template returnType FunctionName(Parameters)

C Les deux A et B sont vrais.

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

C
Template en C++ est un concept qui permet de passer le type de données en tant que paramètre afin que nous n’ayons pas besoin d’écrire le même code pour différents types de données. Par exemple, pour créer une fonction template qui renvoie le plus grand des deux objets, nous pourrions utiliser:

template <class myType>
myType getMax (myType a, myType b) {
 return (a > b ? a : b);
}

 

6. Quelle est la sortie du code suivant?
#include<iostream>
using namespace std;

class A
{
    int a;
public:
    void display() {  }
}; 

class B
{
    int b;
public:
    virtual void display() {  }
}; 

int main(void)
{
    cout << sizeof(A) << " ";
    cout << sizeof(B) << endl;
    return 0;
}

A 4 16

B 8 4

C 4 4

D 8 8

A
Il n’y a qu’une seule différence entre A et B. La fonction display() n’est pas virtuel dans A, mais elle est virtuel dans B. Lorsque nous rendons une fonction virtuelle, le compilateur ajoute un pointeur supplémentaire vptr aux objets de la classe. Le compilateur effectue cela pour obtenir un polymorphisme à l’exécution. Le pointeur vptr ajoute une taille supplémentaire sur l’objet.
 

 

7. Quelle est la sortie du code suivant?
#include<iostream>
using namespace std;
int main()
{
	int a = 10;
	int b ;
	b = a++;
	cout << b;  
	return 0;
}

A 10

B 11

C 9

D 0

A
La valeur de ‘a’ sera stockée dans b et après elle sera incrémentée.
 

 

 
 

8. Les pointeurs génériques peuvent être déclarés avec le mot-clé ______.

A auto

B asm

C void

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

C
Lorsqu’une variable est déclarée comme étant un pointeur sur un type void, elle est appelée un pointeur générique.

 

9. Quelle est la sortie du code suivant?
#include<iostream> 
using namespace std; 
class A 
{ 
  public: 
    virtual void afficher() = 0; 
}; 
  
class B : public A {  
   int val; 
}; 
  
int main(void) 
{ 
    B b; 
    return 0; 
}

A Le code retourne 0.

B Le code génère une erreur.

C Le code n’affiche rien.

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

B
Nous obtenons une erreur car nous ne pouvons pas créer des objets de classes abstraites. A est une classe abstraite car elle a une méthode virtuelle pure. La classe B devient également abstraite car elle est héritée de A et elle n’implémente pas la méthode afficher().
 

 

10. Lesquels des énoncés suivants sont vrais concernant les constructeurs?

A Une classe peut avoir plus d’un constructeur.

B Ils peuvent être hérités.

C Leur adresse peut être référée.

D Les constructeurs ne peuvent pas être déclarés dans la section « protected » d’une classe.

E Les constructeurs ne peuvent pas renvoyer de valeurs.

A, D, E

 

 
 

Laisser un commentaire

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