Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Konstruktor (https://www.delphipraxis.net/167288-konstruktor.html)

hotkey 21. Mär 2012 17:17

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:
  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;
Ich weiß , das ist nicht richtig OOP , ist aber auch nicht "wichtig" , in der Klausur wird auf was anderes mehr gesetzt.

Wenn ich jetzt zum Beispiel.

Delphi-Quellcode:
procedure tdreieck.setx
schreibe , dann erkennt er das nicht.

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:
mydreieck := Tdreieck.create
raufklatschen , damit er
Delphi-Quellcode:
procedure tdreieck.setx
zum Beispiel erkennt ?

Danke schon im Voraus.

mkinzler 21. Mär 2012 17:27

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;
  ...

hotkey 21. Mär 2012 17:35

AW: Konstruktor
 
Das mit
Delphi-Quellcode:
procedure Tviereck.setx
funktioniert ja bei mir , aber sobald ich x,y von Viereck vererbe kann ich mit dem Punkt-Operator
Delphi-Quellcode:
Tdreieck.setx
diesen Befehl nicht ausführen , da er sagt , dass x nicht erkannt wird , obwohl es ja vererbt wird
Delphi-Quellcode:
Tdreieck = class(tviereck)
wie löse ich das blöde Problem ?

DeddyH 21. Mär 2012 18:01

AW: Konstruktor
 
Du weißt aber, was private, protected, virtual, override usw. bedeuten?

hotkey 21. Mär 2012 18:08

AW: Konstruktor
 
Bis jetzt hatten wir nur protected , private und public.

Spielt das eine Rolle für die Problemlösung , wenn ich fragen darf ?

DeddyH 21. Mär 2012 18:15

AW: Konstruktor
 
Ich denke schon, oder soll jede abgeleitete Klasse ihr eigenes SetX usw. haben? Wenn ja, wozu dann erben?

hotkey 21. Mär 2012 18:18

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 ?

Peter1999 21. Mär 2012 18:23

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???

hotkey 21. Mär 2012 18:28

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:
procedure tdreieck.setx
benutzen kann.
Und dieses x ist in der Viereckklasse und Dreieck erbt von dieser Viereckklasse , also muss Dreieck automatisch auch die Variable x auf Integer haben ?

Iwo Asnet 21. Mär 2012 18:33

AW: Konstruktor
 
Meinst Du sowas?

Delphi-Quellcode:
Var
  MeinDreieck : TDreiEck;

Begin
  MeinDreieck := TDreieck.Create; // Instantiiert


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:57 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz