Les Allergies
Alimentaires
Posez votre question Signaler

Surcharge d'opérateur en C++

jc - Dernière réponse le 3 août 2007 à 14:14
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.
Lire la suite 

Surcharge d'opérateur en C++ »

13 réponses
Réponse
+1
moins plus
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..."
Ajouter un commentaire
Réponse
+0
moins plus
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.
marvinrouge - 10 févr. 2003 à 13:02
bravo aussi à CCM d'exister qui nous permet de nous entre-aider via le Net !
Ajouter un commentaire
Réponse
+0
moins plus
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 !
jc - 10 févr. 2003 à 13:53
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...
@+
Cqqn- 10 févr. 2003 à 15:20
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.
marvinrouge - 10 févr. 2003 à 15:44
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
Ajouter un commentaire
Réponse
+0
moins plus
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 ???
marvinrouge - 11 févr. 2003 à 12:48
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
Ajouter un commentaire
Réponse
+0
moins plus
alor JC, on ecoute po les correction en cour? ;)
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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
**
}
Ajouter un commentaire
Ce document intitulé « surcharge d'opérateur en C++ » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?