Vous êtes sur la page 1sur 15

1.Quelle est la sortie du code C++ suivant?

#include <iostream>
using namespace std;
int main()
{int tab[] = {1, 2, 3, 4, 5};
int *ptr = (tab + 1);
cout << *tab + 2;
return 0;}
A1
B2
C3
D4

8. Lequel est une déclaration de classe valide?


A public classe A {}
B classe A {}
C classe A {int x;};
D object A {int x;};

Lors de l’héritage de classe en C++, si le mode de visibilité n’est pas fourni, le mode
de visibilité par défaut est ___________.
A public
B protected
C private
D friend

Combien de destructeurs sont autorisés dans une classe?


A1
B2
C3
D Un nombre quelconque.

Choisissez l’expression correct.


A Nous ne pouvons pas créer une instance d’une classe abstraite
B On peut créer une instance d’une classe abstraite
C On peut créer une instance d’une super classe abstraite
D Aucune de ces réponses n’est vraie.

L’héritage d’une classe fille de la classe mère est indiquée par le symbole ____.
A|
B ::
C:
D;

Quelle est la syntaxe correcte pour accéder à un membre statique d’une classe?
class A
{
public:
static int val;
}
A A->val
B A.val
C A::val
D A^val

Supposons que les entiers prennent 4 octets, quelle est la sortie du code suivant?
#include<iostream>
using namespace std;
class MaClasse
{ static int a;
int b;
};

int MaClasse::a;

int main()
{
cout << sizeof(MaClasse);
return 0;
}
A4
B8
C 16
D Aucune de ces réponses n’est vraie.

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.
Réponse

1. Qu'est-ce que la surcharge d'opérateur en C++ ?


a) Le fait d'utiliser plusieurs opérateurs pour accomplir la même tâche.
b) Le fait de redéfinir un opérateur existant pour effectuer une tâche différente.
c) Le fait de créer de nouveaux opérateurs pour effectuer des tâches spécifiques.
d) Le fait de combiner plusieurs opérateurs pour effectuer une tâche complexe.

Réponse : b) Le fait de redéfinir un opérateur existant pour effectuer une tâche


différente.

2. Quelle est la différence entre une référence et un pointeur en C++ ?


a) Les références ne peuvent pas être modifiées une fois qu'elles ont été initialisées,
contrairement aux pointeurs.
b) Les références sont des alias pour les variables existantes, tandis que les pointeurs
contiennent des adresses de mémoire.
c) Les références peuvent être NULL, tandis que les pointeurs ne peuvent pas l'être.
d) Les références peuvent être utilisées pour créer des tableaux dynamiques, tandis
que les pointeurs ne le peuvent pas.

Réponse : b) Les références sont des alias pour les variables existantes, tandis que les
pointeurs contiennent des adresses de mémoire.

3. Que signifie le mot-clé "virtual" dans une classe de base en C++ ?


a) Il indique que la classe ne peut pas être dérivée.
b) Il indique que la classe doit être dérivée.
c) Il indique que les fonctions de la classe peuvent être redéfinies dans les classes
dérivées.
d) Il indique que les fonctions de la classe ne peuvent pas être redéfinies dans les
classes dérivées.

Réponse : c) Il indique que les fonctions de la classe peuvent être redéfinies dans les
classes dérivées.

4. Comment créer une classe abstraite en C++ ?


a) En définissant toutes les fonctions de la classe comme virtuelles pures.
b) En définissant toutes les fonctions de la classe comme virtuelles.
c) En définissant toutes les fonctions de la classe comme statiques.
d) En définissant toutes les fonctions de la classe comme privées.
Réponse : a) En définissant toutes les fonctions de la classe comme virtuelles pures.

5. Qu'est-ce que la surcharge de fonction en C++ ?


a) Le fait d'utiliser plusieurs fonctions pour accomplir la même tâche.
b) Le fait de redéfinir une fonction existante pour effectuer une tâche différente.
c) Le fait de créer de nouvelles fonctions pour effectuer des tâches spécifiques.
d) Le fait de combiner plusieurs fonctions pour effectuer une tâche complexe.

Réponse : c) Le fait de créer de nouvelles fonctions pour effectuer des tâches


spécifiques.

1. Qu'est-ce que la gestion de la mémoire en C++ ?


