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....
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..codice:friend ostream& operator<<(ostream&, MiaClasse&);
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:
e quindi sarebbe bastato un solo argomento..codice:cout<<oggetto_mia_classe //equivalente a cout.operator<<(oggetto_mia_classe);
potete chiarirmi il dubbio?
vi ringrazio!