myclass
ist eine von mir geschriebene C ++ - Klasse und wenn ich schreibe:
myclass x;
cout << x;
Wie kann ich Ausgang 10
oder 20.2
, wie ein integer
oder float
Wert?
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;
}
myclass
alle hatprivate
Felder, und Sie wollen ,operator<<()
um sie auszugeben,myclass
erklären solltestd::ostream& operator<<(std::ostream&, myclass const&)
als Freund.const myclass &m
stattdessen seinmyclass const &m
?const
Nach 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 liegtSie 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 Fallx
vom Typmyclass
ist), wird alles ausgegeben, was Sie in der Methode angegeben haben. Im obigen Beispiel wäre es dasx.somevalue
Mitglied.Wenn der Typ des Elements nicht direkt zu einem hinzugefügt werden
ostream
kann, müssen Sie den<<
Operator auch für diesen Typ mit derselben Methode wie oben überladen .quelle
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)
quelle
Alternative:
struct myclass { int i; inline operator int() const { return i; } };
quelle