a) Le processus de libération de la mémoire utilisée par un programme.
b) Le processus d'allocation et de libération de la mémoire utilisée par un
programme.
c) Le processus de gestion des erreurs liées à la mémoire.
d) Le processus de surveillance de l'utilisation de la mémoire par un programme.

Réponse : b) Le processus d'allocation et de libération de la mémoire utilisée par un


programme.

2. Comment utiliser le polymorphisme en C++ ?


a) En créant des classes dérivées de la classe de base et en redéfinissant des fonctions
virtuelles.
b) En créant des classes dérivées de la classe de base et en surchargeant des
fonctions.
c) En créant des classes dérivées de la classe de base et en utilisant des fonctions
inline.
d) En créant des classes dérivées de la classe de base et en utilisant des fonctions
template.

Réponse : a) En créant des classes dérivées de la classe de base et en redéfinissant


des fonctions virtuelles.

5. Comment utiliser la surcharge d'opérateur pour une classe définie par l'utilisateur en
C++ ?
a) En définissant une fonction membre de la classe avec le nom de l'opérateur
approprié.
b) En définissant une fonction amie avec le nom de l'opérateur approprié.
c) En définissant une fonction virtuelle pure avec le nom de l'opérateur approprié.
d) En définissant une fonction de conversion avec le nom de l'opérateur approprié.
Réponse : a) En définissant une fonction membre de la classe avec le nom de
l'opérateur approprié.

1. Qu'est-ce que l'héritage en programmation orientée objet ?


a) Le processus de copier le code source d'une classe dans une autre classe.
b) Le processus de créer une nouvelle classe à partir d'une classe existante, en
utilisant le code de la classe existante.
c) Le processus de créer des objets à partir de plusieurs classes.
d) Le processus de créer une classe qui hérite des membres de plusieurs classes.

Réponse : b) Le processus de créer une nouvelle classe à partir d'une classe existante,
en utilisant le code de la classe existante.

2. Comment déclarer une classe dérivée en C++ ?


a) En utilisant le mot-clé "superclass".
b) En utilisant le mot-clé "extends".
c) En utilisant le mot-clé "inherit".
d) En utilisant le mot-clé "class" suivi du nom de la classe dérivée, suivi du mot-clé
"extends" et du nom de la classe de base.

Réponse : d) En utilisant le mot-clé "class" suivi du nom de la classe dérivée, suivi du


mot-clé "extends" et du nom de la classe de base.

3. Comment appeler une fonction membre de la classe de base à partir d'une classe
dérivée en C++ ?
a) En utilisant le nom de la fonction membre et les arguments appropriés.
b) En utilisant le mot-clé "base" suivi du nom de la fonction membre et des
arguments appropriés.
c) En utilisant le mot-clé "super" suivi du nom de la fonction membre et des
arguments appropriés.
d) En utilisant le nom de la classe de base, suivi du nom de la fonction membre et des
arguments appropriés.

Réponse : c) En utilisant le mot-clé "super" suivi du nom de la fonction membre et


des arguments appropriés.

4. Qu'est-ce que la redéfinition d'une fonction en C++ ?


a) Le processus de créer une nouvelle fonction avec le même nom qu'une fonction
existante dans la classe de base.
b) Le processus de modifier une fonction existante dans la classe de base.
c) Le processus de définir une fonction virtuelle dans la classe de base.
d) Le processus de définir une fonction membre dans la classe dérivée avec le même
nom et la même signature qu'une fonction existante dans la classe de base.
Réponse : d) Le processus de définir une fonction membre dans la classe dérivée avec
le même nom et la même signature qu'une fonction existante dans la classe de base.

5. Comment définir une classe de base abstraite en C++ ?


a) En déclarant toutes les fonctions membres de la classe comme virtuelles.
b) En déclarant au moins une fonction membre de la classe comme virtuelle pure.
c) En déclarant toutes les fonctions membres de la classe comme publiques.
d) En déclarant au moins une fonction membre de la classe comme statique.

Réponse : b) En déclarant au moins une fonction membre de la classe comme


virtuelle pure.

1. Qu'est-ce que l'héritage en C++ ?


a) Le processus de créer une nouvelle classe à partir d'une classe existante, en
utilisant le code de la classe existante.
b) Le processus de créer des objets à partir de plusieurs classes.
c) Le processus de créer une classe qui hérite des membres de plusieurs classes.
d) Le processus de créer une nouvelle classe en copiant le code source d'une autre
classe.

