IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

operator overload sur des classes créées


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 120
    Billets dans le blog
    1
    Par défaut operator overload sur des classes créées
    Bonsoir,

    J'ai créé une classe Matrice33 et une classe Vecteur3.
    je souhaiterais "overloader" l'opérateur * pour pouvoir écrire :
    V2 = M * V1
    où faut-il déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vecteur3 operator*(const Matrice33& M, const Vecteur3& V1) const;
    ?
    dans Matrice33.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vecteur3 operator(const Vecteur3& V1) const;
    ? Dans ce cas, comment avoir accès aux variables privées de V1 ?
    dans Vecteur3.h ?
    dans un autre header comme OperateursVecteur3.h ?
    dans ce cas, comment avoir accès aux variables privées de M et V1 ?
    J'ai un peu tout essayé sans succès.

    Merci pour votre aide

  2. #2
    Membre éprouvé Avatar de Xtrem_Voyageur
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2009
    Messages : 85
    Par défaut
    Fais de cette fonction une fonction amie de ta classe Matrice et Vecteur. Pour cela il te suffit d'ajouter le spécificateur friend devant le prototype de ta fonction et de placer ce prototype dans tes deux classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    friend Vecteur3 operator*(const Matrice33& M, const Vecteur3& V1) const;
    En tant que fonction amie, elle a accès aux attributs privés des 2 classes.

  3. #3
    Membre confirmé

    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 120
    Billets dans le blog
    1
    Par défaut ça n'a pas marché
    Merci pour cette réponse. J'avais déjà essayé et ça ne marche pas.

    Si j'utilise ces deux codes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //Vector3DOperators.cpp
     
    #include "Vector3D.h"
    #include "Matrix33.h"
     
    Vector3D operator*(const Matrix33& M, const Vector3D& V) const
    {
    	return Vector3D(M.x1 * V.x + M.x2 * V.y + M.x3 * V.z, 0, 0);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    //Matrix33.h
     
    class Matrix33
    {
    public:
    	Matrix33(void);
    	Matrix33(double vx1, double vy1, double vz1,
    			 double vx2, double vy2, double vz2,
    			 double vx3, double vy3, double vz3);
    	~Matrix33(void);
    	//friend Vector3D operator*(const Matrix33& M, const Vector3D& V) const;
    private:
    	double x1;
    	double y1;
    	double z1;
    	double x2;
    	double y2;
    	double z2;
    	double x3;
    	double y3;
    	double z3;
    };
    J'obtiens effectivement les erreurs :
    error C2270: '*'*: modificateurs non autorisés sur les fonctions non membres
    error C2248: 'Matrix33:1'*: impossible d'accéder à private membre déclaré(e) dans la classe 'Matrix33'

    si j'enlève les // devant "friend Vector3D ...
    j'obtiens les erreurs :
    error C2143: erreur de syntaxe*: absence de ';' avant '*'
    error C2433: 'Vector3D'*: 'friend' non autorisé sur les déclarations de données
    puis toutes sortes d'erreur de syntaxe.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    error C2270: '*'*: modificateurs non autorisés sur les fonctions non membres
    ta fonction n'est pas une fonction membre de Matrix33, le mot-clé const ne peut pas s'appliquer.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre confirmé

    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 120
    Billets dans le blog
    1
    Par défaut
    même quand j'enlève const à la fin ou dans les paramètres, j'ai la même erreur.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Le const sur les paramètres n'y changera rien, ce n'est pas la source de l'erreur, et tu n'utilises pas de méthode non const à l'intérieur de la fonction. Ils sont corrects et doivent y rester.
    Le const après la déclaration est totalement faux et doit être supprimé. C'est lui qui est la source du message d'erreur, et si le laisser ne supprime pas le message d'erreur, c'est que tu as la même erreur ailleurs ou le supprimes mal ().
    Une fonction non membre d'une classe/struct ne peut pas être const.

    http://msdn.microsoft.com/en-us/libr...(v=vs.71).aspx
    edit : autre lien très utile http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/04/2009, 23h55
  2. [Free Pascal] Operator overloaded sur un modulo
    Par mixka13 dans le forum Free Pascal
    Réponses: 3
    Dernier message: 24/01/2009, 15h07
  3. Problème avec un tween sur des clips crées dynamiquement
    Par Invité dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 21/05/2008, 17h43
  4. [POO] Appels statiques sur des classes
    Par daajack dans le forum Langage
    Réponses: 2
    Dernier message: 07/12/2007, 15h47
  5. Action sur des boutons crées dynamiquement
    Par barthelus76 dans le forum SWT/JFace
    Réponses: 13
    Dernier message: 28/06/2007, 20h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo