Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Vererbung nur public
knittel - Mo 18.10.10 17:45
Titel: Vererbung nur public
Hallo Leute,
Ich habe ein Problem. Ich programmiere ein kleines 2D Spiel. Dabei soll es Gebäude und Einheiten geben.
Dabei habe ich ein paar Klassen erstellt:
TGameObject: Überklasse (beinhaltet Textur, Name und X,Y Position)
in der Datei
RTSUnit
TUnit: Unterklasse von TGameObject (beinhaltet Geschwindigkeit und Ziel, etc.)
in der Datei
RTSUnit
TStructure: Unterklasse von TGameObject (beinhaltet keine weiteren Werte)
in der Datei
RTSStructure
In dem constructor von TStructure steht folgendes:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| constructor TStructure.Create(StructureType, AtX, AtY: cardinal); begin inherited Create (AtX, AtY); case StructureType of 0: FTexture := 'powerplant'; end; FImageIndex := FindImageIndex (); end; |
Und in dem Constructor von TGameObject steht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| constructor TGameObject.Create (AtX, AtY: cardinal); begin FXpos := AtX; FYpos := AtY; FMarked := false; end; |
Das eigentlich Problem ist: Delphi meckert weil er FImageIndex und FTexture nicht kennt.
FImageIndex und FTexture sind beides private deklarierte Variablen von TGameObject. Da ich aber ja RTSUnit schon im interface von RTSStructure eingebunden habe müsste es eigentlich keine Probleme geben. Außerdem erkennt Delphi schon, dass TStructure von TGameObject erbt, aber irgendwie erbt er die private deklarierten Variablen nicht oder erkennt sie nicht.
Wie könnte ich das Problem lösen?
Danke im voraus.
P.S. Falls ihr mehr Code braucht um mir zu helfen, siehe Anhang.
Moderiert von
Narses: Code als Anhang hochgeladen.
bummi - Mo 18.10.10 17:58
Du hast keinen Zugriff auf private Variablen,etc.
für FTexture hast Du ja schon einen Setter/Getter Texture
für FImageIndex kannst Du einen ebensolchen implementieren
oder die Variablen inden public Bereich ziehen (dann aber nicht mehr FVariablenname nennen)
jaenicke - Mo 18.10.10 18:40
bummi hat folgendes geschrieben : |
| oder die Variablen inden public Bereich ziehen (dann aber nicht mehr FVariablenname nennen) |
Nein, public ist für nach außen hin sichtbare Felder. Wenn die abgeleiteten Klassen die Felder sehen sollen, gehören die unter protected. Dann sind diese nicht nach außen sichtbar, aber in der eigenen und abgeleiteten Klassen.
knittel - Di 19.10.10 14:00
Ich probiers jetzt gleich mal aus.
Vielen Dank. :)
Flamefire - Di 19.10.10 16:38
Für den Zugriff von abgeleiteten Klassen auf die Eigenschaftenn der Überklasse sollte man eigendlich keine Getter/Setter verwenden. Zumindest nicht, wenn es nicht gebraucht wird.
Darum: protected
public: für alle sichtbar
private: nur für eigene klasse sichtbar
protected: für eigene und abgeleitete klassen sichtbar. aber nicht nach außen
jaenicke - Di 19.10.10 16:40
Flamefire hat folgendes geschrieben : |
| private: nur für eigene klasse sichtbar |
Um genau zu sein auch innerhalb der Unit. Nur innerhalb der Klasse geht mit "strict private".
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!