Partage
  • Partager sur Facebook
  • Partager sur Twitter

a

a

30 juin 2013 à 15:19:22

a

-
Edité par 238 7 juillet 2024 à 12:42:52

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 15:20:47

Si, tu vas avoir besoin d'un operator+= dans la classe (reprends le tuto, il y a une partie dédiée à cet opérateur).
  • Partager sur Facebook
  • Partager sur Twitter
FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
30 juin 2013 à 16:12:35

a

-
Edité par 238 7 juillet 2024 à 12:42:55

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 16:16:29

Il te dit que tu peux écrire a+b, et en effet tu peux, mais comme tu n'as pas dit au compilateur comment calculer a+b, le compilateur doit te dire qu'il ne sait pas faire.

Vas jusqu'à la partie "Quelques tests" du tuto avant de tester. Et au besoin tu as la section "Telechargement" avec son code.

  • Partager sur Facebook
  • Partager sur Twitter
FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
30 juin 2013 à 18:56:03

a

-
Edité par 238 7 juillet 2024 à 12:42:57

  • Partager sur Facebook
  • Partager sur Twitter
1 juillet 2013 à 10:09:38

a

-
Edité par 238 7 juillet 2024 à 12:42:59

  • Partager sur Facebook
  • Partager sur Twitter
1 juillet 2013 à 10:22:44

En règle générale comme l'a dit Freedom, on code d'abord le += -= /= *= en fonction membre (dans la classe) puis on code l'operateur correspondant + - / * en dehors de la classe en faisant appel au précédent.

duree operator+(duree d1 , const duree &d2)

{

d1 += d2;

return d1;

}

-
Edité par Cytosol 1 juillet 2013 à 10:24:06

  • Partager sur Facebook
  • Partager sur Twitter
1 juillet 2013 à 11:17:27

a

-
Edité par 238 7 juillet 2024 à 12:43:04

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
1 juillet 2013 à 11:20:30

Artanno62 a écrit:

Ou est mon souci la s'il vous plait, je ne le trouve pas ...

int resultat = duree1 + duree2;

Tu tenté de stocker un objet Durée dans un int, y'a rien qui te choque ?

  • Partager sur Facebook
  • Partager sur Twitter
1 juillet 2013 à 11:31:48

sinon, juste une petite remarque rapide, dans ton opérateur +, si c'est pour faire une copie d'un paramètre direct, autant le passer par copie:

Duree operator+(Duree a, Duree const& b)
{
    a += b;
    return a;
}

Dans le pire des cas, ça change rien, mais avec un peu de chance, ton compilo peut optimiser la copie.

-
Edité par epso 1 juillet 2013 à 11:32:10

  • Partager sur Facebook
  • Partager sur Twitter
1 juillet 2013 à 13:10:05

a

-
Edité par 238 7 juillet 2024 à 12:43:08

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
1 juillet 2013 à 13:26:31

Artanno62 a écrit:

Duree duree3();

Normal que ça ne fonctionne pas, on ne déclare pas un objet comme ça.

  • Partager sur Facebook
  • Partager sur Twitter
1 juillet 2013 à 14:33:35

a

-
Edité par 238 7 juillet 2024 à 12:43:10

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
1 juillet 2013 à 14:39:47

Ah oui je vois, le constructeur met les trois arguments à zéro par défaut. Bref c'est pas ça. Quelle est l'erreur dans ce cas ? Là je peux trop rien dire.

  • Partager sur Facebook
  • Partager sur Twitter
1 juillet 2013 à 15:32:47

informaticienzero a écrit:

Artanno62 a écrit:

Duree duree3();

Normal que ça ne fonctionne pas, on ne déclare pas un objet comme ça.


Bah la tu déclares une fonction duree3 sans paramètres d'entrée qui renvoie une Durée.........

Sans les parenthèses, c'est mieux.

-
Edité par Cytosol 1 juillet 2013 à 15:33:17

  • Partager sur Facebook
  • Partager sur Twitter
1 juillet 2013 à 17:09:54

a

-
Edité par 238 7 juillet 2024 à 12:43:14

  • Partager sur Facebook
  • Partager sur Twitter
1 juillet 2013 à 17:14:38

Si t'as une fonction libre (pas dans la classe), ça permet de dire qu'on lui autorise tous les accès de la classe (privés y compris), donc de lire/modifier les attributs d'une classe. C'est donc la plus forte relation entre une classe et une classe/fonction en C++, et ça ne devrait presque jamais être utilisé, surtout pour de la surcharge d'opérateurs. C'est montré dans le cours pour connaître mais bon vaut mieux éviter et faire appel à += etc.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
1 juillet 2013 à 17:34:30

