Langage C++, aspects avancés
Etant donnée la fonction membre int foo (int = 0); déclarée dans la classe X, quelle est la définition déportée de cette fonction membre :
int X::foo(int val) {... return val; }
int X::foo(int val = 0) {... return val; }
X:: int foo(int val = 0) {... return val; }
int X. foo(int val ) {... return val; }
Quelle est l?instruction qui n?entraîne pas la création d?une instance de la classe A :
A unA ( 5 );
A * unA = new A;
A unA = 10;
A unA ();
La surcharge d?un opérateur applicable sur des instances d?une classe ne peut pas s?effectuer par :
une fonction membre sans argument
une fonction globale avec 1 argument
une fonction membre avec 1 argument
une fonction globale sans argument
Quel opérateur ne peut-on pas surcharger en C++ :
.
[ ]
->
new
Quel attribut d?accès n'est pas applicable en C++ :
private
global
public
protected
Pour une classe C héritant d?une classe B qui elle même hérite d?une classe A, lors de la création d?une instance de C, la chronologie d?exécution des constructeurs est :
A() puis B() puis C()
C() puis B() puis A()
l?ordre d?exécution est aléatoire
cette question n?a pas de sens
Quelle assertion sur les classes abstraites est fausse :
non instanciable
contient des méthodes virtuelles pures
ne contient jamais d?attribut
une classe dont on peut hériter
Etant données : class A { public : virtual void trace () { cout << "Trace A" << endl; } }; class B : public A { public : virtual void trace () { cout << "Trace B" << endl; } }; Quelle est l?expression qui affiche "Trace B" à l?écran :
A * pA1 = new A(); pA1->trace();
B * pB1 = (B*)new A(); pB1->trace();
A unA; B unB; unA = unB; unA.trace();
A* pA2 = new B(); pA2->trace();