Définir des opérateurs [Résolu]

cs_pingouin84k 68 Messages postés vendredi 28 octobre 2005Date d'inscription 9 janvier 2011 Dernière intervention - 26 janv. 2010 à 22:10 - Dernière réponse : Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention
- 27 janv. 2010 à 17:24
Bonjour,

J'aimerai définir des opérateurs +, -, * etc pour des objets de type Array.
Et pourquoi pas, définir des fonctions mathématiques sin, cos, exp, etc pour également des type Array.

Y a t'il un moyen ? Et si oui on fait comment ?

Merci pour votre aide :D
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 27 janv. 2010 à 12:36
3
Merci
Tu ne peux pas modifier les opérateurs de types systèmes (tel que les string, les integer, les tableaux etc...)

Il te faut créer une classe perso hérité et créer/surcharger les opérateurs.

Exemple :

Ici j'utilise une liste générique d'Integer

Public Class MaList
    Inherits List(Of Integer)

    Public Shared Operator +(ByVal Value1 As MaList, _
                             ByVal Value2 As MaList) As MaList
        Dim retValue As New MaList
        With retValue
            .AddRange(Value1)
            .AddRange(Value2)
        End With
        Return retValue
    End Operator

End Class


En suite j'utilise cette classe comme ceci :

        Dim Tableau1 As New MaList
        Dim Tableau2 As New MaList
        Dim Tableau3 As New MaList

        With Tableau1
            .Add(1)
            .Add(2)
            .Add(3)
        End With

        With Tableau2
            .Add(3)
            .Add(4)
            .Add(5)
        End With

        Tableau3 = Tableau1 + Tableau2
       'Ici, Tableau 3 contiendra les valeurs de Tableau1 et Tableau2 



Voila pour l'exemple.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.

Merci Mayzz 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 118 internautes ce mois-ci

Commenter la réponse de Mayzz
Meilleure réponse
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 27 janv. 2010 à 16:04
3
Merci
Et pour ma seconde question... Est ce que les fonctions mathematique de la classe Math peuvent être surchargé pour être utilisé avec ma classe perso ?


La réponse est: NON.

La classe Math est NotInheritable, de plus elle ne comporte que des fonctions partagés(Shared), ce qui implique qu'elle n'a pas besoin d'être instancié pour faire appel à ses fonctions :

Dim i As Integer = Math.Round(2.333, 0)'On ne déclare pas Math

Tu peux donc créer une classe NotInheritable dans ton projet et lui déclarer des fonctions paragés cela revient strictement au même. Je continu mon exemple avec des listes génériques :

Public NotInheritable Class Math2

    Public Shared Function RoundList(ByVal value As List(Of Double), _
                                     Optional ByVal digits As Integer = 0_
                                     ) As List(Of Double)
        Dim retValue As New List(Of Double)
        For Each Item As Double In value
            retValue.Add(Math.Round(Item, digits))
        Next
        Return retValue
    End Function

End Class

Que l'on pourra appeler comme ceci :

        Dim TabBase As New List(Of Double)
        Dim TabRounded As New List(Of Double)

        With TabBase
            .Add(3.998552)
            .Add(4.998525)
            .Add(85525.484421)
        End With

        TabRounded =  Math2.RoundList(TabBase, 2)

Et nous disposerons d'une fonction pour arrondir les valeurs d'une liste générique de 'Double'.

Petite précision :

.Net est une technologie, VB2005 est une EDI (IDE in english), la différence est la suivante :

VB6 => Technologie vb => Runtimes vb6
VB2003 => Technologie .NET1 => Version framework 1.1
VB2005 => Technologie .NET2 => Version Framework 2.0
VB2008 => Technologie .NET3 => Version Framework 3.5
VB2010 => Technologie .Net4 => Vesrion Framework 4.0

Ce que l'on nomme .Net est la technologie (VB de 2003 à 2010).

Tu es donc dans la bonne catégorie ;O)

Voila, ++

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.

Merci Mayzz 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 118 internautes ce mois-ci

