2010-12-03 26 views
5

Para utilizar cout como tal: std :: cout < < myObject, ¿por qué tengo que pasar un objeto ostream? Pensé que era un parámetro implícito.operator << overloading ostream

ostream &operator<<(ostream &out, const myClass &o) { 

    out << o.fname << " " << o.lname; 
    return out; 
} 

Gracias

Respuesta

5

no va a agregar otra función miembro a ostream, ya que eso requeriría la redefinición de la clase. No puede agregarlo a myClass, ya que el ostream va primero. Lo único que puede hacer es agregar una sobrecarga a una función independiente, que es lo que está haciendo en el ejemplo.

+0

+1 para una buena deducción acerca de lo que no se dijo en la pregunta –

-1

Porque está sobrecargando una función libre, no una función de miembro.

2

Solo si es una función miembro de la clase que de lo contrario sería el primer argumento. Por lo tanto, sería:

class ostream { 
    ... 
    ostream &operator << (const myClass &o); 
    ... 
}; 

Desde ostream fue escrito mucho antes de su clase, se ve el problema de conseguir su clase en ese país. Por lo tanto, debemos poner en práctica el operador como una función independiente:

(return type) operator << ((left hand side), (right hand side)); 

Cuando los operarios se implementan como miembros de la funciones de las clases, el lado izquierdo es this, y el argumento se convierte en el lado derecho. (Para operadores binarios, los operadores unarios funcionan de manera similar.)

Cuestiones relacionadas