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

    [C++] Conservare la commutatività con l'overloading

    Salve, forse dal titolo non sono stato molto chiaro, procedo con un esempio pratico,
    per la classe Matrice ho ridefinito l'operatore * (prodotto per scalare) nel seguente modo:


    codice:
    Matrice operator* (double b){
    ....codice...
    }
    poi nel main ho :

    codice:
    double n;
    Matrice C, D;
    D= C*n //ok funziona
    D= n*C // Non funziona
    Esiste un modo per conservare la commutatività?
    (Sarebbe anche interessante capire se si possa fare in modo che il numero per cui moltiplico la matrice possa essere di tipi diversi e non soltanto double....)

  2. #2
    Definisci il seguente operatore globale:
    Codice PHP:
    template <typename TNumeric>
    Matrice operator * (const TNumeric theNumeric, const Matrice &theMatrix

  3. #3
    Grazie 1000 per la risposta,
    Da quanto capito quindi dovrei lasciare la mia definizione di operatore per i casi in cui l'oggetto matrice sia l'operando sinistro , ed aggiungere quest'altra che invece gestisce il caso in cui l'oggetto sia l'operando destro, io pensavo che la mia andasse completamente gettata

    Posso chiederti perchè usiamo la clausola const ? non mi è molto chiaro , grazie per la pazienza

  4. #4
    Originariamente inviato da GraficInside
    Grazie 1000 per la risposta,
    Da quanto capito quindi dovrei lasciare la mia definizione di operatore per i casi in cui l'oggetto matrice sia l'operando sinistro , ed aggiungere quest'altra che invece gestisce il caso in cui l'oggetto sia l'operando destro, io pensavo che la mia andasse completamente gettata
    in realtà anche la tua andrebbe modificata con il template, poi la mia semplicemente richiamerebbe la tua restituendo theMatrix * theNumeric;
    Originariamente inviato da GraficInside
    Posso chiederti perchè usiamo la clausola const ? non mi è molto chiaro , grazie per la pazienza
    Per aiutare (e farmi aiutare dal) compilatore.

    Prevedo nella scrittura della definizione di quell'operatore di modificare theNumeric e theMatrix? No!

    Quindi glielo dico al compilatore, in modo che esso possa fare le eventuali ottimizzazioni del caso, e soprattutto in modo che mi segnali un errore se per sbaglio cercassi di andare a modificare ciò che logicamente è costante.

    EDIT: nel caso che il mio operatore globale utilizzasse il tuo, allora il tuo metodo dovrebbe essere anch'esso const.

  5. #5
    grazie per i preziosi consigli funziona tutto alla perfezione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.