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!