Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Surcharge de l'opérateur == en C++


Messages recommandés

Posté(e)

Salut,

 

Bon voilà j'ai 3 vecteurs : m_fX,m_fY et m_fZ et je dois définir l'opérateur == de manière à ce qu'il me permette de tester la coincidence de 2 vecteurs.

 

Pour cela j'ai créer une classe :

 

class CVecteur3D

{

public:

CVecteur3D(float fC1=0.0,float fC2 = 0.0, float fC3 = 0.0);

virtual ~CVecteur3D();

int operator == (float fE);

private:

float m_fX;

float m_fY;

float m_fZ;

};

 

Donc mon opérateur reçoit un en paramètre la valeur d'un vecteur et la compare avec les m_fX,m_fY et m_fZ.

 

Voici la fonction de surcharge de l'opérateur == :

 

int CVecteur3D::operator ==(float fE)

{

if(fE == m_fX)

{

return 1;

}

else if(fE == m_fY)

{

return 1;

}

else if (fE == m_fZ)

{

return 1;

}

else{

return 0;

}

}

 

Je me suis déclaré un objet de la classe CVecteur3D dans le main que j'ai appelé oVecteur, oVecteur me propose bien le "operator =="

 

Ca parait bête mais l'ennui c'est que je ne sais pas comment interroger cette fonction... depuis le main je veux faire :

 

 

if(fE == 1) mais il est clair que ça ne va pas fonctionner, de cette façon il ne fait pas appel à l'opérateur surchargé...

 

Avez-vous une idée ?

 

Nico

Posté(e)

Je ne comprends pas tout ce que tu veux faire... (faut dire je me leve...)Mais juste un conseil pour programmer plus propre:

 

Switch (fE)
{
case  m_fX: return 1;
case  m_fY: return 1;
case  m_fZ: return 1;
Default: return 0;
}

Ca fait déjà plus clair, et plus propre :P

Posté(e)

Re,

 

if(oVecteur.operator ==(fE) == 1)

{

cout<<"Un vecteur similaire a été trouve";

}

 

 

 

Bon avec ça, cela fonctionne, mais bon, c'est comme un call à une méthode de la classe, il faudrait que quand on fait ==, implicitement ce call se fasse.

 

Nico

Posté(e)
Je ne comprends pas tout ce que tu veux faire... (faut dire je me leve...)Mais juste un conseil pour programmer plus propre:

 

Switch (fE)
{
case  m_fX: return 1;
case  m_fY: return 1;
case  m_fZ: return 1;
Default: return 0;
}

Ca fait déjà plus clair, et plus propre :P

Ok merci Tangui j'ai pris note.

 

C'est pas très clair non plus pour moi, j'ai difficile de mieux l'expliquer, je suis désolé.

 

J'ai lu la théorie mais c'est la première fois que j'essaye sur le compilateur.

 

Nico

Posté(e)

Bon, j'ai pas mes cours de C++ sous la main, mais de mémoire, la surcharge d'opérateur ça ne te crée pas de nouveau membre dans ta classe (donc si t'as une nouvelle méthode appelée "operator==" c'est que t'as un pb qque part), et ça permet d'utiliser if ( Vector1 == Vector2 ) avec des vecteurs comme tu le ferais avec des int (donc pas à tester "Vecteur1.operator==Vecteur2 == 1" qui est, tu l'avoueras, assez déroutant à lire !)

En gros, rapidement, et toujours de mémoire :

int operator == (Vector V1, Vector V2)
{
 if ((V1.x == V2.x) && (V1.y == V2.y) && (V1.z == V2.z)) return 1;
 return 0;
}

et l'utilisation :
 if (V1 == V2) bla bla bla;

(je sais, c'est inline, c'est porc, mais c'est pour te donner une idée de la syntaxe du truc)

un peu d'aide

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...