Réponse : a) Le processus de créer une nouvelle classe à partir d'une classe existante,
en utilisant le code de la classe existante.

2. Comment déclare-t-on une classe dérivée en C++ ?


a) En utilisant le mot-clé "superclass".
b) En utilisant le mot-clé "extends".
c) En utilisant le mot-clé "inherit".
d) En utilisant le mot-clé "class" suivi du nom de la classe dérivée, suivi du mot-clé
"extends" et du nom de la classe de base.

Réponse : d) En utilisant le mot-clé "class" suivi du nom de la classe dérivée, suivi du


mot-clé "extends" et du nom de la classe de base.

3. Comment appelle-t-on une fonction membre de la classe de base à partir d'une


classe dérivée en C++ ?
a) En utilisant le nom de la fonction membre et les arguments appropriés.
b) En utilisant le mot-clé "base" suivi du nom de la fonction membre et des
arguments appropriés.
c) En utilisant le mot-clé "super" suivi du nom de la fonction membre et des
arguments appropriés.
d) En utilisant le nom de la classe de base, suivi du nom de la fonction membre et des
arguments appropriés.
Réponse : c) En utilisant le mot-clé "super" suivi du nom de la fonction membre et
des arguments appropriés.

4. Qu'est-ce que la redéfinition d'une fonction en C++ ?


a) Le processus de créer une nouvelle fonction avec le même nom qu'une fonction
existante dans la classe de base.
b) Le processus de modifier une fonction existante dans la classe de base.
c) Le processus de définir une fonction virtuelle dans la classe de base.
d) Le processus de définir une fonction membre dans la classe dérivée avec le même
nom et la même signature qu'une fonction existante dans la classe de base.

Réponse : d) Le processus de définir une fonction membre dans la classe dérivée avec
le même nom et la même signature qu'une fonction existante dans la classe de base.

5. Comment définir une classe de base abstraite en C++ ?


a) En déclarant toutes les fonctions membres de la classe comme virtuelles.
b) En déclarant au moins une fonction membre de la classe comme virtuelle pure.
c) En déclarant toutes les fonctions membres de la classe comme publiques.
d) En déclarant au moins une fonction membre de la classe comme statique.

Réponse : b) En déclarant au moins une fonction membre de la classe comme


virtuelle pure.

1. Qu'est-ce que l'agrégation en C++ ?


a) Le processus de créer une nouvelle classe à partir d'une classe existante, en
utilisant le code de la classe existante.
b) Le processus de créer une classe qui hérite des membres de plusieurs classes.
c) Le processus de créer une nouvelle classe en copiant le code source d'une autre
classe.
d) Le processus de créer une classe qui contient des objets d'autres classes.

Réponse : d) Le processus de créer une classe qui contient des objets d'autres classes.

2. Quelle est la différence entre l'agrégation et la composition en C++ ?


a) Il n'y a pas de différence entre l'agrégation et la composition en C++.
b) L'agrégation est une relation faible entre deux classes, tandis que la composition
est une relation forte.
c) L'agrégation est une relation forte entre deux classes, tandis que la composition est
une relation faible.
d) L'agrégation ne peut pas contenir des objets d'autres classes, tandis que la
composition peut le faire.
Réponse : b) L'agrégation est une relation faible entre deux classes, tandis que la
composition est une relation forte.

3. Comment déclare-t-on une relation d'agrégation entre deux classes en C++ ?


a) En utilisant le mot-clé "aggregation" suivi du nom de la classe de base et du nom
de la classe agrégée.
b) En utilisant le mot-clé "contains" suivi du nom de la classe de base et du nom de la
classe agrégée.
c) En utilisant le mot-clé "has-a" suivi du nom de la classe de base et du nom de la
classe agrégée.
d) En utilisant le mot-clé "aggregate" suivi du nom de la classe de base et du nom de
la classe agrégée.

Réponse : c) En utilisant le mot-clé "has-a" suivi du nom de la classe de base et du


nom de la classe agrégée.

4. Comment accède-t-on aux membres d'une classe agrégée à partir de la classe de


