Académique Documents
Professionnel Documents
Culture Documents
L2 2012-2013
Le 5 Juin 2013
Durée : 2 heures
Les réponses aux questions devront être portées dans les espaces prévus à cet effet. Aucune autre
copie ne sera acceptée. N'oubliez pas d'inscrire lisiblement vos noms et prénoms sur la feuille.
NOM
Prénom
Groupe
Programmation en C++
L2 2012-2013
1. class Vecteur3
2. {
3. private :
4.
5. double x, y, z;
6.
7. public :
8.
9. Vecteur3(double=0.0, double=0.0, double=0.0);
10. Vecteur3(const Vecteur3 &);
11. ~Vecteur3();
12.
13. Vecteur3 normalise();
14. double calculNorme();
15. static Vecteur3 unitX();
16.
17. double getx();
18. double gety();
19. double getz();
20.
21. friend ostream& operator<<(ostream&, const Vecteur3&);
22. friend Vecteur3 operator*(double, const Vecteur3 &);
23.
24. };
A votre avis, ce code est-il dans le fichier vecteur3.cpp ou vecteur3.h ? Justifiez votre réponse.
Il est dans le fichier vecteur3.h car c'est une description de classe qui ne comporte pas de code
Comment s'appellent les méthodes dont les prototypes sont fournis aux lignes 9 et 10 ?
Ce sont des constructeurs
Programmation en C++
L2 2012-2013
Il s'agit du destructeur
Ce sont des arguments par défaut. Ainsi, si l'utilisateur ne fournit pas de valeur pour ces arguments
lors de l'appel du constructeur, ces arguments vaudront 0.
Ce prototype indique que la méthode nommé unitX retourne un objet de la classe Vecteur3, et
que cette méthode est static, c’est-à-dire que c'est une méthode de classe qui n'est pas liée à
une instance particulière.
On vous propose de modifier le prototype double getx(); en ligne 17 par : double getx()
const; Etes-vous d'accord avec ce changement ? Justifiez votre réponse.
Oui, car la méthode getx() ne modifie pas l'objet qui l'appelle. const placé en fin de prototype
indique que la méthode s'engage à ne pas modifier l'objet qui l'appelle : c'est donc une sécurité
supplémentaire qui permet au compilateur de vérifier que la méthode ne modifie pas l'objet. En
fait, il faudrait le mettre !
QCM : 4 questions avec plusieurs réponses possibles (sauf la dernière, une seule réponse possible)
Des attributs
Des propriétés
Des membres
Des méthodes
Programmation en C++
L2 2012-2013
Parmi les 4 définitions de la méthode calculNorme(), laquelle est la bonne (1 seule réponse) ? On
suppose que le calcul de la norme est correct.
double calculNorme()
{
return sqrt(x*x+y*y+z*z);
}
double Vecteur3::calculNorme()
{
return sqrt(x*x+y*y+z*z);
}
double Vecteur3::calculNorme()
{
return sqrt((this.x*this.x)+(this.y*this.y)+(this.z*this.z));
}
Note : this étant un pointeur, la notation correcte est this-> et non this.
Fin du QCM
Programmation en C++
L2 2012-2013
On vous donne le corps de la méthode d'affichage (que l'on trouvera dans le fichier Vecteur3.cpp)
Soit (enfin !) le main suivant, où l'on considère que tous les #include nécessaires sont faits, ainsi que
using namespace std;
Vecteur3 v3 = v2.normalise();
v1 = v2.calculNorme() * Vecteur3::unitX();
return 0;
}
UnitX étant une méthode static, elle est appelée en la faisant précéder du nom de la classe
Qu'affiche ce programme ?
Un peu de vocabulaire…En biologie, le règne animal est grossièrement divisé en taxons (mammifères,
reptiles, oiseaux, poissons), puis en genres (chien, serpent, vautour, requin par exemple). On ne
descendra pas au niveau des espèces pour l'exemple traité dans cette partie. Le nom de chaque animal
correspond au nom qu'on peut affectueusement lui donner. Ainsi, un animal du taxon mammifère et
du genre hamster peut porter le nom "Kiki", "Terminator" ou "Jean-Claude".
class Animal
{
protected :
string nom;
string taxon;
string genre;
public :
Animal(string, string, string);
virtual ~Animal();
Dans le fichier animal.cpp, trouvera-t-on le corps de la méthode manger() ? Justifiez votre réponse.
Oui, car une méthode virtuelle a un corps.
Animal est une classe abstraite car elle contient une méthode virtuelle pure.
Programmation en C++
L2 2012-2013
Que signifie le qualificateur protected pour l'accessibilité des attributs nom, taxon et genre ?
protected signifie que ces attributs seront accessibles par la classe Animal et par les classes
héritant de Animal uniquement.
public :
virtual ~Mammifere();
En allant plus loin dans la classification des animaux, on s'intéresse au genre des hamsters. Un hamster
est un mammifère, on utilise de nouveau la relation d'héritage.
hamster.h
// inutile ici de mettre un attribut nom car cet attribut est défini dans la
public :
Hamster(string nom):Mammifere(nom,"Hamster);
virtual ~Hamster();
Hamster::Hamster(string nom):Mammifere(nom,"Hamster")
{
duree_gestation=20; // car duree_gestation est un attribut protected
// de la classe Mammifere : on en herite et on y a accès
}
Hamster::~Hamster() {}
Void Hamster::seDeplacer()
{
cout << " se deplace en trottinant" << endl;
}
Enfin, parmi les instructions suivantes, barrez celles qui sont incorrectes
return 0;
}
Programmation en C++
L2 2012-2013
1. class Vecteur3
2. {
3. private :
4.
5. double x, y, z;
6.
7. public :
8.
9. Vecteur3(double=0.0, double=0.0, double=0.0);
10. Vecteur3(const Vecteur3 &);
11. ~Vecteur3();
12.
13. Vecteur3 normalise();
14. double calculNorme();
15. static Vecteur3 unitX();
16.
17. double getx();
18. double gety();
19. double getz();
20.
21. friend ostream& operator<<(ostream&, const Vecteur3&);
22. friend Vecteur3 operator*(double, const Vecteur3 &);
23.
24. };