Vererbung und Überladen von virtuellen Methoden (Polymorphie)

FireFlow hat gesagt.:
Das was du mit dem Satz meinst (der ist komisch formuliert) stimmt nicht. Wenn du eine Methode überschreibst *MUSS* sie den gleichen Rückgabetyp haben. Du kannst jediglich eine neue Methode mit selben bezeichner deklarieren wenn sie sich in Anzahl und/oder Typen der Übergabeparameter, oder in der "Constness" unterscheidet. Aber dann hat das mit Überschreiben nichts mehr zu tun, das ist dann überladen und die Funktion in der Kindklasse überdeckt die der Basisklasse.

Gruß

Stimmt, ungünstig formuliert, aber schau mal hier:

Covariant Returns. A long-standing C++ rule requires that a member function that overrides a virtual function must not only have the same signature but also the same return value as the base class member function. In the following code, for example, A::f and B::f both return a pointer to an object of class X.
class X
{};

class A
{
public:
virtual X* f() {return new X;}
};

class B : public A
{
public:
virtual X* f() {return new X;}
};

In real-world object models, however, it is not unusual for B::f to want to return a pointer to an object derived from X (such parallel hierarchies are really quite common). ISO C++ allows such covariant returns, so you can modify the code as follows:
class Y : public X
{};

class B : public A
{
public:
virtual Y* f() {return new Y;}
};
 
Zuletzt bearbeitet von einem Moderator:
Salut,

also ich werde es jetzt so machen:

hab ne CValue Klasse geschrieben die alle möglichen Werte aufnehmen kann.
Eine "CValue* getValue(void)" methode ist nicht mehr virtuell und für jede Tochter Klasse gleich, da jetzt nur noch dem Datentyp entsprechend in CValue geschrieben wird.
Werde aber erst morgen das ganze implementieren und jetzt die Präsentation vorbereiten ;)

Euch allen vielen Dank, aber werde dann morgen bzw. übermorgen darauf zurück kommen, weil ich das noch gar nicht richtig ausgearbeitet hab und der Vortrag Priorität hat...

Grüsse
 
Ich glaube, ich würde das so machen, daß ich eine Template-Klasse schriebe, die die map enthält, etwa so:
Code:
template <class T> class T_CStringMap
   {
   private:
   	map <CString, T> localMap;
   public:
   	T GetValue(CString cstrKey);
   };
   
   template <class T, int i>
   T T_CStringMap<T>::GetValue(CString cstrKey)
   {
   	return localMap.find(cstrKey)->second;
   };
Die Variablendeklaration dann so:
Code:
T_CStringMap<int> CIntClass;
   T_CStringMap<bool> CBoolClass;
   T_CStringMap<double> CDoubleClass;
 T_CStringMap<CString> CCStringClass;
Die anderen map-Funktionen müssen dann natürlich auch noch implementiert werden.
 
Hi.
jokey2 hat gesagt.:
Ich glaube, ich würde das so machen, daß ich eine Template-Klasse schriebe, die die map enthält, etwa so:
Code:
template <class T> class T_CStringMap
   {
   private:
   	map <CString, T> localMap;
   public:
   	T GetValue(CString cstrKey);
   };
   
   template <class T, int i>
   T T_CStringMap<T>::GetValue(CString cstrKey)
   {
   	return localMap.find(cstrKey)->second;
   };
Die Variablendeklaration dann so:
Code:
T_CStringMap<int> CIntClass;
   T_CStringMap<bool> CBoolClass;
   T_CStringMap<double> CDoubleClass;
 T_CStringMap<CString> CCStringClass;
Die anderen map-Funktionen müssen dann natürlich auch noch implementiert werden.
Aber wo ist da der Unterschied (außer größerer Aufwand) zu
Code:
map<CString, int> str2int;
map<CString, bool> str2bool; 
map<CString, double> str2double;
...

Gruß
 
Hallo zusammen,

es ist fast unmöglich einen guten Ansatz zur Abbildung der Problematik zu finden, ohne die Problematik zu kennen!
DIe Klassen Konstrukte stellen folgendes dar:

Es existiert ein Bus (Bussystem welches eine Kommunikationsschnittstelle darstellt für bestimmte Geräte...
An diesem Bussystem können mehrere Geräte hängen.
Diese Geräte haben jeweils eine eindeutige Softwareversion,
anhand der ich mir Variablen Listen generieren kann mit Hilfe von Linker-, LinkerTypen- und Symbolischen Listen (Diese Listen enthalten alle Informationen, wie Adresse im EEprom des Geräts, Datentyp, Variablen Name...)
Was ich vorher im Programm kennen muss ist die Menge aller in allen geräten vorkommenden Datentypen.

Mein Vorhaben:
EIne Klasse die die Geräte Abbildet : (CDevice)
Jeder Datentyp wird von einer bestimmten Klasse dargestellt.
Ich erzeuge dann einfach ein Objekt des entsprechenden Datentyps für jeweils eine Variable...
Jedes Device soll nur eine map haben die alle Variablen beinhaltet!
Naja hatte die letzten zwei Tage keine Zeit mehr dran zu arbeiten, aber werde jetzt weiter machen und Ergebnisse hier posten ;)

Grüße
 
Zurück