Partage
  • Partager sur Facebook
  • Partager sur Twitter

a

a

28 juin 2013 à 23:40:40

a

-
Edité par 238 7 juillet 2024 à 12:40:46

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
29 juin 2013 à 0:15:23

La première fonction est générale, elle est là pour dire "quand vous voulez surcharger l'opérateur +, la fonction c'est ça". Tu dois remplacer Objet par le nom de ta classe, et c'est ce qui se passe dans la deuxième fonction.

  • Partager sur Facebook
  • Partager sur Twitter
29 juin 2013 à 16:35:55

a

-
Edité par 238 7 juillet 2024 à 12:40:50

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
29 juin 2013 à 16:48:46

Tu veux ce code là ?

Duree operator+(Duree const& a, Duree const& b);
  • Partager sur Facebook
  • Partager sur Twitter
29 juin 2013 à 22:38:34

a

-
Edité par 238 7 juillet 2024 à 12:40:54

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
29 juin 2013 à 23:57:31

Ce qu'il faut que tu mette ? Les instructions pour additionner tes deux objets, c'est à dire ici faire en sorte d'avoir un objet Duree dont chaque membre est la somme des membres de même identificateur des deux objets passés en argument. Exemple inutile parce que j'additionne deux `int` alors que le C++ le fait nativement.

class Stupid
{
    public:
        Stupid operator+(const Stupid & a, const Stupid & b)
        {
                Stupid temp;
                temp.var = a.var + b.var;
                return temp;
        }
    private:
        int var;
}

A noter que normalement, operator+ devrait être libre et non une méthode de la classe.

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 0:09:47

a

-
Edité par 238 7 juillet 2024 à 12:41:00

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
30 juin 2013 à 0:15:15

Il faut mettre

Duree operator+(Duree const& a, Duree const& b);
dans ta classe.
  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 0:29:29

a

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

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
30 juin 2013 à 0:33:03

C'est tout bête : Duree:: permet de dire de quelle classe vient la fonction que tu appelle. Du coup, quand tu fais Duree::Duree, le compilateur comprend que tu veux accéder au constructeur de la classe. Tu dois faire ceci :

Duree Duree::operator+(Duree const& a, Duree const& b);
  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 0:45:53

a

-
Edité par 238 7 juillet 2024 à 12:41:07

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
30 juin 2013 à 0:54:38

Il ne faut pas le mettre dans le prototype dans la classe, juste dans le fichier source.

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 0:57:31

a

-
Edité par 238 7 juillet 2024 à 12:41:16

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
30 juin 2013 à 0:58:05

C'est ça. Mais compile, tu auras une réponse plus rapide. :)

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 1:04:44

a

-
Edité par 238 7 juillet 2024 à 12:41:19

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
30 juin 2013 à 1:05:28

Et c'est quoi l'erreur ? Toujours la même ?

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 1:06:52

Il y a une erreur de informaticienzero: l'opérateur+ dans la classe ne prend qu'un seul paramètre (Le compilateur devrait le dire). L'opérande de gauche est le this, l'opérande de droite la paramètre.
La fonction libre prend 2 paramètres.

struct A {
  int m_i;

  A(int i)
  : m_i(i)
  {}

  A operator+(const A& other) const
  { return A(m_i + other.m_i); }
};

//ou en fonction libre:

A operator+(const A& a, const A& b)
{ return A(a.m_i + b.m_i); }


Hormis quelques règles sur le nombre des paramètres par exemple, les opérateurs sont des fonctions tous ce qu'il y a de plus normal.

A a(1);
A b(2);

A c = a+b; //= c.m_i == 3
A d = a.operator+(b); // d.m_i == 3 (membre de classe)
//ou
A d = operator+(a,b); // d.m_i == 3 (fonction libre)



-
Edité par jo_link_noir 30 juin 2013 à 1:07:46

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 1:09:16

a

-
Edité par 238 7 juillet 2024 à 12:41:23

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
30 juin 2013 à 1:09:21

Ah oui bien vu ! Je suis tellement habitué à utiliser la version libre que j'avais oublié ce détail. M'enfin le tutoriel devrait être corrigé sur ce point.

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 1:14:07

Artanno62 a écrit:

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 ?

other: une variable...
  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 1:15:37

a

-
Edité par 238 7 juillet 2024 à 12:41:34

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 1:56:04

jo_link_noir a écrit:

l'opérateur+ dans la classe ne prend qu'un seul paramètre (Le compilateur devrait le dire). L'opérande de gauche est le this, l'opérande de droite le paramètre.

Sinon, mettre les erreurs du compilateur, c'est bien aussi, "ça ne fonctionne pas" est un peu limite.

-
Edité par jo_link_noir 30 juin 2013 à 1:56:27

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 2:41:58

a

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

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
30 juin 2013 à 3:17:27

jo_link_noir a écrit:

jo_link_noir a écrit:

l'opérateur+ dans la classe ne prend qu'un seul paramètre (Le compilateur devrait le dire). L'opérande de gauche est le this, l'opérande de droite le paramètre.

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 5:44:34

Le message complet: ... must take either zero or one argument. Plus qu'à configurer l'IDE pour afficher entièrement les erreurs et apprendre à lire ;).

-
Edité par jo_link_noir 30 juin 2013 à 5:45:17

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 14:41:32

a

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

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 14:51:55

a

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

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 14:58:58

Ici : http://www.siteduzero.com/informatique/tutoriels/programmez-avec-le-langage-c/les-operateurs-arithmetiques-1

"Même si l'on parle de classe, ceci n'est pas une méthode. C'est une fonction normale située à l'extérieur de toute classe."

Dans le premier encadré avec une bulle Info.

Mets ton opérateur hors de ta classe (c'est ce qu'on nomme fonction libre), et ceci marchera.

Pour le contenu, le code est donné plus loin :

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


-
Edité par Freedom 30 juin 2013 à 15:02:28

  • 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 à 15:04:16

a

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

  • Partager sur Facebook
  • Partager sur Twitter
30 juin 2013 à 15:10:51

En priorité mets les fonctions en libre et non en membre (ie dans la classe). Réserves les fonctions membres lorsque c'est vraiment nécessaire, c'est à dire lorsque l'implémentation à nécessairement besoin des éléments internes de la classe.

Dans le cas des opérateurs binaires, généralement ce n'est pas nécessaire car l'on peut redonner le travail à l'opérateur +=/*=/etc (qui eux sont membres).

  • Partager sur Facebook
  • Partager sur Twitter
FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost