2012-13.CE.correction.progc++

Telechargé par EL MAMOUN ABDELLAH
Programmation en C++
L2 2012-2013
Le 5 Juin 2013
Devoir Ecrit de Programmation en C++
Durée : 2 heures
Sans documents, sans calculatrices
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
Partie I : Bases du C++
Soit le code suivant (on a reporté les numéros de ligne). Toutes les questions de la partie 1 sont
relatives à ce code. Vous trouverez en annexe une copie de ce code que vous pouvez détacher pour
répondre aux questions sur les pages suivantes.
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.
Quelle est la signification des mots-clés private et public aux lignes 3 et 7 ?
Comment s'appellent les méthodes dont les prototypes sont fournis aux lignes 9 et 10 ?
Il est dans le fichier vecteur3.h car c'est une description de classe qui ne comporte pas de code
private indique que les membres suivants ne sont accessibles que par les méthodes de la classe
Vecteur3
public indique que les membres suivants sont accessibles hors de la classe Vecteur3
Ce sont des constructeurs
Programmation en C++
L2 2012-2013
Quand ces méthodes sont-elles appelées ?
Comment s'appelle la méthode dont le prototype est fourni à la ligne 11 ?
Que signifient les écritures double=0.0 dans le prototype de la méthode de la ligne 9 ?
Quelles informations sont fournies par le prototype en ligne 15 ?
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.
QCM : 4 questions avec plusieurs réponses possibles (sauf la dernière, une seule réponse possible)
Dans la classe Vecteur3, x, y et z sont :
Des attributs
Des propriétés
Des membres
Des méthodes
Elles sont appelées à chaque fois qu'un objet de la classe Vecteur3 est instancié (créé)
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.
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 !
Programmation en C++
L2 2012-2013
La méthode normalise() dont le prototype se trouve en ligne 13 :
Est une méthode statique
Retourne un objet de classe Vecteur3
Est une méthode de la classe Vecteur3
A un paramètre par défaut
La méthode dont le prototype est fourni à la ligne 22
Peut accéder aux membres private de la classe Vecteur3
Permet de multiplier un réel par un vecteur en utilisant la notation *
Est une méthode de la classe Vecteur3 // note : c'est une méthode friend, donc
n'appartient pas à la classe Vecteur3
Ne retourne aucune valeur
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 calculNorme(const Vecteur3 &v)
{
return sqrt((v.x*v.x)+(v.y*v.y)+(v.z*v.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)
ostream& operator<<(ostream& os, const Vecteur3 &v)
{
os << "[" << v.x << ", " << v.y << ", " << v.z << "]";
return os;
}
Soit (enfin !) le main suivant, où l'on considère que tous les #include nécessaires sont faits, ainsi que
using namespace std;
On considère que racine(2) vaut 1.414 et que 1/racine(2) vaut 0.707
int main(int argc, char *argv[])
{
Vecteur3 v1;
Vecteur3 v2(1.0, 0.0, -1.0);
Vecteur3 v3 = v2.normalise();
cout << v2 << endl;
cout << v3 << endl;
v1 = v2.calculNorme() * Vecteur3::unitX();
cout << v1;
return 0;
}
Expliquer la syntaxe : Vecteur3::unitX();
Qu'affiche ce programme ?
UnitX étant une méthode static, elle est appelée en la faisant précéder du nom de la classe
[1.0, 0.0, -1.0]
[0.707, 0.0, -0.707]
[1.414, 0.0, 0.0]
1 / 11 100%
Documents connexes
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !