COUT überschreiben
-
Schönen Abend !
ich habe mir hier eine Klasse angelegt
class test1 { int x; int y; int z; }
ich hätte jetzt gerne dass ich diese Klasse direkt in den COUT hängen kann und dass dann alle 3 Integer-Werte der Reihe nach ausgegeben werden.
Derzeit mache ich das so:test1 tmp; COUT << tmp.x << tmp.y << tmp.z << ENDL;
es soll aber irgendwie durch überschreiben des Streams auch so gehen:
COUT << tmp << ENDL;
Kann mir da jemand einen kurzen Code angeben ?
Wäre tollGute Nacht
Flatscreen
-
Was ist COUT? Und ENDL?
Normalerweise macht man das etwa so:
std::ostream &operator<<(std::ostream &os, const test1 &t) { os << t.x << t.y << t.z; return os; }
-
Hier ein kleines Beispiel
#include <iostream> struct Test { int p1; int p2; int p3; // Hier müsste es nicht friend und damit auch // nicht deklariert sein, aber // wenn du private/protected attribute hast // musst du den operator als friend deklarieren // damit der operator<< zugriff auf die benötigten daten hat friend std::ostream & operator << ( std::ostream & os , Test const & val ); }; std::ostream & operator << ( std::ostream & os , Test const & val ) { return os << val.p1 << " " << val.p2 << " " << val.p3; } int main() { Test test = { 1, 2 , 3}; std::cout << test << std::endl; }
MfG
-
Da musst du den Shift-Operator (<<) überladen.
So (Außerhalb der Klasse):ostream& operator<< (ostream& os, const testl& z) { os << z.x << ' ' << z.y << ' ' << z.z ; return os; }
Musst natürlich drauf achten, dass operator<<() auch auf die Klasse zugreifen darf, also evtl. als friend-Funktion deklarieren.
Gruß,
Morph
-
Booah, warn mal wieder alle schneller als ich...
-
Morph01 schrieb:
Booah, warn mal wieder alle schneller als ich...
Es ist der Wille der zählt
BR
evilissimo
PS: Mach weiter so.