myclass
es una clase de C++ escritos por mí y cuando escribo:¿Cómo puedo usar tribunal << miclase
myclass x;
cout << x;
cómo va a salir 10
o 20.2
, como un integer
o un valor float
?
myclass
es una clase de C++ escritos por mí y cuando escribo:¿Cómo puedo usar tribunal << miclase
myclass x;
cout << x;
cómo va a salir 10
o 20.2
, como un integer
o un valor float
?
que es muy fácil, basta con poner en práctica:
std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
os << foo.var;
return os;
}
necesita devolver una referencia al sistema operativo con el fin de la cadena de la outpout (cout < < foo < < endl)
típicamente por sobrecargando operator<<
para su clase:
struct myclass {
int i;
};
std::ostream &operator<<(std::ostream &os, myclass const &m) {
return os << m.i;
}
int main() {
myclass x(10);
std::cout << x;
return 0;
}
Esto daría salida al valor del constructor '10'? –
Tenga en cuenta que si 'myclass' tiene campos' privados', y quiere que 'operator <<()' los emita, 'myclass' debe declarar' std :: ostream & operator << (std :: ostream &, myclass const &) 'como un amigo. –
¿No debería ser 'const myclass & m' en lugar de' myclass const & m'? – Nubcake
Es necesario sobrecargar el operador <<
,
std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
os << obj.somevalue;
return os;
}
Entonces cuando lo hace cout << x
(donde x
es de tipo myclass
en su caso), sería de salida lo que he dicho es que en el método. En el caso del ejemplo anterior, sería el miembro x.somevalue
.
Si el tipo del miembro no se puede agregar directamente a ostream
, entonces también deberá sobrecargar el operador <<
para ese tipo, utilizando el mismo método que el anterior.
Ese es el operador de desplazamiento a la izquierda, no el "operador de flujo". En el contexto de Iostreams, es el operador de inserción o extracción, pero nunca es el operador del flujo. –
Lo siento, sí, tienes razón. Eso es exactamente lo que he llamado en mi cabeza, ya que tiendo a usarlo solo cuando se trata de transmisiones. En este caso, sería el operador de inserción como dices, en lugar de solo el operador de flujo. He actualizado mi respuesta para eliminar ese bit. –
Esa es una función infinitamente recursiva. ¡Y recibió un voto positivo! ¡Tienes que amar el fin de semana en SO! –