yanne1985
Messages postés87Date d'inscriptionsamedi 14 janvier 2006StatutMembreDernière intervention 5 décembre 2008
-
31 mars 2006 à 22:18
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 2008
-
1 avril 2006 à 00:32
salut tout le monde
je viens de commencer avec la poo et je trouve plusieur problemes
j'ai une class la suivant
class fraction{
public:
int x;
int y;
fraction(int x=0,int y=1)
{
this->x=x;
this->y=y;
}
~fraction(){}
};
et une fonction
fraction operator *(fraction a, fraction b)
{
fraction t;
t.x=a.x*b.x;
t.y=a.y*b.y;
return t;
}
comment je fais si je veux avoir les champs x et y privé et en même temps la foction fraction peut acceder a ces 2 champs
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 31 mars 2006 à 23:00
Mais ceci fonctionnera très bien:
class fraction{
fraction(int x=0,int y=1)
{
this->x=x;
this->y=y;
}
~fraction(){}
friend
fraction operator * (fraction a, fraction b); // il faut préciser que
la fonction operator * est amie et a le droit d'accéder au champ privés
de la classe.
private:
int x;
int y;
};
fraction operator *(fraction a, fraction b)
{
fraction t;
t.x=a.x*b.x;
t.y=a.y*b.y;
return t;
}
Mais il y a également une autre possibilité, mais qui n'est pas logique, c'est cela:
class fraction{
fraction(int x=0,int y=1)
{
this->x=x;
this->y=y;
}
~fraction(){}
fraction operator *(fraction a)
{
fraction t;
t.x=a.x*b.x;
t.y=a.y*b.y;
return t;
}
private:
int x;
int y;
};
La fonction "operator *" est ici une fonction membre, alors que dans ta
solution "operator *"est une fonction externe qui prend deux arguments.
Utiliser cette fonction externe est mieux car elle est plus logique
d'un point de vue mathématique.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 31 mars 2006 à 22:43
class fraction{
public:
int x;
int y;
fraction(int x=0,int y=1)
{
this->x=x;
this->y=y;
}
~fraction(){}
friend fraction operator * (fraction a,
fraction b); // il faut préciser que la fonction operator * est amie et
a le droit d'accéder au champ privés de la classe.
};
et une fonction
fraction operator *(fraction a, fraction b)
{
fraction t;
t.x=a.x*b.x;
t.y=a.y*b.y;
return t;
}
Mais
celui qui t'apprend a programmer, te l'apprend bien. Le "this" est une
bonne habitude. Et utiliser une fonction amie ("friend") pour un
opérateur symétrique est bcp plus logique que d'utiliser
fraction::operator *(fraction a) en fonction membre.
Seule modification a faire: tes arguments de doivent pas etre "fraction a", mais "const fraction & a".
Vous n’avez pas trouvé la réponse que vous recherchez ?
fetsr
Messages postés24Date d'inscriptionlundi 14 mars 2005StatutMembreDernière intervention31 mars 2006 31 mars 2006 à 22:56
C'est pas beau -> luhtor t'a montré un exemple. Meme si ce que tu as ecrit est juste, eviye de mettre les memes noms pour les variables ca prete à confusion, tu verra ca quand ta classe aura bcp d'attributs, ce sera difficile à lire.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 31 mars 2006 à 23:04
Personnellement, des qu'une variable est passé en argument, je la
précède toujours du caractère "_". Comme ca, je sais que cette variable
a été passé en argument.fraction(int _x 0,int _y 1); et non fraction(int x = 0, int y = 1);
Enfin, ces petites règles d'écriture sont personnels, tu es libre de faire les tiennes.