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
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
class base { public: int a, b; //... void dosth(base *param); }; class derived : public base { public: int c, d; //... }; void base::dosth(base *param) { // zum spaß etwas ausgeben std::cout << param[0].a; } int main() { base Basis[4]; derived Abgeleitet[4]; Basis[0].a = Abgeleitet[0].a = 14; Abgeleitet[2].dosth(Basis); // funktioniert Abgeleitet[2].dosth(Abgeleitet); // hier gibts nen mist aus } |
Alter Hase
Zitat von »"Gotbread"«
wär doch ne idee für C++0x: virtuelle daten
Alter Hase
Alter Hase
Das ist falsch. Wenn man Member über den Bezeichner anspricht, hat man sicher nie Probleme wegen Vererbung. Es wäre ja witzlos, wenn man in abgeleiteten Klassen zuerst implementierungsabhängige Mittel einsetzen müsste, um an Member der Basisklasse zu gelangen... :roll:Zitat von »"Gotbread"«
das kann ich dir sagen.
der compiler denkt, dass er ein zeiger auf base bekommt. a hat in der
klasse den offset 0. in der abgeleiteten klasse kann es genauso sein,
aber es scheint als ob es bei dir genau anders herum ist (erst derived, dann
base).
Ein Einsatzbeispiel würde mich jetzt wirklich interessieren...Zitat von »"Gotbread"«
wär doch ne idee für C++0x: virtuelle daten
Nicht wirklich. Die Member sind innerhalb einer einzelnen Klasse in der Reihenfolge abgespeichert, in der sie deklariert wurden (möglicherweise noch ausgerichtet). Und wenn man sie per Variablenname aufruft, ist das sowieso kein Problem.Zitat von »"the[V«
oid"]So weit ich weiß ist nicht mal die Speicherreihenfolge innerhalb von structs im Standard definiert...
[...]
Oder?
Virtuelle Funktionen bringen hier nichts. Diese werden nur benötigt, wenn polymorphes Verhalten erforderlich ist, die abgeleitete Klasse also eine andere Funktion (mit gleichem Namen) als die Basisklasse implementiert und man den Typ der referenzierten Klasse nicht zur Compilezeit festlegen kann.Zitat von »"K-Bal"«
Mach das doch, wie schon vorgeschlagen, mit virtuellen funktionen. Du machst dir damit wirklich das Leben leichter
Zitat von »"Nexus"«
Nicht wirklich. Die Member sind innerhalb einer einzelnen Klasse in der Reihenfolge abgespeichert, in der sie deklariert wurden (möglicherweise noch ausgerichtet).
Werbeanzeige