Strukturen virtuell ableiten?
-
Hallo,
ich weiß nciht ob es für mein Problem eine Lösung gibt. Ich habe eine Klasse, in der ist eine Struktur definiert. Und die Klasse bearbeitet diese Struktur (z.B. sortieren der Inhalte). Jetzt leite ich die Klasseab um die FUnktionalität zu erweitern, aber auch meine Struktur soll mehr Inhalt bekommen. Jetzt soll aber die Basisklasse die Struktur weiterhin sortieren, jedoch zus. mit den neuen elementen. Also dachte ich ir. Machste die Struktur virtuell und leitest sie in der abgeleiteten Klasse ab., Geht aber nicht. STrukturen dürfen wohl nciht virtuell sein sagt der COmpiler. Gibt es eine Möglichkeit sowas zu machen?Header Basisklasse public: struct Test{ int a; } MyTest[10];Header abgeleitete Klasse public: struct Test2:Test{ int b; } MyTest[10];-> Struktur in abgeleiteter Klasse enthält jetzt a und b !
Ausgabe in Basisklasse Caption = MyTest[0].a;Die Basisklasse liefert aber immer nur den Inhalt der eigenen Struktur. Wenn ich MyTest jetzt in der Ableitung fülle ( a und b ) wird es von der Basisklasse nicht genommen. Jetzt wollte ich die struct virtual machen (wie bei FUnktionen die überschrieben werden und die Basisklasse auf die Funktionen der Ableitung zugreift), aber der Compiler meldet, das die STruktur nicht virtual sein kann. Und nun ????
Hoffe ich habe mich einigermassen verständlich ausgedrückt:-)
Jörn
-
Hallo
natürlich dürfen auh structs virtuel sein, schließlich gibt es kaum einen unterschied zwischen struct und class.
Allerdings hast du mit dem einfachen Array das Problem das du nicht wirklich abgeleitete Instanzen darin speichern kannst. Sondern du mist mit Pointern arbeiten// Header Basisklasse public: struct Test{ int a; }; Test* MyTest[10];// Header abgeleitete Klasse public: struct Test2: public Test{ int b; } // hier das Array MyTest mit Instanzen on Test2 füllen, kann aber auch in der Implementation der Basisklasse wieder gelöscht werden./Edit : Noch mal genauer der Grund warum dein Code nicht läuft :
bei deinem Array Test MyTest[10] wird Speicherplatz für 10 Instanzen von Test reserviert. Das heißt 10x4Byte, weil Test ja eine int-Member hat.
Aber Test2 hat 8 Byte. Und deshalb kann unmöglich eine Instanz von Test2 in das Array MyTest. Und Membervariablen sind nicht wie Methoden Polymorph.
Mit Pointern hingegen wird für jedes Element hingegen nur 4 byte reserviert, egal wie groß die eigentliche Instanz wirklich ist.bis bald
akari