base en C++ ?
a) En utilisant le nom de la classe agrégée suivi du nom du membre.
b) En utilisant le nom de la classe agrégée, suivi du nom de l'objet agrégé, suivi du
nom du membre.
c) En utilisant le nom du membre directement, car il est accessible à la classe de base.
d) En utilisant le nom de l'objet agrégé, suivi du nom du membre.

Réponse : b) En utilisant le nom de la classe agrégée, suivi du nom de l'objet agrégé,


suivi du nom du membre.

5. Comment déclare-t-on une classe agrégée en C++ ?


a) En déclarant une variable de la classe agrégée comme membre de la classe de
base.
b) En définissant une fonction membre qui crée un objet de la classe agrégée.
c) En utilisant le mot-clé "aggregate" suivi du nom de la classe agrégée.
d) En utilisant le mot-clé "has-a" suivi du nom de la classe agrégée et du nom de
l'objet agrég
1. Qu'est-ce que le polymorphisme en C++ ?
a) Le processus de créer des objets à partir de classes abstraites.
b) Le processus de créer des classes à partir d'autres classes existantes.
c) Le processus de donner des comportements différents aux objets d'une même
classe.
d) Le processus de donner des comportements différents aux objets de différentes
classes.
Réponse : d) Le processus de donner des comportements différents aux objets de
différentes classes.

2. Quels sont les deux types de polymorphisme en C++ ?


a) Polymorphisme de classe et polymorphisme de fonction.
b) Polymorphisme statique et polymorphisme dynamique.
c) Polymorphisme d'objet et polymorphisme de type.
d) Polymorphisme implicite et polymorphisme explicite.

Réponse : b) Polymorphisme statique et polymorphisme dynamique.

3. Comment se fait le polymorphisme statique en C++ ?


a) En utilisant des fonctions virtuelles et une liaison tardive.
b) En utilisant des fonctions non-virtuelles et une liaison tardive.
c) En utilisant des fonctions virtuelles et une liaison précoce.
d) En utilisant des fonctions non-virtuelles et une liaison précoce.

Réponse : c) En utilisant des fonctions virtuelles et une liaison précoce.

4. Comment se fait le polymorphisme dynamique en C++ ?


a) En utilisant des fonctions virtuelles et une liaison tardive.
b) En utilisant des fonctions non-virtuelles et une liaison tardive.
c) En utilisant des fonctions virtuelles et une liaison précoce.
d) En utilisant des fonctions non-virtuelles et une liaison précoce.

Réponse : a) En utilisant des fonctions virtuelles et une liaison tardive.

5. Qu'est-ce qu'une fonction virtuelle en C++ ?


a) Une fonction qui est définie dans une classe de base et redéfinie dans une classe
dérivée.
b) Une fonction qui est définie dans une classe dérivée et héritée par une classe de
base.
c) Une fonction qui ne peut être appelée que par des objets d'une classe dérivée.
d) Une fonction qui ne peut être appelée que par des objets d'une classe de base.

Réponse : a) Une fonction qui est définie dans une classe de base et redéfinie dans
une classe dérivée.

1. Considérons le code suivant :


class Forme {
public:
virtual void dessiner() { cout << "Dessiner forme." << endl; }
};

class Rectangle : public Forme {


public:
void dessiner() { cout << "Dessiner rectangle." << endl; }
};

int main() {
Forme* forme1 = new Rectangle();
forme1->dessiner();
return 0;
}

Quel est le résultat de l'exécution de ce programme ?

a) "Dessiner forme." b) "Dessiner rectangle." c) Une erreur de compilation se produit.


d) Le programme ne compile pas.

Réponse : b) "Dessiner rectangle."

2. Considérons le code suivant :


class Forme {
public:
virtual void dessiner() { cout << "Dessiner forme." << endl; }
};

class Rectangle : public Forme {


public:
void dessiner() { cout << "Dessiner rectangle." << endl; }
};

void afficherForme(Forme& forme) {


forme.dessiner();
}

int main() {
Forme forme1;
Rectangle rectangle1;
afficherForme(forme1);
afficherForme(rectangle1);
return 0;
}

Quel est le résultat de l'exécution de ce programme ?

a) "Dessiner forme." "Dessiner rectangle." b) "Dessiner rectangle." "Dessiner


rectangle." c) "Dessiner forme." "Dessiner forme." d) Une erreur de compilation se
produit.

Réponse : c) "Dessiner forme." "Dessiner rectangle."

3. Considérons le code suivant :