Cytosol a écrit:

ça ne devrait presque jamais être utilisé, surtout pour de la surcharge d'opérateurs

Sauf peut-être >> et <<. Mais sinon :

informaticienzero a écrit:

Quelle est l'erreur ?

  • Partager sur Facebook
  • Partager sur Twitter
1 juillet 2013 à 17:41:36

informaticienzero a écrit:

Cytosol a écrit:

ça ne devrait presque jamais être utilisé, surtout pour de la surcharge d'opérateurs

Sauf peut-être >> et <<. Mais sinon :

informaticienzero a écrit:

Quelle est l'erreur ?

A ce moment la, tu définis un toString() qui servira dès que tu veux une représentation textuelle de ta classe. C'est un peu Java-Like, mais je trouve que c'est quand même une bonne solution.

Ou alors, tu utilises des getters.

-
Edité par Cytosol 1 juillet 2013 à 17:41:57

  • Partager sur Facebook
  • Partager sur Twitter
1 juillet 2013 à 18:04:29

a

-
Edité par 238 7 juillet 2024 à 12:43:17

  • Partager sur Facebook
  • Partager sur Twitter
7 juillet 2024 à 13:27:42

Bonjour, on ne supprime pas ses messages après avoir reçu de l'aide, cela rend la discussions illisible. Je recopie le message d'origine pour archive et ferme ce sujet.

238 a écrit:

Bonjour,

Je trouve le tuto sur les surcharges d'opérateurs trés mal expliqué, plus précisément, cette partie la ...

http://www.noelshack.com/2013-26-1372455454-surchargesoperateurs.png

On me dit de mettre

Objet operator+(Objet const& a, Objet const& b);

dans une fonction, ensuite ceci

Duree operator+(Duree const& a, Duree const& b);

Mais je ne comprend pas du tout ... tout ce que j'ai c'est la classe Duree par default

Main:

#include <iostream>
#include "Duree.h"
 
using namespace std;
 
int main()
{
    Duree duree1(0, 10, 28), duree2(0, 15, 2);
}

Duree.cpp

#include "Duree.h"
 
using namespace std;
 
        Duree::Duree(int heures, int minutes, int secondes) : m_heures(heures), m_minutes(minutes), m_secondes(secondes)
        {
 
        }

Duree.h

#ifndef DUREE_H_INCLUDED
#define DUREE_H_INCLUDED
 
class Duree
{
    public:
 
        Duree(int heures = 0, int minutes = 0, int secondes = 0);
 
    private:
 
        int m_heures;
        int m_minutes;
        int m_secondes;
};
 
#endif // DUREE_H_INCLUDED

Que faire ?? Et ou s'il vous plait !! Merci d'avance !

Cordialement,

-Arta.

----------------------------------

Merci de ta réponse, peux tu écrire le code s'il te plait, j'ai du mal à voir ...

Cordialement,

-------------------------

SI possible ecrire une simple (comme dans le tuto) surcharges d'opérateur, juste mettre ce qu'il faut pour que je puissent comprendre, si possible dans la classe Duree

Merci de ton aide

----------------------------

Duree.h

class Duree
{
    public:
 
        Duree(int heures = 0, int minutes = 0, int secondes = 0);
        Duree operator+(const Duree & a, const Duree & b);
 
    private:
 
        int m_heures;
        int m_minutes;
        int m_secondes;
};

Duree.cpp

#include "Duree.h"
 
using namespace std;
 
        Duree::Duree(int heures, int minutes, int secondes) : m_heures(heures), m_minutes(minutes), m_secondes(secondes)
        {
 
        }
 
        Duree::Duree operator+(const Duree & a, const Duree & b)
        {
 
        }


Il m'indique une erreur ligne 9 (du .h) : "Duree:Duree" name the constructor, not the type.

Sinon un grand merci :)

-
Edité par 238 30 juin 2013 à 0:28:49

-------------------------------

EDIT :

J'ai cela ...

.cpp

#include "Duree.h"
 
using namespace std;
 
        Duree::Duree(int heures, int minutes, int secondes) : m_heures(heures), m_minutes(minutes), m_secondes(secondes)
        {
 
        }
 
        Duree::Duree operator+(Duree const& a, Duree const& b)
        {
 
        }

.h

#ifndef DUREE_H_INCLUDED
#define DUREE_H_INCLUDED
 
class Duree
{
    public:
 
