Solutionnaire
Buts:
- [Surcharge des opérateurs].
- Q1:Soit le programme suivant 1169demo05exo1.cpp
- Donner les lignes de la fonction main où sont appelées les fonctions membres de la classe X, en indiquant à chaque fois le nom de l'objet crée (ou receveur). (Si plusieurs objets sont créés
pour une même ligne, indiquez-les tous).
|
ligne 1 |
ligne 4 |
ligne 6 |
ligne 8 |
ligne 10 |
ligne 12 |
X::X() |
O |
|
|
|
|
|
X::X(int) |
O |
|
O |
|
|
O |
X::X(const X&) |
|
O |
|
|
|
|
X::operator=(const X&) |
|
|
|
O |
|
O |
- Donner les résultats obtenus en sortie après l'appel des lignes suivantes, de la fonction main:
|
ligne 2 |
ligne 3 |
ligne 5 |
ligne 7 |
ligne 9 |
ligne 11 |
ligne 13 |
Sortie |
0 |
1985 |
0 |
1949 |
1985 |
1949 |
2010 |
- Soit H le nom de l'objet crée à la ligne 4. Sur cette même ligne (4), H est accessible par le pointeur
pa. Après avoir exécuté la ligne 10, et avant d'avoir exécuté la ligne 11:
- H existe toujours mais n'est plus accessible? (vrai/faux)
vrai: On a juste changé la valeur du pointeur, l'ex-objet, même si on perd sa trace, il existe toujours.
- H existe et H.a a pris la valeur 2010? (vrai/faux)
faux: on a perdu la trace de H! En plus la valeur "2010" n'arrive qu'à l'instruction 12, et on est entrain d'exécuter la 10e!
- Q2 Le programme suivant 1169demo05exo2.cpp
contient 5 erreurs de syntaxe. Indiquez les et indiquez la correction qu'il faudra apporter. Des erreurs sur une même ligne compte
pour une seule erreur.
[Solutionnaire](1169demo05exo2sol.cpp).
- Q3 Complétez la classe Chaine suivante 1169demo05exo3.cpp.
[Solutionnaire](1169demo05exo3sol.cpp).
- Q4 Complétez la classe String suivante 1169demo05exo4.cpp.
[Solutionnaire](1169demo05exo4sol.cpp).
- Q5 Soit le fichier 1169demo05exo5.cpp.
- À quoi servent les fonctions getX, getY, setX et setY?
- [Réponse]: La méthode "get" permet d'afficher les valeurs privées de x et y en sortie.
La méthode "set" permet de modifier ces valeurs.
- A quoi servent les fonction membres Point(Point & p) et ~Point()? Sont-elles nécessaires dans
le cas de la classe Point? Pourquoi?
- [Réponse]: La méthode "Point(Point& P)" est le constructeur de recopie alors que "~Point()"
représente le destructeur de la classe Point. Ils ne sont pas nécessaires, la classe ne contient pas de pointeurs.
- Que signifie le mot clé friend devant le prototype de la fonction compareHauteur? À quoi cela
sert-il?
- [Réponse]: "friend" est un mot clé réservé en C++. Il permet de définir l'amitié en C++.
Dans notre exemple, il permet à la méthode externe compareHauteur d'être amie de la classe Point et donc elle aura
accès aux membres privés même si la méthode est externe.
- On considère la classe Polygone suivante 1169demo05exo5p.cpp.
(un polygone est caractérisé par son nombre de sommets et par ses sommets, stockés dans un tableau).
On utilise la classe Point définie précédemment et l'on suppose que les deux classes sont définies dans un même fichier.
Dites ce qui s'affiche à la suite des deux instructions suivantes :
- Polygone triangle(3);
- triangle.afficher();
[Réponse]
constructeur 1: 0,0
constructeur 1: 0,0
constructeur 1: 0,0
(0,0)
(0,0)
(0,0)
- Ecrivez la surcharge de l'opérateur d'indexation [ ] qui retourne le ième Point du polygone. Cet
opérateur lèvera une exception du type entier qui renverra l'indice demandé quand celui-ci n'est pas valide
(i.e. est négatif ou supérieur au nombre de sommets).
[Réponse]
Point& operator[] (int i) throw (int) {
if (i>=0 && i<nb) return somt[i];
else throw i;
}
- Définir la méthode input membre de la classe Polygone qui permet de mettre à jour les abscisses (X)
et les ordonnées (Y) des différents sommets de ce polygone.
[Réponse]
void input(){
float x,y;
for (int i=0;i<nb;i++){
cout << "\n" << i \
<< "eme point, entre abscisse et ordonnee ";
cin >> x >> y;
somt[i].setX(x);somt[i].setY(y);
}
}
|
[top]
|