IFT1166 --- Automne 1999 --- Demo06 --- 27 Octobre 1999
IFT1166 -- Démonstration # 6
Contenu
- des questions sur le TP02?
- les fonctions amies.
- la surdéfinition des opérateurs.
Exercice 1
En vous aidant d'un programme c++, montrez (et expliquez) ce qui suit:
A, B & C sont des classes;
Symétrie:
Si j'ai le mot de passe du compte de la personne x, je peux donc entrer dans son compte. Ca ne veut pas dire que cette personne (x) peut entrer dans mon compte, puisqu'elle n'a pas mon mot de passe.
Montrez que l'amitié n'est pas symétrique, i.e.:
Si la classe A est amie de la classe B n'implique pas que la classe B est amie de la classe A.
Transitivité:
Si j'ai le mot de passe du compte de la personne (x), je peux donc entrer dans le compte de (x). Et si cette personne (x) a le mot de passe du compte de la personne (y), elle peut donc entrer dans le compte de (y). Cela ne veut pas dire que je peux entrer dans le compte de (y), puisque je n'ai pas son mot de passe.
Montrez que l'amitié n'est pas transitive, i.e.:
Si la classe A est amie de la classe B et la classe B est amie de la classe C; n'implique pas que la classe A est amie de la classe C.
Exercice 2
Completez la classe Id du cours #4, par :
- Un constructeur de recopie.
- Un opérateur d'affectation surdéfini.
Et donnez le résultat du programme.
Pour rappel :
class Id {
char *nom;
public:
Id(); // voir cours #4
~Id(); // voir cours #4
Id(const Id&); // à faire
Id& operator=(Id); // à faire
};
int main() {
Id pierre,paul;
Id jacque = paul;
pierre = jacque;
return 0;
}
Exercice 3
Complétez la classe des nombres rationnels, suivante:
class Rat {
private:
int num,den;
public:
// à completer
};
- 2 constructeurs:
* initialise le dénominateur à 1. Le numérateur prendra la valeur 0, si aucune valeur n'a été spécifiée.
* initialise le numérateur et le dénominateur avec les valeurs passées par valeur à ce constructeur.
- opérateurs surdéfinis:
operator+ : la somme de deux rationnels,
operator- : la différence de deux rationnels,
operator/ : la division de deux rationnels,
operator+= : l'addition à un rationnel, la valeur d'un autre rationnel (ou lui même),
operator++: préfixe,
operator<<: affiche la valeur du rationnel,
operator>>: lit un rationnel,
supplément …..
operator- : valeur négative d'un rationnel,
operator* : multiplication de deux rationnels,
operator== : test logique d'égalité entre deux rationnels,
operator!= : test de différence entre deux rationnels,
operator++: suffixe,
Et donnez le résultat du programme.
int main () {
Rat a(1,2),b(3,4);
int i = 10;
// afficher i puis le rationnel a
// afficher le rationnel b
// afficher le résultat de l'opération a-b
// afficher le résultat de l'opération a-1
// afficher le résultat de l'opération a+=b
// afficher le rationnel a
// afficher le résultat de l'opération ++a
// afficher le rationnel a
// afficher le résultat de l'opération a++
// afficher le rationnel a
// afficher le rationnel b
// afficher le résultat de l'opération a/b
// afficher le résultat de l'opération a*b
// afficher le résultat de l'opération a==b
// afficher le résultat de l'opération a!=b
return 0;
}