        Duree(int heures = 0, int minutes = 0, int secondes = 0);
        Duree operator+(Duree const& a, Duree const& b);
 
    private:
 
        int m_heures;
        int m_minutes;
        int m_secondes;
};
 
#endif // DUREE_H_INCLUDED

Et cela ne marche pas ... Je ne comprend pas, je doit modifié quoi ?

Même erreur ...

Merci d'avance !

Cordialement,


-
Edité par 238 30 juin 2013 à 0:33:07

------------------------------------------------

Je vais me tiré une balle xD

#ifndef DUREE_H_INCLUDED
#define DUREE_H_INCLUDED
 
class Duree
{
    public:
 
        Duree(int heures = 0, int minutes = 0, int secondes = 0);
        Duree Duree::operator+(Duree const& a, Duree const& b);
 
    private:
 
        int m_heures;
        int m_minutes;
        int m_secondes;
};
 
#endif // DUREE_H_INCLUDED
#include "Duree.h"
 
using namespace std;
 
        Duree::Duree(int heures, int minutes, int secondes) : m_heures(heures), m_minutes(minutes), m_secondes(secondes)
        {
 
        }
 
        Duree Duree::operator+(Duree const& a, Duree const& b)
        {
 
        }

Tu doit vraiment être patient pour encore être la :p Merci ;)

------------------------------------------------------

#include "Duree.h"
 
using namespace std;
 
        Duree::Duree(int heures, int minutes, int secondes) : m_heures(heures), m_minutes(minutes), m_secondes(secondes)
        {
 
        }
 
        Duree Duree::operator+(Duree const& a, Duree const& b)
        {
 
        }
#ifndef DUREE_H_INCLUDED
#define DUREE_H_INCLUDED
 
class Duree
{
    public:
 
        Duree(int heures = 0, int minutes = 0, int secondes = 0);
        Duree operator+(Duree const& a, Duree const& b);
 
    private:
 
        int m_heures;
        int m_minutes;
        int m_secondes;
};
 
#endif // DUREE_H_INCLUDED

Comme cela ?!

---------------------------------------------

Cela ne fonctionne pas :s ...

J'ai tester sur un code simple comme celui ci,

#include <iostream>
 
using namespace std;
 
class Duree
{
public:
 
    Duree(int heures = 0, int minutes = 0, int secondes = 0) : m_heures(heures), m_minutes(minutes), m_secondes(secondes)
    {
 
    }
 
    Duree operator+(Duree const& a, Duree const& b)
    {
 
    }
 
private:
 
    int m_heures;
    int m_minutes;
    int m_secondes;
};
 
int main()
{
 
}

Cela ne fonctionne pas ...

----------------------------------------------

Wow, je suis débutant, c'est quoi le other ? On peux faire plus simple dans le genre de class que j'ai donné s'il vous plait ?

Merci ;)

EDIT : Toujours la même erreur ...

-
Edité par 238 30 juin 2013 à 1:09:34

--------------------------------------------------------

Donc ou est mon erreur s'il vous plait ? :)

Merci.

-------------------------------------------------------

http://www.noelshack.com/2013-26-1372552897-codeblock.png

Merci
--------------------------------------------------------

Bon écouté, je suis la pour avoir de l'aide, si je viens poster ici c'est que je complétement larguer ... Si vous ne voullez pas donné la methode, ni m'aider tempi, je demande à d'autre personne.

Cordialement,

EDIT :

// Cela fonctionne sa par contre ...
 
#ifndef DUREE_H_INCLUDED
#define DUREE_H_INCLUDED
 
class Duree
{
    public:
 
        Duree(int heures = 0, int minutes = 0, int secondes = 0);
        Duree& operator+=(Duree const& duree);
 
    private:
 
        int m_heures;
        int m_minutes;
        int m_secondes;
};
 
#endif // DUREE_H_INCLUDED

Si possible JE VEUX JUSTE un exemple ... Merci.

-
Edité par 238 30 juin 2013 à 14:48:24

--------------------------------------------------

Je peux juste ecrire le operator+ avec un seul arguement (Cela foncionne):

Duree operator+(Duree const& a);

Dans le tuto il en y'en a deux (Lui ne fonctionne pas).

Duree operator+(Duree const& a, Duree const& b)

Pourquoi ?

Merci d'avance !

-
Edité par 238 30 juin 2013 à 14:52:36

----------------------------------------------------

Super, cela fonctionne, mais alors dans quelle condition je doit mettre la surcharges DANS la classe .h ?

Merci d'avance !

---------------------------------------------------

  • Partager sur Facebook
  • Partager sur Twitter