C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Re: operator@()

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
PRORIOL Fabien
Guest





PostPosted: Sun Apr 11, 2004 12:22 pm    Post subject: Re: operator@() Reply with quote



En faite, je serais toi, je dériverais Vecteur de Matrice; en effet,
n'est-ce pas une matrice a une seul colonne???

µDe cette façon, M * V ; V + V ; V + M ........ tout fonctionne; biensur il
faut bien ecrire les lancement d'exception, si on essay de faire une
operation interdite (nombre de ligne et de colonne non compatible pourla
multiplication par exemple).

J'ai écrit une Template Matrice tres tres complete, dont je donnerais les
source bientot; qui jere Matrice, MatriceCarre, MatriceTriSup,
MatriceTriInf, Vector; qui contient un bon nombre d'operation et de fonction
simpa :
-reso d'equation lineaire
-Choleski
-det
-Inversion
..........

Au pire, je peut te l'envoyer en privé comme exemple.
Dans quel école tu est??


@+Fab


Back to top
Anthony Fleury
Guest





PostPosted: Tue Apr 13, 2004 7:22 am    Post subject: Re: operator@() Reply with quote



PRORIOL Fabien wrote:

Quote:
En faite, je serais toi, je dériverais Vecteur de Matrice; en effet,
n'est-ce pas une matrice a une seul colonne???


Disons que cette question était plutot un pretexte pour me remettre à jour
sur les opérateurs vu que je fais rarement du C++ et plutot du C j'ai des
oublies sur des trucs simples et les vérifications dans The C++ programming
language ne suffisent pas tout le temps Smile [au contraire parfois ca
m'embrouille même]

Et de toute facon à ce moment là ils n'avaient pas vu la dérivation en cours
(ni les exceptions) donc pas question de mettre l'un ou l'autre dans un TP
qui avait de toute facon pour but de nous faire écrire une fonction amie
entre un vecteur et une matrice, les deux n'ayant explicitement aucune
relation d'heritage entre eux, et il faut bien respecter les consignes des
TPs des profs !

Anthony - étudiant à Polytech'Grenoble
--
"I should have seen it would be this way
I should have known from the start what she's up to
When you have loved and you've lost someone
You know what it feels like to lose" -- The Rasmus

Back to top
drkm
Guest





PostPosted: Sat Apr 24, 2004 10:06 pm    Post subject: Re: operator@() Reply with quote



Anthony Fleury <fleury_anthony (AT) hotmail_ (DOT) com> writes:

Quote:
Dans TC++PL dans l'exemple matrice, + et * sont déclarés en friend
et il est dit que "À l'inverse, si une conversion de type implicite
est désirée pour tous les opérandes d'une opération, la fonction qui
l'implémente doit être une fonction non membre recevant un argument
référence const ou un argument non référence". Je ne suis pas
vraiment sûr de bien comprendre cette phrase ?

Si tu veux permettre une conversion implicite pour l'opérande gauche
d'un opérateur, cet opérateur ne peut être membre. Cela voudrait dire
qu'un objet temporaire serait construit lors de la conversion, sur
lequel objet sera appelé l'opérateur, puis lequel objet sera détruit.
Que deviendront les modifications apportées par l'appel de
l'opérateur ? Et s'il s'agit d'un opérateur constant, quel opérateur
sera appelé ?

De plus, une conversion implicite ne peut être accordée lorsque le
paramètre formel est une référence. Car un objet temporaire sera créé
lors de la conversion, modifié dans le corps de la fonction, puis
détruit. Sauf s'il s'agit d'une référence constante, auquel cas la
conversion implicite peut avoir lieu.

Quote:
Dans le cas des matrices,
matrice m1, m2;

m1+m2;

Cette opération appelera m1.operator+(m2); sans conversion implicite
à ma connaissance ? ai-je manqué quelque chose de trivial ?

Nop.

Quelques exemples. Le premier illustre l'interdiction d'une
conversion implicte lors de l'appel d'une fonction, pour un paramètre
formel référence non constante. Le second, le problème de la
conversion implicite sur l'opérande de gauche d'un opérateur.

void f( SomeType & st )
{
// Ici, on modifie très certainement `st', puisqu'il s'agit
// d'une référence non constante. Si l'on permettait une
// conversion implicite, `st' ferait référence à un objet
// temporaire, détruit au sortir de `f()'.
}

class C
{
:public
C & operator+=( C const & other ) ;
C const & operator+( C const & other ) ;
} ;

class D
{
:public
operator C() const ;
D & operator+=( D const & other ) ;
} ;

C const &
operator-( C const & left , C const & right ) ;

C c ;
D d ;

c += d ; // ok, conversion de l'opérande droite
d += c ; // KO, pas de conversion de l'opérande gauche

C c1 = c + d ; // ok, conversion de l'opérande droite
C c2 = d + c ; // KO, pas de conversion de l'opérande gauche

C c3 = c - d ; // ok, conversion de l'opérande droite
C c4 = d - c ; // ok, conversion de l'opérande gauche

Code non testé.

--drkm

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.