Surcharge d'opérateur en C++

je serai vraiment soulagé de trouver de l'aide sur mon foutu exo de C++.
Pour résumer l'exo :
on a une classe Vecteur composée d'un int nbLignes et d'un int tab[MAX].
nbLignes représente la dimension du Vecteur et tab ses coordonnées.

Je dois définir (entre autres) un opérateur [] qui permet d'effectuer les opérations suivantes :
(pour un Vecteur v et un entier x)
v[i]=x
ET
x=v[i]

bon, en clair, moi j'ai réussi à faire l'affectation "x=v[i]" mais pas l'autre.
J'ai définit mon opérateur ainsi :

int Vecteur::operator[] (const int i)
{
return (tab[i]);
}

Cette fonction membre me permet d'affecter un interger à un integer.
Mais je n'arrive pas à effectuer l'affectation v[i]=x.

Dois-je utiliser un pointeur ?
Dois-je surdéfinir l'opérateur = ?
Dois-je surcharger la surdéfinition de l'opérateur ?
Dois-je attendre bêtement la correction ?
Dois-je baisser les bras ?
....

Merci d'avance pour vos solutions.

8 réponses

  1. On va pas te donner la soluce, confer mon crédo ci-dessous...

    Cependant, je peux te mettre sur la voie en te disant : "Si tu utilisais les références ?"
    Si tu ne vois toujours pas avec ca, ma foi... "Où peut-on trouver un symbole & permettant de traiter des références. A quoi servent-elles ???"

    Allez, n'hésite pas à me rappeler si nécessaire :-)

    Krizniak
    Mon crédo : "Aide-toi, le ciel t'aidera..."
    1. Salut jc,
      euh si dans la fenêtre "rechercher" tu tapes :
      [c++] surchage d'operateur,
      tu auras un cours complet donné par marvinrouge à bolo.
      D'ailleurs bravo marvinrouge et bolo, vous avez parfaitement illustré la vocation de ce site.
      A +

      Le respect, y'a que ça de vrai!
      Entre autres.
      1. bravo aussi à CCM d'exister qui nous permet de nous entre-aider via le Net !
    2. aller je te met sur la piste car c'est pas évident:

      il y a 2 formes différentes à la méthode à écrire TOUTES les 2

      ** Vecteur::operator[] (const int i) **
      {
      **
      }

      ** Vecteur::operator[] (const int i) **
      {
      **
      }

      les ** sont les différences entre les 2 méthodes (ATTENTION des fois y'a rien à la place de **)

      courage

      si tu rames trop indique le ici !
      1. je crois que je connais l'une des 2 méthodes (même si je ne l'ai pas encore vue en cours) :
        la première est un constructeur de l'objet Vecteur qui prend en paramètre un "const int" pour pouvoir convertir le const int en Vecteur lors de l'égalité.
        C'est ça ?
        (je rappelle que ce sont des parties de programme que je n'ai pas encore vues).

        merci pour votre aide précieuse.
        En espérant qu'elle continuera...
        @+
      2. En tous cas bon courage, j'espère avoir un jour la nécessité de maîtriser ces notions, 'commence à me lasser de VBA.
        Euh sinon, marvinrouge, ça te dérange si je copie/colle ton cours?
        Parce que ce sera toujours ça de bien expliqué le jour où je mettrais vraiment les mains dans le cambouis. :)

        Le respect, y'a que ça de vrai!
        Entre autres.
      3. @Cqqntu fais ce que tu veux (copier/coller/sniffer de la colle, etc ...) avec mon cours

        plus sérieusement: si je le mets à dispo de tous ici c'est pour que ça serve (tout de suite) ou plus tard (tu le sauves sur ta machine)

        si tu veux abandonner VB, passes à Java !

        @+

        et bon courage
    3. boulet,boulet,boulet.
      Je suis un boulet.
      j'ai trouvé la solution : il suffisait de déclarer un "int& operator[](const int)".

      Je vous remercie tous pour votre aide.
      juste une question : cemment on fait pour supprimer mon sujet ?

      Encore merci.
      @+, j'espère.

      PS: marvinrouge : t'as fait quoi comme étude ? Ecole d'ingénieur en informatique ???
      1. n'effaces pas ton sujet: meme si la réponse te semble simple maintenant. d'autres personnes peuvent avoir le même problême et rrouver la réponse ici.

        j'ai fait un IUP maths/info à Dauphine (ou j'ai appris plein de trucs cools en info ...)
        puis un Dess Ingénierie d'Aide à la Décision

        marvinrouge
    4. Ah ben oui, faut pas effacé, moi j'ai une formation d'Analyste Programmeur, et on nous a dit que le but ct d'avoir les bases, eh bien je dirais que ce sont les briques élémentaires, genre les Quarks (bon j'exagère c vrai).
      Donc l'autoformation après c très important pour ceux qui sont dans mon cas, et les posts de demande d'aide sont très utiles.

      Le respect, y'a que ça de vrai!
      Entre autres.
      1. j'ai bien fait de ne pas supprimer ce message, en effet.
        Il va me permettre de vous poser une deuxième question (Bolbo, ta gueule).

        J'ai entendu parler, en C++, de l'existence de "variables système" qui renvoient le type d'OS (ou le type de machine?).
        Le cadre dans lequel je voudrais les utiliser est le suivant :
        J'utilise chez moi WIN98se et VisualC++.
        J'utilise à l'iut un TX relié à un serveur ibm sur lequel tourne UNIX (le compilateur utilisé est xlC).

        Je voudrais effectuer une compilation conditionnée permettant d'utiliser la commande " system("CLEAR") " sous UNIX et " system("CLR") " sous dos.
        Je voudrais donc savoir le nom des "variables système" que je dois mettre après mon " #ifdef ".
        (serai-ce _WIN32 et _MAC ??? Dans ce cas, comment les utiliser dans le cas qui m'intéresse ???).
        merci d'avances pour vos réponses.
        1. int& Vecteur::operator[] (const int i) ** // pour v[i]=x
          {
          // en retournant une référence non constante, la valeur pourra être modifiée
          **
          }

          int Vecteur::operator[] (const int i) const // pour x=v[i]
          {
          // ici une copie du 'int' présent dans le vecteur est retournée
          // la modification est perdue (si elle est autorisée) quand la copie est détruite
          **
          }