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?
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 &m
stattdessen sein myclass 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 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 x
vom Typ myclass
ist), wird alles ausgegeben, was Sie in der Methode angegeben haben. Im obigen Beispiel wäre es das x.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 .
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;
}
};
myclass
alle hatprivate
Felder, und Sie wollen ,operator<<()
um sie auszugeben,myclass
erklären solltestd::ostream& operator<<(std::ostream&, myclass const&)
als Freund.