myclass
es una clase de C ++ escrita por mí y cuando escribo:
myclass x;
cout << x;
¿Cómo produzco 10
o 20.2
, como un integer
o un float
valor?
Respuestas:
Por lo general, sobrecarga 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;
}
const myclass &m
lugar de myclass const &m
?
const
después del tipo, que dice: m is a reference to a const myclass
. Con él antes del tipo, dice "m es una referencia a myclass const", que está justo en el borde desigual entre sin sentido y verdaderamente agramatical.
Necesitas sobrecargar al <<
operador,
std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
os << obj.somevalue;
return os;
}
Luego, cuando lo haga cout << x
(donde x
es de tipo myclass
en su caso), generará lo que le haya dicho en el método. En el caso del ejemplo anterior, sería el x.somevalue
miembro.
Si el tipo del miembro no se puede agregar directamente a un ostream
, entonces necesitaría sobrecargar el <<
operador para ese tipo también, usando el mismo método que el anterior.
es muy fácil, solo implemente:
std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
os << foo.var;
return os;
}
Debe devolver una referencia al sistema operativo para encadenar la salida (cout << foo << 42 << endl)
Alternativa:
struct myclass {
int i;
inline operator int() const
{
return i;
}
};
myclass
tiene algúnprivate
campo y deseaoperator<<()
generarlo,myclass
debe declararlostd::ostream& operator<<(std::ostream&, myclass const&)
como amigo.