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

Krizniak Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   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
Cqqn Messages postés 964 Date d'inscription   Statut Membre Dernière intervention   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
marvinrouge
 
bravo aussi à CCM d'exister qui nous permet de nous entre-aider via le Net !
0
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
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
Cqqn Messages postés 964 Date d'inscription   Statut Membre Dernière intervention   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
marvinrouge > Cqqn Messages postés 964 Date d'inscription   Statut Membre Dernière intervention  
 
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BOLBO
 
alor JC, on ecoute po les correction en cour? ;)
0
Cqqn Messages postés 964 Date d'inscription   Statut Membre Dernière intervention   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
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
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