Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C#] overloading di un operatore

    Salve.
    Ecco il problema. Sto scrivendo un programmino pseudo didattico per effettuare operazioni con vettori e matrici.

    Mi serve, tra le altre cose, definire alcuni operatori (+, -, *,...) apposta per i vettori.

    La mia idea:

    private static double[] operator -(double[] vx, double[] vy)
    {
    // bla bla bla
    }

    ERRORE:
    Uno dei parametri di un operatore binario deve essere il tipo che lo contiene.


    DUNQUE???

    Grazie mille
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  2. #2
    Nessuno ha risposto... dunque proverò ad essere più chiaro.

    Sono abbastaza sicuro della sintassi, ma non sono troppo sicuro che il tipo double[ ] restituito sia compatibile con l'overloading di un operatore (o di una funzione generica). Mi sapete dire qualcosa in merito?

    Grazie
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  3. #3
    Credo non sia possibile fare un overload di un operatore per un tipo predefinito di .NET (Double). L'errore che ti compare è dovuto al fatto che il compilatore si aspetta di trovare almeno un parametro del tipo della classe che lo contiene. Immaginiamo che ti trovi dentro la classe Vettore; l'overload dell'operatore + si potrebbe scrivere così:
    codice:
    	public class Vettore
    	{
    		public Vettore()
    		{
    			//
    			// TODO: aggiungere qui la logica del costruttore
    			//
    		}
    
    		public static Vettore operator -(Vettore vx, Vettore vy) 
    		{ 
    			// bla bla bla 
    		} 
    
    	}
    Siccome però non conosco bene c#, ti posto un pezzo di codice VB.NET 2005 (che supporta l'overload degli operatori) sperando ti possa essere utile:
    codice:
    Public Class Vector
        Private _v As Double()
    
        Public Sub New()
            _v = Nothing
        End Sub
    
        Public Property Items() As Double()
            Get
                Return _v
            End Get
            Set(ByVal value As Double())
                _v = value
            End Set
        End Property
    
        Public Shared Operator +(ByVal v1 As Vector, ByVal v2 As Vector) As Vector
            Dim vv As New Vector
    
            'implementazione della somma
            vv._v(0) = v1._v(0) + v2._v(0)
    
            Return vv
        End Operator
    End Class
    Non badare a come ho implementato la somma, l'ho scritta a caso.

    Ciao
    Chi non cerca trova.

  4. #4
    Per il momento grazie... provo a vedere se così salta fuori qualcosa!
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.