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

    [c++] Classi ed operatori? problema con somma di un complesso ed un reale?

    salve a tutti, oggi studiando per l'esami di informatica mi sono imbattuto in una classe denominata complesso:

    codice:
    class complesso {
       double re;
       double im;
    
    public:
    
       //...
       complesso operator+ (complesso x)
       complesso operator+ (double d)
       //...
    };
    la classe ovviamente usa il meccanismo dell'overloading per "capire" quale operatore utilizzare.
    a me interessa l'operator+ (double d), per cui vi metto la porzione di codice che lo dichiara:

    codice:
    complesso complesso::operator+ (double d) {
       complesso z;
       z.re = re+d;
       z.im = im;
       return z;
    }
    ecco qui c'è la prima cosa che non ho capito, infatti perchè nell'operatore viene dichiarato un complesso z? esso non dovrebbe essere passato come argomento alla funzione?

    andiamo avanti, successivamente nel main viene chiamata questa istruzione:

    codice:
    int main () {
    
    complesso w, complesso z;
    w= z + 3.0;
    
    }
    in quest'altra porzione di codice è logico che viene invocato l'operator+ definito sopra, quello che non capisco è come fa a prendere come argomento attuale quel 3.0 che non è passato come argomento di alcuna funzione???

    grazie mille delle risposte!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    L'operatore è stato scritto per permettere di sommare un reale (double) ad un complesso. Ecco perché l'argomento è un double. E ovviamente il valore complesso temporaneo viene usato per restituire la somma con il valore corrente dell'istanza.
    Nessuno ti vieta di scrivere un altro metodo + con un complesso come operando.

    Per l'altra domanda, è proprio la ridefinizione dell'operatore + che permette questo comportamento. Il compilatore userà l'operatore ridefinito al posto del normale +
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.