Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453

    [c++] dubbio su ridefinizione operatore

    ciao a tutti...

    avevo già fatto un post su questa identica riga di codice, ma stavolta la domanda è relativa a un'altra cosuccia, e poichè il post inizia ad essere vecchio ho pensato fosse meglio aprirne uno nuovo
    Domattina ho l'orale di fondamenti di informatica I, e sono qui coi dubbi amletici dell'ultimo minuto....

    codice:
    friend ostream& operator<<(ostream&, MiaClasse&);
    la domanda è questa: una volta il professore ci chiese perchè non potremmo ridefinire l'operator<<() come funzione membro della classe che stiamo creando... La risposta fu che l'argomento implicito dell'operator<<(), è un ostream, e non l'oggetto della mia classe, in pratica l'operator<<() è funzione membro della classe ostream, e quindi non è corretto (nè possibile) ridefinirlo come funzione membro di una classe che introduciamo..

    la domanda è: se l'ostream è l'argomento implicito dell'operator<<(), perchè compare come argomento formale?? Quando definisco altri operatori, ad esempio quello di assegnamento, gli passo un solo argomento formale, perchè quello di sinistra è implicito appunto.. perchè qui invece si devono passare entrambi? io avevo immaginato che funzionasse come segue:

    esempio per cout:

    codice:
    cout<<oggetto_mia_classe 
    //equivalente a 
    cout.operator<<(oggetto_mia_classe);
    e quindi sarebbe bastato un solo argomento..

    potete chiarirmi il dubbio?

    vi ringrazio!

  2. #2
    Se non sbaglio è perché quando dichiari un operatore binario come membro della tua classe stai sottintendendo che l'oggetto che sta a sinistra dell'operatore è del tipo della tua classe; in questo caso invece è un oggetto di tipo ostream, di cui non puoi modificare la definizione aggiungendo la funzione operator<<, per cui ricorri ad una funzione friend, che, non facendo parte di nessuna classe, riceve sia l'oggetto che sta a sinistra che quello che sta a destra dell'operatore.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.