Commenter la réponse de Mayzz
xranto 90 Messages postés mardi 6 octobre 2009Date d'inscription 31 mars 2014 Dernière intervention - 27 janv. 2010 à 00:18
0
Merci
Salut,
Je ne comprend pas très bien ce que tu veux dire par type Array mais on peut utiliser du type Variant et le transformer en Array après.
Commenter la réponse de xranto
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 27 janv. 2010 à 01:33
0
Merci
Salut,

En .Net, dans une classe tu peux définir les opérateurs en les déclarant comme ceci comme ceci :

Public [Overloads] Shared [Shadows] Operator {Opérateur} _
(ByVal value As {Type}) As {Type}
End Operator


Opérateur => Symbole de l'opérateur
Type => Le type de données

Ex:

Public Shared Operator +(ByVal value1 As MonType, _  
                         ByVal value2 As MonType _
                         ) As MonType
    Dim retVal As New MonType
    retVal.Prop1 = Value1.Prop1 & Value2.Prop1
    Return retVal
End Operator


Cet opérateur fait une concaténation de la propriété Prop1 de l'objet MyType lors de son addition.

Tu peux les surcharger lors ce que la classe est hérité.

Attention, parfois, les opérateurs nécessitent plusieurs paramètres ou plusieurs opérateurs, comme par exemple l'opérateur '=' qui ne peut être défini seul et s'accompagne toujours de l'opérateur '<>'

Plus d'infos ici

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Commenter la réponse de Mayzz
cs_pingouin84k 68 Messages postés vendredi 28 octobre 2005Date d'inscription 9 janvier 2011 Dernière intervention - 27 janv. 2010 à 12:02
0
Merci
Hum...

Dans mon cas j'essai de faire l'opération + avec des tableau de valeurs (je pensais que c'était le type Array, je me suis trompé apparement).

Du genre :

Dim a As Single()
Dim b As Single()

'je dimensionne mes tableaux
'je mets pleins de nombre dedans
'et j'aimerai pouvoir écrire ça :

Dim c as Single()
c = a + b

'où l'opération + aurait était définit
'justement je n'arrive pas à définir
'l'opération pour un tableau de single
Commenter la réponse de cs_pingouin84k
xranto 90 Messages postés mardi 6 octobre 2009Date d'inscription 31 mars 2014 Dernière intervention - 27 janv. 2010 à 12:25
0
Merci
Salut

Je pense qu'un peut de précision peut aider les gens a t'aider.

C'est du VB ca ou du VB.Net

Merci
Commenter la réponse de xranto
cs_pingouin84k 68 Messages postés vendredi 28 octobre 2005Date d'inscription 9 janvier 2011 Dernière intervention - 27 janv. 2010 à 15:12
0
Merci
Tu ne peux pas modifier les opérateurs de types systèmes (tel que les string, les integer, les tableaux etc...)


Ok c'est bien domage... Bon ta solution n'est guère compliqué...

En fait je savais déjà comment ajouter des opérateurs pour une classe perso, mais j'ai jamais su s'il était possible de modifier des opérateurs pour les types systèmes.


Et pour ma seconde question... Est ce que les fonctions mathematique de la classe Math peuvent être surchargé pour être utilisé avec ma classe perso ?



C'est du VB ca ou du VB.Net


Je suis bien dans la section VB.Net et VB 2005. Il y a une différence entre les 2 ? Sinon j'utilise VB 2008 Express.
Commenter la réponse de cs_pingouin84k
cs_pingouin84k 68 Messages postés vendredi 28 octobre 2005Date d'inscription 9 janvier 2011 Dernière intervention - 27 janv. 2010 à 17:02
0
Merci
Mayzz tu es un président !
Merci pour ton aide !
Commenter la réponse de cs_pingouin84k
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 27 janv. 2010 à 17:24
0
Merci
Pas de quoi, nous sommes la pour ca, dans la mesure du possible.

++


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Commenter la réponse de Mayzz

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.