OVH Cloud OVH Cloud

Design de classe Vecteur

18 réponses
Avatar
Plotark
Bonjour,

De quelle maniere vaut il mieux implementer l'addition dans une classe
Vector? En methode ou en fonction amie?
Vector operator + (const Vector&) const;
ou
friend Vector operator + (const Vector&,const Vector&);

Je vois souvent la premiere forme mais la deuxieme me semble plus proche
de la realite mathematique ;-)

Merci par avance,

Plotark

10 réponses

1 2
Avatar
Christophe Lephay
Plotark wrote:
De quelle maniere vaut il mieux implementer l'addition dans une classe
Vector? En methode ou en fonction amie?
Vector operator + (const Vector&) const;
ou
friend Vector operator + (const Vector&,const Vector&);

Je vois souvent la premiere forme mais la deuxieme me semble plus
proche de la realite mathematique ;-)


Pour trancher, il faut voir de quels constructeurs dispose la classe Vector
(pour en connaitre la sémantique). Par exemple, si il y a un constructeur
Vector( int ), j'aurais tendance à préférer la seconde alors que si les
seuls constructeurs sont Vector( int = 0, int = 0 ) et (ocasionnellement)
Vector( const Vector& ), la première me semble très bien faire l'affaire...

Chris

Avatar
Laurent Deniau
Plotark wrote:
Bonjour,

De quelle maniere vaut il mieux implementer l'addition dans une classe
Vector? En methode ou en fonction amie?
Vector operator + (const Vector&) const;
ou
friend Vector operator + (const Vector&,const Vector&);

Je vois souvent la premiere forme mais la deuxieme me semble plus proche
de la realite mathematique ;-)


Sauf implementation plus technique, une facon classique et simple consiste a ecrire

Vector& operator += (const Vector&);

comme fonction membre et

Vector& operator + (const Vector&, const Vector&);

en inline qui l'utilise directement (2 lignes).

a+, ld.

--
[ Laurent Deniau -- Scientific Computing & Data Analysis ]
[ CERN -- European Center for Nuclear Research ]
[ - http://cern.ch/Laurent.Deniau ]
[ -- One becomes old when dreams become regrets -- ]

Avatar
Philippe Guglielmetti
pourquoi se fatiguer quand il existe std::valarray<T> ?
STL implémente les op.math. en méthodes, ce qui me semble à la fois plus
"sur" que la fonction amie (si on définit une classe AngleDEuler dérivée de
tes vecteurs, avec sa propre addition, laquelle sera appelée ?) , plus
"propre" (l'addition est extrêmement amie avec tes vecteurs), voire plus
efficace (le compilo pourra plus facilement mettre le code inline tout seul
et optimiser le code si tu fais des vecteurs 3D par exemple).
--
Philippe Guglielmetti - www.dynabits.com
"Plotark" a écrit dans le message de
news:bn0781$9qp$
Bonjour,

De quelle maniere vaut il mieux implementer l'addition dans une classe
Vector? En methode ou en fonction amie?
Vector operator + (const Vector&) const;
ou
friend Vector operator + (const Vector&,const Vector&);

Je vois souvent la premiere forme mais la deuxieme me semble plus proche
de la realite mathematique ;-)

Merci par avance,

Plotark


Avatar
Guillaume Gourdin
pourquoi se fatiguer quand il existe std::valarray<T> ?


Comment ça marche, les std::valarray<T> ?

Avatar
Philippe Guglielmetti
euh... bizarre, j'étais sur que valarray était membre de la STL "standard",
mais je la trouve pas sur le site SGI... pourtant elle existe dans
http://www.stlport.org/ et sur VC6 et VC7...
je te copie la doc de VC6 (en anglais, désolé...)
The template class describes an object that controls a varying-length
sequence of elements of type T. The sequence is stored as an array of T. It
differs from template class vector in two important ways:

a.. It defines numerous arithmetic operations between corresponding
elements of valarray<T> objects of the same type and length, such as x cos(y) + sin(z).
b.. It defines a variety of interesting ways to subscript a valarray<T>
object, by overloading operator[].
En gros c'est un vecteur spécialisé pour les valeurs numériques.
--
Philippe Guglielmetti - www.dynabits.com
Avatar
Michaël Monerau
Philippe Guglielmetti wrote:
pourquoi se fatiguer quand il existe std::valarray<T> ?
STL implémente les op.math. en méthodes, ce qui me semble à la fois
plus "sur" que la fonction amie (si on définit une classe AngleDEuler
dérivée de tes vecteurs, avec sa propre addition, laquelle sera
appelée ?) , plus "propre" (l'addition est extrêmement amie avec tes
vecteurs), voire plus efficace (le compilo pourra plus facilement
mettre le code inline tout seul et optimiser le code si tu fais des
vecteurs 3D par exemple).


http://www.giromini.org/usenet-fr/repondre.html
--
<=- Michaël "Cortex" Monerau -=>

Avatar
Fabien LE LEZ
On Mon, 20 Oct 2003 11:56:31 +0200, "Philippe Guglielmetti"
wrote:

pourquoi se fatiguer quand il existe std::valarray<T> ?


Simple entraînement, j'imagine...

--
http://www.giromini.org/usenet-fr/repondre.html

Avatar
kanze
"Philippe Guglielmetti" wrote in message
news:<3f93cc1e$0$3656$...

euh... bizarre, j'étais sur que valarray était membre de la STL
"standard", mais je la trouve pas sur le site SGI... pourtant elle
existe dans http://www.stlport.org/ et sur VC6 et VC7...


Ne confond pas STL et bibliothèque standard. Grosso modo, la
bibliothèque standard vient de trois sources : la STL (pour les
collections, les itérateurs et les algorithmes), la norme de facto
existante, originalement de USL (iostream, complex) et des innovations
pûres et simples du comité (valarray, locale). Pour commencer, en tout
cas -- par la suite, même la partie USL a été assez modifiée (et surtout
templatisée).

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Avatar
Gabriel Dos Reis
writes:

| existante, originalement de USL (iostream, complex) et des innovations
| pûres et simples du comité (valarray, locale).

Valarray existait chez Roguewave comme float_array, double_array ou
longdouble_array (orthographe à vérifier mais cette bibliothèque
existait).

-- Gaby
Avatar
kanze
Gabriel Dos Reis wrote in message
news:...
writes:

| existante, originalement de USL (iostream, complex) et des
| innovations pûres et simples du comité (valarray, locale).

Valarray existait chez Roguewave comme float_array, double_array ou
longdouble_array (orthographe à vérifier mais cette bibliothèque
existait).


Je n'ai pas l'impression que les classes RogueWave s'y ressemblait
tellement, et d'après mes souvenirs, elles n'en étaient pas
l'inspiration. Mais j'avoue que je n'en suis pas très sûr -- c'est une
partie de la norme qui ne m'a jamais particulièrement intéressée.

Je crois qu'il y avait aussi quelque chose de semblable de locale chez
Roguewave aussi, non ?

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

1 2