![]() |
Konstruktor
Hallo , ich schreibe morgen eine Klausur und mir ist eingefallen , dass ich etwas nicht kann.
Wenn ich eine Klasse habe und zum Beispiel in dieser Klasse die Eigenschaften x,y :integer habe auf private und eine zweite Klasse erschaffe , die von der ersten diese Eigenschaften erben soll , kann ich keine Methoden aufrufen. Also :
Delphi-Quellcode:
Ich weiß , das ist nicht richtig OOP , ist aber auch nicht "wichtig" , in der Klausur wird auf was anderes mehr gesetzt.
tgeo_objects = class
end; TViereck = class(Tgeo_objects) private x,y:integer; public procedure setx; procedure sety; function getx:integer; function gety:integer; end; TDreieck = class(TViereck) private x,y:integer; public procedure setx; procedure sety; function getx:integer; function gety:integer; Wenn ich jetzt zum Beispiel.
Delphi-Quellcode:
schreibe , dann erkennt er das nicht.
procedure tdreieck.setx
Ich habe ja auch noch keine Instanz von Tdreieck erzeugt , aber wie und wo erzeuge ich das , um x und y in der Dreieck Klasse zu manipulieren. Für Tviereck hatte ich eine Instanz erzeugt. Ist aber die Oberklasse und die Eigenschaften müssen nicht vererbt werden. Wo also muss ich
Delphi-Quellcode:
raufklatschen , damit er
mydreieck := Tdreieck.create
Delphi-Quellcode:
zum Beispiel erkennt ?
procedure tdreieck.setx
Danke schon im Voraus. |
AW: Konstruktor
Delphi-Quellcode:
tgeo_objects = class
end; TViereck = class(Tgeo_objects) private Fx,Fy:integer; public procedure setx( ax: Integer); procedure sety( ay: Integer); function getx:integer; function gety:integer; published property x: Integer read getx write setx; property y: Integer read gety write sety; end; TDreieck = class(TViereck) end; ... procedure TViereck.setx( ax: Integer); begin Fx = ax; end; ... |
AW: Konstruktor
Das mit
Delphi-Quellcode:
funktioniert ja bei mir , aber sobald ich x,y von Viereck vererbe kann ich mit dem Punkt-Operator
procedure Tviereck.setx
Delphi-Quellcode:
diesen Befehl nicht ausführen , da er sagt , dass x nicht erkannt wird , obwohl es ja vererbt wird
Tdreieck.setx
Delphi-Quellcode:
wie löse ich das blöde Problem ?
Tdreieck = class(tviereck)
|
AW: Konstruktor
Du weißt aber, was private, protected, virtual, override usw. bedeuten?
|
AW: Konstruktor
Bis jetzt hatten wir nur protected , private und public.
Spielt das eine Rolle für die Problemlösung , wenn ich fragen darf ? |
AW: Konstruktor
Ich denke schon, oder soll jede abgeleitete Klasse ihr eigenes SetX usw. haben? Wenn ja, wozu dann erben?
|
AW: Konstruktor
Naja , es muss doch möglich sein , wenn ich eine Klasse habe mit der Eigenschaft Bellen zum Beispiel , dass die zweite davon vererbte Klasse auch die Eigenschafte Bellen beeinhalten muss , oder ?
|
AW: Konstruktor
Also zum Einen hat mkinzler natürlich recht, deine Setter-Methoden können nicht funktionieren, da sie keinen Wert zugewiesen bekommen. Was sollen sie dann an die Felder FX, FY weiterleiten? Schau dir also mal den Unterschied zu deinem Quelltext an. Oder handelt es sich um geerbte Methoden von TGeo_Objects, die du uns hier nicht zeigst?
Zum Zweiten wird dir hier niemand helfen können, wenn du uns nicht den Quelltext des Implementation-Teils deiner Unit zeigst. Wo versuchst du denn deine Methoden aufzurufen? Bzw. wo erzeugst du denn die Objekte von TDreieck, mit denen du auf die propertys (die dir noch fehlen) zugreifen willst? Ja klar kannst du die Methoden vererben, dann solltest du dir aber mal die Begriffe virtual, dynamic und inherited anschauen. Der Titel hier lautet "Konstruktor", wo ist bei dir ein Constructor??? |
AW: Konstruktor
Ich weiß wo das Problem liegt , aber ich weiß nciht wie ich es beheben kann.
Ich muss doch erst von Dreieck eine INSTANZ mit dem KONSTRUKTOR-AUFRUF erstellen , damit ich z.B
Delphi-Quellcode:
benutzen kann.
procedure tdreieck.setx
Und dieses x ist in der Viereckklasse und Dreieck erbt von dieser Viereckklasse , also muss Dreieck automatisch auch die Variable x auf Integer haben ? |
AW: Konstruktor
Meinst Du sowas?
Delphi-Quellcode:
Var
MeinDreieck : TDreiEck; Begin MeinDreieck := TDreieck.Create; // Instantiiert |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz