myclass es una clase de C ++ escrita por mí y cuando escribo:
myclass x;
cout << x;
¿Cómo produzco 10o 20.2, como un integero un floatvalor?
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 &mlugar de myclass const &m?
constdespué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 xes de tipo myclassen su caso), generará lo que le haya dicho en el método. En el caso del ejemplo anterior, sería el x.somevaluemiembro.
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;
}
};
myclasstiene algúnprivatecampo y deseaoperator<<()generarlo,myclassdebe declararlostd::ostream& operator<<(std::ostream&, myclass const&)como amigo.