class Forme {
public:
virtual void dessiner() { cout << "Dessiner forme." << endl; }
};

class Rectangle : public Forme {


public:
void dessiner() { cout << "Dessiner rectangle." << endl; }
};

class Cercle : public Forme {


public:
void dessiner() { cout << "Dessiner cercle." << endl; }
};

int main() {
Forme* formes[3];
formes[0] = new Rectangle();
formes[1] = new Cercle();
formes[2] = new Forme();
for(int i = 0; i < 3; i++) {
formes[i]->dessiner();
}
return 0;
}

Quel est le résultat de l'exécution de ce programme ?


a) "Dessiner rectangle." "Dessiner cercle." "Dessiner forme." b) "Dessiner cercle."
"Dessiner rectangle." "Dessiner forme." c) "Dessiner forme." "Dessiner cercle."
"Dessiner rectangle." d) Une erreur de compilation se produit.

Réponse : a) "Dessiner rectangle." "Dessiner cercle." "Dessiner forme."

Considérons le code suivant :

class A {
public:
virtual void foo() { cout << "A::foo()" << endl; }
};

class B : public A {
public:
void foo() { cout << "B::foo()" << endl; }
};

A* ptr = new B();


ptr->foo();

Quel est le résultat de l'exécution de ce programme ?

Réponse : "B::foo()"

2. Considérons le code suivant :


class A {
public:
virtual void foo() { cout << "A::foo()" << endl; }
};

class B : public A {
public:
void foo() { cout << "B::foo()" << endl; }
};

void print(A& obj) {


obj.foo();
}

int main() {
A a;
B b;
print(a);
print(b);
return 0;
}
Quel est le résultat de l'exécution de ce programme ?

Réponse : "A::foo()" "B::foo()

1. Considérons le code suivant :

class A {
public:
A() { cout << "Default constructor called." << endl; }
A(int val) { cout << "Parameterized constructor called with value " << val << "." <<
endl; }
};

int main() {
A obj1;
A obj2(42);
return 0;
}

Quel est le résultat de l'exécution de ce programme ?

Réponse : "Default constructor called." "Parameterized constructor called with value


42."

2. Considérons le code suivant :


class A {
public:
A() { cout << "Default constructor called." << endl; }
A(const A& other) { cout << "Copy constructor called." << endl; }
};

void func(A obj) {}

int main() {
A obj;
func(obj);
return 0;
}
Combien de fois le constructeur de copie est-il appelé dans ce programme ?

Réponse : Une fois (lors de l'appel de la fonction func).

3. Considérons le code suivant :


class A {
public:
A() { cout << "Default constructor called." << endl; }
A(int val) { cout << "Parameterized constructor called with value " << val << "." <<
endl; }
};

class B {
public:
B() : a(42) {}
private:
A a;
};

int main() {
B obj;
return 0;
}

1. Considérons le code suivant :


class A {
public:
void func() const { cout << "Function called." << endl; }
};

int main() {
const A obj;
obj.func();
return 0;
}

Pourquoi la fonction func est-elle marquée comme const ? Et quel est le résultat de
l'exécution de ce programme ?

Réponse : La fonction func est marquée comme const pour indiquer que cette
fonction ne modifie pas l'état de l'objet. Le résultat de l'exécution de ce programme
est "Function called." car la fonction func est appelée sur un objet const A.
2. Considérons le code suivant :
class A {
public:
int get_value() const { return value; }
void set_value(int val) { value = val; }
private:
int value;
};

int main() {
const A obj;
obj.set_value(42);
cout << obj.get_value() << endl;
return 0;
}

Quel est le résultat de l'exécution de ce programme ?

Réponse : Le programme ne se compile pas car la fonction set_value est appelée sur
un objet const A, ce qui est interdit car cette fonction modifie l'état de l'objet.

3. Considérons le code suivant :


class A {
public:
A(int val) : value(val) {}
int get_value() const { return value; }
private:
int value;
};

int main() {
A obj(42);
const int& ref = obj.get_value();
obj.set_value(100);
cout << ref << endl;
return 0;
}

Quel est le résultat de l'exécution de ce programme ?

Réponse : Le programme ne se compile pas car la fonction set_value est appelée sur
un objet const A, ce qui est interdit car cette fonction modifie l'état de l'objet.

Vous aimerez peut-être aussi