Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

TLEP

Frischling

  • »TLEP« ist der Autor dieses Themas

Beiträge: 22

Wohnort: bei Riesa

  • Private Nachricht senden

1

16.05.2007, 17:12

"<<" - Operator Überladungs - Vererbung

Folgendes Problem:
Ich hab eine Basisklasse "Figur" und eine abgeleitete Klassen "Rechteck". In "Figur" gibts zwei virtuelle Funktionen Umfang() und Flaeche() die in "Rechteck" implementiert sind und auch funktioniern. Jetzt brauch ich einen "<<" - Operator mit dem ich dann folgendes beispielsweise machen kann:

C-/C++-Quelltext

1
2
3
4
5
Rechteck r1(10,5);    //ein Rechteck mit den Maßen 10x5

Figur *f = &r1;
cout << f->Umfang() << endl;    // Ausgabe des Umfanges auf der Konsole

// und Umfang wird in der Rechteck - Klasse gespeichert!

cout << f << endl; // Hier ist das eigentliche Problem/Frage des Betrages


Die letzte Zeile sollte jetzt genau das selbe ausgeben, wie die vorherige.
Kann man einen virtuellen Operator "<<" in die "Figur" - Klasse einbauen, so dass in der letzten Zeile der "<<" - Operator der Rechteck - Klasse aufgerufen wird?

Ich hab schon mal für eine Stringklasse einen "<<" - Operator Überladen, allerdings war dieser eine friend - Funktion, und es gibt leider keine virtuellen friend Funktionen.
Bin mittlerweile ziemlich ratlos.

Zusatzinformation: Das ist eine Übungsaufgabe zu Klasse/Vererbung

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

16.05.2007, 17:23

Die Funktion<< muss in dem Fall als Friend oder einfach extern implementiert werden. Weil du ja sowohl l als auch r wert benötigst.

C-/C++-Quelltext

1
2
3
4
std::ostream& operator<<( std::ostream& out, foo& obj )
{
    return ( out << obj.umfang() );
}


Das tuts auch. Du musst halt den Zeiger dereferenzieren.
@D13_Dreinig

TLEP

Frischling

  • »TLEP« ist der Autor dieses Themas

Beiträge: 22

Wohnort: bei Riesa

  • Private Nachricht senden

3

16.05.2007, 17:45

ah gut, ich hab es geschafft... mit Umverlegung der Membervaribalen und einem temp. Buffer!
Danke noch!

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

16.05.2007, 17:59

Keine Ahnung was genau du meinst, aber wenns funktioniert... ;)
@D13_Dreinig

Werbeanzeige