Académique Documents
Professionnel Documents
Culture Documents
#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
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
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.
Réponse : b) Les références sont des alias pour les variables existantes, tandis que les
pointeurs contiennent des adresses de mémoire.
Réponse : c) Il indique que les fonctions de la classe peuvent être redéfinies dans les
classes dérivées.
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é.
Réponse : b) Le processus de créer une nouvelle classe à partir d'une classe existante,
en utilisant le code de la classe existante.
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 : a) Le processus de créer une nouvelle classe à partir d'une classe existante,
en utilisant le code de la classe existante.
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.
Réponse : d) Le processus de créer une classe qui contient des objets d'autres classes.
Réponse : a) Une fonction qui est définie dans une classe de base et redéfinie dans
une classe dérivée.
int main() {
Forme* forme1 = new Rectangle();
forme1->dessiner();
return 0;
}
int main() {
Forme forme1;
Rectangle rectangle1;
afficherForme(forme1);
afficherForme(rectangle1);
return 0;
}
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;
}
class A {
public:
virtual void foo() { cout << "A::foo()" << endl; }
};
class B : public A {
public:
void foo() { cout << "B::foo()" << endl; }
};
Réponse : "B::foo()"
class B : public A {
public:
void foo() { cout << "B::foo()" << endl; }
};
int main() {
A a;
B b;
print(a);
print(b);
return 0;
}
Quel est le résultat de l'exécution de ce programme ?
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;
}
int main() {
A obj;
func(obj);
return 0;
}
Combien de fois le constructeur de copie est-il appelé dans ce programme ?
class B {
public:
B() : a(42) {}
private:
A a;
};
int main() {
B obj;
return 0;
}
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;
}
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.
int main() {
A obj(42);
const int& ref = obj.get_value();
obj.set_value(100);
cout << ref << endl;
return 0;
}
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.