Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 18:40

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[c++] Überladen von << Operator

Discussion on [c++] Überladen von << Operator within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jan 2011
Posts: 11
Received Thanks: 0
[c++] Überladen von << Operator

Hallo,
ich hab ein Programm, das mittels Objekten einen Binärbaum erstellt.

nun soll ich
Quote:
Überladen Sie den <<-Operator für die Knotenklasse so, dass folgende Ausgabe erzeugt wird, wenn man den Wurzelknoten des von create_complete_tree(2,4) erzeugten Baumes ausgibt:
node_1
node_2
node_3
node_4
node_5
node_6
node_7
Ich hab zwar was zu Überladen von Stream-Operatoren gefunden, hab aber keinen Plan wie ich das anwenden soll.

Also die Einrückung wird mittels einer Membervariable, die die Tiefe des Knotens angibt erzeugt.
Z!ppo is offline  
Old 05/01/2011, 18:55   #2
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Erstmal musst du beachten, dass das Stream-Objekt auf der linken Seite steht. Deswegen kannst du den Ausgabeoperator (<<) nicht als Methode deiner Klasse implementieren. Du musst global arbeiten, mithilfe von friend:

Code:
class MyClass
{
    public:
        friend std::ostream& operator<<(std::ostream&, const MyClass&);
};

std::ostream& operator<<(std::ostream& myStream, const MyClass& my)
{
    return myStream << my.CreateOutput();
}
Aufruf:
Code:
int main()
{
    MyClass obj;
    cout << obj;
}
xNopex is offline  
Thanks
1 User
Old 05/01/2011, 19:41   #3
 
elite*gold: 0
Join Date: Jan 2011
Posts: 11
Received Thanks: 0
Ok danke erstmal, soweit hatte ich es auch ungefähr dastehen, aber ich weis jetzt nichts genaues damit anzufangen ... wie geb ich denn jetzt was damit aus?
Muss ich das in eine Memberfunktion in MyClass namens CreateOutput schreiben?
Z!ppo is offline  
Old 05/01/2011, 20:06   #4
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Code:
std::ostream& operator<<(std::ostream& myStream, const MyClass& my)
Der zweite Parameter ist ein Objekt deiner Klasse. Arbeitest du mit Zeigern, hast du direkten Zugriff auf das original Objekt:

Code:
std::ostream& operator<<(std::ostream& myStream, MyClass* my)
Nehmen wir an, die MyClass sieht so aus:

Code:
class MyClass
{
    private:
        std::string name;
    public:
        MyClass(std::string);
        friend std::ostream& operator<<(std::ostream&, MyClass*);
};
Dann könntest du so den Namen des Objektes zum Beispiel ausgeben:

Code:
std::ostream& operator<<(std::ostream& stream, MyClass* my)
{
    return stream << my->name;
}
Aufgerufen wird es dann so:

Code:
int main()
{
    MyClass* my = new MyClass("TestObjekt");
    cout << my;
    //...
}
xNopex is offline  
Thanks
1 User
Old 05/01/2011, 20:50   #5
 
elite*gold: 0
Join Date: Jan 2011
Posts: 11
Received Thanks: 0
Ok soweit klar und klappt alles. Wie kann ich jetzt mehrere Sachen in den Outstream packen, wenn ich z.B. ne return ausgabe hab, wird die Fkt doch danach verlassen oder nicht?

Code:
//tree.cpp
std::ostream& operator<<(std::ostream& myStream, node* obj)
{
   myStream << obj->name << endl;
	for(int x = 0; x< obj->get_nr_children(); x++)
	{
		myStream << obj->get_child(x)->name << endl;
		cout << obj->get_child(x);
	}
}
Code:
//main.cpp
.....
  node* root = new node("root");
  root->create_complete_tree(2,4);
  cout << root;
.....
also die Zeiger der Kindknoten des Baumes werden bei jedem Objekt in nem Vektor namens children gespeichert.

ich glaub aber nich dass ich das wie oben einfach stur aufrufen kann, ich brauch dafür noch ne extra memberfkt oder?

EDIT: habs jetzt fast raus -> funktioniert immer noch nicht, hab die neue memberfkt mal reingeschrieben
Z!ppo is offline  
Old 05/02/2011, 16:00   #6
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Code:
std::ostream& operator<<(std::ostream& stream, node* my_node)
{
    stream << my_node->name << std::endl;
    for(unsigned int i = 0; i < my_node->children.size(); i++)
        std::cout << my_node->children.at(i);
    return stream;
}
Wolltest du es so machen?
xNopex is offline  
Reply


Similar Threads Similar Threads
[Release]Operator - Tool. Die Hilfe für die Admins!
10/06/2011 - Minecraft Mods, Textures, Skins & Maps - 26 Replies
http://www7.pic-upload.de/06.04.11/k6q858v67ruj.pn g Hallo Crafter! Heute stelle ich mein kleines Werk vor! Hierbei handelt es sich um das Operator - Tool. Man kann es auch GM-Tool für Minecraft nennen ;D Aktuelle (grobe) Funktionsliste:
[C++]Verkettungs operator
07/26/2010 - C/C++ - 3 Replies
Hallo! Gibt es in C++ einen verkettunsoperator? Und wen ja wie, wie lautet dieser? In AutoIT ises & in Php ises . In JS ises +
need operator or moderator for bee middle man
05/29/2010 - Silkroad Online Trading - 4 Replies
plz add me on msn assap :b [email protected]
[C++] "->"-Operator
04/11/2008 - C/C++ - 3 Replies
Hey, Ich probiere grade nen kleinen PixelBot zu schreiben. Folgendes habe ich jetzt aus Testgründen geschrieben: #include <iostream> #include <windows.h> using namespace std;



All times are GMT +2. The time now is 18:40.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.