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?
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;
}
myclass
tiene algúnprivate
campo y deseaoperator<<()
generarlo,myclass
debe declararlostd::ostream& operator<<(std::ostream&, myclass const&)
como amigo.const myclass &m
lugar demyclass 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
(dondex
es de tipomyclass
en su caso), generará lo que le haya dicho en el método. En el caso del ejemplo anterior, sería elx.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.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