Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Vererbung und STDOUT überschreiben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.06.2005, 15:28 Uhr
~Sliddi
Gast


Hallo Leute !!

Ich versuch mich grad ein bisschen an der Vererbung und hänge bei folgendem Problem:

Ich habe 1 Klasse TestClassA und 2 Klassen die davon erben TestClassB und TestClassC.

Für die verbesserte Ausgabe habe ich jeweils STDOUT überschrieben

In TestClassA hab ich 2 Variablen und in den Unterklassen jeweils eine weitere Variable damit die Vererbung auch halbwegs sinnvoll ist:


C++:
#include <iostream>

TestClassA::TestClassA(int alter_in, int gewicht_in)
{
alter=alter_in;
gewicht=gewicht_in;
}

std::ostream & operator << ( std::ostream & stream , TestClassA const & data )
{
return stream <<data.alter<<" "<<data.gewicht;
}    



Die vererbte Klasse sieht so ähnlich aus:


C++:
#include <iostream>

TestClassB::TestClassB(int alter, int gewicht, int groesse_in)
: TestClassA(alter,gewicht)
{
groesse = groesse_in;
}

std::ostream & operator << ( std::ostream & stream , TestClassB const & data )
{
return stream <<data.alter<<" "<<data.gewicht<<" "<<data.groesse;
}    




Wenn ich Objekte dieser Klassen jetzt in einen Vektor stecke:

C++:
Testi.push_back(TestClassA(25,70));
Testi.push_back(TestClassB(40,80,180));
Testi.push_back(TestClassB(12,40,140));    



und danach versuche mit den überschriebenen STDOUT's die Daten wieder rauszulesen wird immer nur die überschriebene Varainte der Superklasse verwendet - ich bekomme also konkret nie die Größe heraus

C++:
cout << Testi[0];   --> 25 70
cout << Testi[1];   --> 40 80
cout << Testi[2];   --> 12 40    



Ich hätte aber gerne dass jede Klasse den eigenen, überschriebenen STDOUT verwendet
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.06.2005, 15:48 Uhr
virtual
Sexiest Bit alive
(Operator)


Das liegt daran, daß der Vector nur Instanzen exakt gleichen Typs aufnehmen kann. Wenn Du also einen Vector von TestClassA objecten erzeugst, werden in dem Vektor auch nur ei TestClassA instanzen reingesteckt. Wenn Du versuchst, eine TestClassB reinzutun, wird nur der Anteil der Basisklasse in den Vektor kopiert, der rest bleibt außen vor.

Das Problem kann man dadurch umgehen, daß man nur Pointer in dem Vektor verwaltet, allerdings muß man sich dann auch selbst um die Freigabe der Objecte selbst bemühen. Alternative kann man auch smart-Pointer verwenden, die machen es eine ganze Menge einfacher.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: