Salut,
Tu ne devrais déjà pas passer ton point par pointeur à ta fonction coïncide, mais par référence constante...
Cela te permettrait de garder un code beaucoup plus facile à lire, une référence s'utilisant exactement de la même manière qu'un objet simple.
Le code (non corrigé pour le reste) ressemblerait alors à
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include<iostream>
using namespace std;
class point //Classe
{
int x,y;//déclaration des variables de la classe
public: point(int abs =0,int ord = 2){x=abs;y=ord;}//instruction, initialisation de point de coordonnée x=0 y=2.
bool coincide(point const & );//fonction membre coincide
};
bool point::coincide(point const &adapt)//référence
{
return((adapt.x==x)&&(adapt.y==y)) ; //si adapt.x est égale au x de la classe et adapt.y à celui de y, le bool returne 1 sinon 0
}
int main(int argc,char *argv[])//programme principal
{
point a,b(1),c(0,2);//initialisation des points a, b, c. ceci grace à l'appel de la classe point
cout<<"a et b "<<a.coincide(b)<<" ou "<<b.coincide(a)<<"\n";
cout<<"a et c "<<a.coincide(c)<<" ou "<<c.coincide(a)<<"\n";
} |
Tu ne trouves pas cela mieux
Ceci dit:
Tu fournis des valeurs par défaut à ton constructeur de point...
Ces valeurs sont:
- 0 pour x
- 2 pour y
Quand tu déclares ta variable a sans passer de paramètres, ce sont donc ces valeurs qui seront utilisées, si bien que a.x vaut 0 et a.y vaut 2.
La coïncidence (mais en est-ce vraiment une ) fait que, quand tu déclares la variable c, ce sont justement ces valeurs qui sont données aux constructeurs, si bien que c.x vaut 0 et c.y vaut... 2.
Comme a.x est égal à c.x (rappelons que tous les deux valent 0 ET que a.y est égal à c.x (rappelons que tous les deux valent 2 ), il est normal que tu obtiennes un résultat vrai lorsque tu invoques a.coincide(c), tout comme il est normal que tu obtiennes un résultat vrai quand tu invoques c.coincide(a).
Une dernière remarque au passage concernant le commentaire
//si adapt.x est égale au x de la classe et adapt.y à celui de y, le bool returne 1 sinon 0
Un booléen ne vaut pas 0 ou 1.. mais false ou true.
Simplement, il se fait que le passage dans un flux (comme std::cout) considère par défaut le fait de les afficher sous les formes de 0 et de 1
Tu pourrais d'ailleurs formater la sortie de manière à obtenir quelque chose ressemblant à
1 2
| a et b false ou false
a et c true ou true |
en modifiant les lignes
1 2
| cout<<"a et b "<<a.coincide(b)<<" ou "<<b.coincide(a)<<"\n";
cout<<"a et c "<<a.coincide(c)<<" ou "<<c.coincide(a)<<"\n"; |
en
1 2
| cout<<"a et b "<<boolalpha<<a.coincide(b)<<" ou "<<boolalpha<<b.coincide(a)<<"\n";
cout<<"a et c "<<boolalpha<<a.coincide(c)<<" ou "<<boolalpha<<c.coincide(a)<<"\n"; |
Partager