OVH Cloud OVH Cloud

Redefinition d'operateurs sur des types

4 réponses
Avatar
bberu2000
Bonjour,

Je sais qu'il est possible de redefinir des operateurs (+, -, * ou /)
sur des classes.
Mais est il possible de redefinir ces memes operateurs sur des types
simples ?
par exemple, en ayant un type vecteur tel que :

typedef int vector[100];

est il possible de redefinir l'operateur + pour addissionner deux
vecteurs ?

Merci.
Bruno

4 réponses

Avatar
Matthieu Moy
(bberu) writes:

par exemple, en ayant un type vecteur tel que :

typedef int vector[100];


Pourquoi ne pas encapsuler ça dans une classe, justement ?

--
Matthieu

Avatar
Falk Tannhäuser
bberu wrote:

Je sais qu'il est possible de redefinir des operateurs (+, -, * ou /)
sur des classes.
Mais est il possible de redefinir ces memes operateurs sur des types
simples ?


Non.

par exemple, en ayant un type vecteur tel que :

typedef int vector[100];

est il possible de redefinir l'operateur + pour addissionner deux
vecteurs ?


std::valarray devrait faire l'affaire :

int const a[5] = { 1, 4, 9, 16, 25 };
int const b[5] = { 1, 2, 4, 8, 16 };

std::valarray<int> va(a, 5), vb(b, 5);
std::valarray<int> vc = va + vb;
for(unsigned i=0; i<vc.size(); ++i)
std::cout << ' ' << vc[i];

Sinon il faut définir ses propres classes afin de pouvoir surcharger
les opérateurs.

Falk

Avatar
Alexandre
bonjour,
"bberu" a écrit dans le message de news:

Bonjour,

Je sais qu'il est possible de redefinir des operateurs (+, -, * ou /)
sur des classes.
Mais est il possible de redefinir ces memes operateurs sur des types
simples ?
par exemple, en ayant un type vecteur tel que :

typedef int vector[100];

est il possible de redefinir l'operateur + pour addissionner deux
vecteurs ?


non car un tableau C n'est pas une valeur, or un opérateur + doit retourner
une valeur nouvelle...



Merci.
Bruno


Avatar
kanze
Alexandre wrote:

"bberu" a écrit dans le message de news:


Je sais qu'il est possible de redefinir des operateurs (+, -, * ou
/) sur des classes. Mais est il possible de redefinir ces memes
operateurs sur des types simples ?



Non.

par exemple, en ayant un type vecteur tel que :

typedef int vector[100];

est il possible de redefinir l'operateur + pour addissionner deux
vecteurs ?


non car un tableau C n'est pas une valeur, or un opérateur + doit
retourner une valeur nouvelle...


Et même. Pour surcharger un opérateur, il faut qu'au moins un des
paramètres soit soit un type de classe, soit un enum, soit une
référence
sur un type de classe ou un enum.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34