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 :

Surchage opérateur & instanciation dynamique


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 55
    Par défaut Surchage opérateur & instanciation dynamique
    Bonjour,

    Je voudrais surcharger l'opérateur + et faire la somme de deux objets instanciés dynamiquement mais ça ne marche pas.

    Ci-dessous : le premier cas fonctionne, le second retourne à la compilation :
    " invalid operands of types `Som*' and `Som*' to binary `operator+'"

    Pouvez vous m'éclairer?

    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
    23
     
    #include <iostream>
     
    using namespace std;
     
    class Som
        {
        int value;
     
        public:
            Som(int tmpInt):value(tmpInt){}
            int getValue(void) {return value;}
            int operator + (Som tmpSom) {int res = value + tmpSom.getValue();return res;}
        };
     
    int main()
        {
        Som a(5);
        Som b(6);
     
        cout << "som = " << a+b;
        return 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
    23
    24
     
    #include <iostream>
     
    using namespace std;
     
    class Som
        {
        int value;
     
        public:
            Som(int tmpInt):value(tmpInt){}
            int getValue(void) {return value;}
     
            int operator + (Som *tmpSom) {int res = value + tmpSom->getValue();return res;}
        };
     
    int main()
        {
        Som *a = new Som(5);
        Som *b = new Som(6);
     
        cout << "som = " << a+b;
        return 0;
        }

  2. #2
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Bonjour,

    Tout d'abord, effectuer des opérations sur des objets, qu'ils soient créés statiquement ou dynamiquement ne fait pas de différence.
    Ensuite, on prend les arguments par référence dans les surcharges d'opérateur. Je dirais même par référence constante, vu qu'ils ne sont pas modifiés.
    Comme operator+() ne vient pas modifier les membres de ta classe, cette fonction est const elle aussi.
    Aussi, tu peux directement accéder aux membres privés de tmpSom étant donné qu'il s'agit d'une référence de Som et que operator+() est elle-même une fonction membre de cette classe.
    Voilà ce que ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int operator+(const Som& tmpSom) const
    {
    	int res = value + tmpSom.value;
    	return res;
    }
    Enfin, pour l'appel, il faut déréférencer les pointeurs (car ce sont des Som que tu sommes, pas des pointeurs !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main()
    {
        Som* a = new Som(5);
        Som* b = new Som(6);
     
        cout << "som = " << (*a) + (*b);
        return 0;
    }
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 55
    Par défaut
    Merci beaucoup pour cette réponse claire et détaillée.

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

Discussions similaires

  1. Instanciation dynamique d'un tableau
    Par polo54 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 08/06/2006, 10h37
  2. Surchage opérateur d'assignation =
    Par Rodrigue dans le forum C++
    Réponses: 14
    Dernier message: 11/05/2006, 09h14
  3. Instanciation dynamique
    Par yon386 dans le forum C++
    Réponses: 5
    Dernier message: 15/02/2006, 21h32
  4. [VB.NET] instanciation dynamique
    Par lucie.houel dans le forum ASP.NET
    Réponses: 1
    Dernier message: 21/11/2005, 12h54
  5. Instanciation dynamique d'ActiveX
    Par cathar_rhythm dans le forum MFC
    Réponses: 12
    Dernier message: 28/06/2005, 08h11

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