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?
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;
}
myclasstiene algúnprivatecampo y deseaoperator<<()generarlo,myclassdebe declararlostd::ostream& operator<<(std::ostream&, myclass const&)como amigo.const myclass &mlugar demyclass 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(dondexes de tipomyclassen su caso), generará lo que le haya dicho en el método. En el caso del ejemplo anterior, sería elx.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.fuente
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)
fuente
Alternativa:
struct myclass { int i; inline operator int() const { return i; } };fuente