Surcharge d'opérateur en C++

jc -  
 Dante -
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. Krizniak Messages postés 26 Statut Membre 4
     
    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
  2. Cqqn Messages postés 975 Statut Membre 21
     
    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.
    0
    1. marvinrouge
       
      bravo aussi à CCM d'exister qui nous permet de nous entre-aider via le Net !
      0
  3. marvinrouge
     
    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 !
    0
    1. jc
       
      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...
      @+
      0
    2. Cqqn Messages postés 975 Statut Membre 21
       
      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.
      0
      1. marvinrouge > Cqqn Messages postés 975 Statut Membre
         
        tu 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
        0
  4. jc
     
    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 ???
    0
    1. marvinrouge
       
      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
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. BOLBO
     
    alor JC, on ecoute po les correction en cour? ;)
    0
  7. Cqqn Messages postés 975 Statut Membre 21
     
    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.
    0
  8. jc
     
    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.
    0
  9. Dante
     
    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
    **
    }
    0