Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktion in übergeordneter Klasse aufrufen (https://www.delphipraxis.net/64438-funktion-uebergeordneter-klasse-aufrufen.html)

Andreas H. 3. Mär 2006 17:00


Funktion in übergeordneter Klasse aufrufen
 
Hallo,

Ich habe eine Klasse geschrieben, die unter Anderem eine Liste von Objekten verwaltet. Aus diesen Objekten heraus möchte ich eine Funktion der Elternklasse aufrufen.

Gibts da ne Möglichkeit?


Gruß Andreas

leddl 3. Mär 2006 17:05

Re: Funktion in übergeordneter Klasse aufrufen
 
Wenn du diese Klasse von der anderen Klasse abgeleitet hast, solltest du doch problemlos einfach die Methode aufrufen können. Schonmal probiert?

//Edit: Das ist ja unter anderem der Sinn von Vererbung :zwinker:

Elvis 3. Mär 2006 17:11

Re: Funktion in übergeordneter Klasse aufrufen
 
Zitat:

Zitat von leddl
Wenn du diese Klasse von der anderen Klasse abgeleitet hast, solltest du doch problemlos einfach die Methode aufrufen können. Schonmal probiert?

//Edit: Das ist ja unter anderem der Sinn von Vererbung :zwinker:

Er hat nix davon gesagt, dass er tatasächlich alle Klassen von einem Vorfahren abgeleitet hat.(Eltern, Vorfahre & Co werden nur zu oft falsch benutzt... )
Ich denke es ist eher wie das hier, somit gibt's auch kein Bienchen für's Suchen. :warn:

leddl 3. Mär 2006 17:15

Re: Funktion in übergeordneter Klasse aufrufen
 
Ah OK, dann hab ich "Elternklasse" wohl falsch interpretiert. Nach deiner Erklärung erkenne ich auch den anderen möglichen Aspekt der Frage :lol:

Andreas H. 3. Mär 2006 17:20

Re: Funktion in übergeordneter Klasse aufrufen
 
Hallo,

nee, nicht abgeleitet. Elvis hat recht.
Es sind zwei unabhängige Klassen. Die eine Klasse (oben übergeordnet genannt) speichert eine Liste mit Instanzen der zweiten Klasse. Aus der zweiten Klasse heraus möchte ich eine Funktion der ersten Klasse aufrufen.

Ich hoffe, ich habe mich jetzt klarer ausgedrückt.

Den Artikel kenne ich! Habs leider nicht verstanden. :oops:


Gruß Andreas

SirThornberry 3. Mär 2006 17:24

Re: Funktion in übergeordneter Klasse aufrufen
 
ok, so würde es funktionieren
Delphi-Quellcode:
type
  TElternKlasse = class(TObject)
  private
    fList: TList; //Liste mit den Instane von TKindKlasse
    procedure FCreateKind;
[...]
  TKindKlasse = class(TObject)
  private
    fParent: TElternKlasse;
  public
    constructor Create(AElternKlasse: TElternKlasse);
  end;
[...]
procedure TElternKlasse.FCreateKind;
var LKind: TKindKlasse;
begin
  //Das Kind erzeugen und als Parameter den Parent (Self = Elternklasse) mitgeben
  LKind := TKindKlasse.Create(Self);
  //Kind in Liste einfügen
  fList.Add(LKind);
end;
[...]
constructor TKindKlasse.Create(AElternKlasse: TElternKlasse);
begin
  inherited Create;
  fParent := AElternKlasse;
  //Ab jetzt kannst du über "fParent" auf den Parent (Elternklasse) zugreifen
end;
[...]

Andreas H. 3. Mär 2006 17:36

Re: Funktion in übergeordneter Klasse aufrufen
 
OK, habs verstanden.
Dem Konstruktor der Kind-Klasse wird ein Zeiger auf die Elternklasse mitgegeben, über den dann auf die Elternklasse zugegriffen werden kann. Gar nicht so schwer - wenn man weiss, wie's geht :)

Danke!

Gruß Andreas

SirThornberry 3. Mär 2006 17:43

Re: Funktion in übergeordneter Klasse aufrufen
 
genau, korrekter Weise heißt es aber nicht "einen Zeiger auf die Elternklasse" sondern "einen Zeiger auf die Elterninstanz". Aber das ist nur Krümelkacken, habs bestimmt auch schon irgendwo falsch geschrieben.

Andreas H. 3. Mär 2006 18:01

Re: Funktion in übergeordneter Klasse aufrufen
 
Ja, war auch so gemeint.

Noch ne kleine Frage:
Ich habe beide Klassen in verschiedenen Units programmiert. Die Unit der Kind-Klasse muss natürlich in der Uses-Klausel der Unit mit der Elternklasse erscheinen. Da ich in der Kindklasse die Elternklasse benötige, bekomme ich eine zirkuläre Unit-Referenz.
Wie komme ich da raus? :gruebel:

Gruß Andreas

glkgereon 3. Mär 2006 18:08

Re: Funktion in übergeordneter Klasse aufrufen
 
bei einem von beiden muss die Uses-Klausel dann in den implementation-Teil...allerdings kannst du dann die Klassendeklaration nicht mehr verwenden :gruebel:

ich glaube du kannst eine Art "Vordeklaration" machen, indem nur nur bekanntgibst, das es so eine Klasse gibt (type Elternklasse = class;) ohne eine richtige Deklaration, und dann die wirkliche Deklaration erst im implementation-Teil via uses includes....

bin mir aber nicht sicher...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr.
Seite 1 von 2  1 2      

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