myclass ist eine von mir geschriebene C ++ - Klasse und wenn ich schreibe:
myclass x;
cout << x;
Wie kann ich Ausgang 10oder 20.2, wie ein integeroder floatWert?
Antworten:
In der Regel durch Überladung operator<<Ihrer Klasse:
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 &mstattdessen sein myclass const &m?
constNach dem Typ steht : m is a reference to a const myclass. Vor dem Typ steht "m ist ein Verweis auf eine Myclass-Konstante", die genau zwischen bedeutungslos und wirklich ungrammatisch liegt
Sie müssen den <<Bediener überladen ,
std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
os << obj.somevalue;
return os;
}
Wenn Sie dies tun cout << x(wo in Ihrem Fall xvom Typ myclassist), wird alles ausgegeben, was Sie in der Methode angegeben haben. Im obigen Beispiel wäre es das x.somevalueMitglied.
Wenn der Typ des Elements nicht direkt zu einem hinzugefügt werden ostreamkann, müssen Sie den <<Operator auch für diesen Typ mit derselben Methode wie oben überladen .
Es ist sehr einfach, implementieren Sie einfach:
std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
os << foo.var;
return os;
}
Sie müssen einen Verweis auf os zurückgeben, um den Auslauf zu verketten (cout << foo << 42 << endl)
Alternative:
struct myclass {
int i;
inline operator int() const
{
return i;
}
};
myclassalle hatprivateFelder, und Sie wollen ,operator<<()um sie auszugeben,myclasserklären solltestd::ostream& operator<<(std::ostream&, myclass const&)als Freund.