AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [OOP]: Methode (mit Parameter) überschreiben

[OOP]: Methode (mit Parameter) überschreiben

Offene Frage von "mytar"
Ein Thema von mytar · begonnen am 9. Sep 2004 · letzter Beitrag vom 21. Okt 2004
Antwort Antwort
Seite 2 von 2     12
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#11

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 2. Okt 2004, 13:07
Ich verstehe jetzt gar nichts mehr.

Ich dachte dafür gibt es overload?
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#12

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 2. Okt 2004, 13:33
Zitat von mytar:
Ich verstehe jetzt gar nichts mehr.

Ich dachte dafür gibt es overload?
Da hast du natürlich recht.
Mit override überschreibst du eine virtuelle oder abstrakte Methode der Basisklasse.
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#13

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 2. Okt 2004, 16:07
Ja, hast Recht... Ich sollte mehr schlafen.
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#14

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 3. Okt 2004, 13:06
Kann mir aber trotzdem jemand meine Frage beantworten?
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
paelesoft

Registriert seit: 3. Jul 2004
37 Beiträge
 
Delphi 7 Professional
 
#15

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 3. Okt 2004, 13:17
Haben die Methoden der
Zitat:
Basisklasse
denn ein virtual ?

Edit: Denn ohne virtual / dynamic kein override.
Gruß Erik
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#16

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 4. Okt 2004, 17:00
*push*
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 20. Okt 2004, 09:30
Zitat von mytar:
*push*
*pop*
Steht alles in der Onlinehilfe.
(Da steht sogar noch viel mehr. )

in der Delphi7 Hilfe steht
Unterschiede zwischen Überschreiben und Verdecken
Wenn in einer Methodendeklaration dieselben Bezeichner- und Parameterangaben wie bei einer geerbten Methode ohne die Anweisung override angegeben werden, wird die geerbte Methode durch die neue Deklaration verdeckt. Beide Methoden sind jedoch in der abgeleiteten Klasse vorhanden, in der die Methode statisch gebunden wird. Ein Beispiel:
Delphi-Quellcode:
type
  T1 = class(TObject)
    procedure Act; virtual;
  end;
  T2 = class(T1)
    procedure Act; // Act ist neu deklariert, aber nicht überschrieben
  end;
var
  SomeObject: T1;
begin
  SomeObject := T2.Create;
  SomeObject.Act; // T1.Act wird aufgerufen
end;


in der Delphi7 Hilfe steht
Statische Methoden
Methoden sind standardmäßig statisch. Beim Aufruf bestimmt der deklarierte Typ (also der Typ zur Compilierzeit) der im Aufruf verwendeten Klassen- bzw. Objektvariablen, welche Implementierung aktiviert wird. Die Draw-Methoden im folgenden Beispiel sind statisch:
Delphi-Quellcode:
type
  TFigure = class
    procedure Draw;
  end;
  TRectangle = class(TFigure)
    procedure Draw;
  end;
Ausgehend von diesen Deklarationen zeigt das folgende Beispiel, wie sich Aufrufe statischer Methoden auswirken. Im zweiten Aufruf von Figure.Draw referenziert die Variable Figure ein Objekt der Klasse TRectangle. Es wird jedoch die Draw-Implementierung in TFigure aufgerufen, weil Figure als TFigure deklariert ist.
Delphi-Quellcode:
var
  Figure: TFigure;
  Rectangle: TRectangle;
begin
  Figure := TFigure.Create;
  Figure.Draw; // Figure.Draw wird aufgerufen
  Figure.Destroy;
  Figure := TRectangle.Create;
  Figure.Draw; // TFigure.Draw wird aufgerufen
  TRectangle(Figure).Draw; // TRectangle.Draw wird aufgerufen
  Figure.Destroy;
  Rectangle := TRectangle.Create;
  Rectangle.Draw; // TRectangle.Draw wird aufgerufen
  Rectangle.Destroy;
end;


in der Delphi7 Hilfe steht
Virtuelle und dynamische Methoden
Mithilfe der Direktiven virtual und dynamic können Methoden als virtuell oder dynamisch deklariert werden. Virtuelle und dynamische Methoden können im Gegensatz zu statischen Methoden in abgeleiteten Klassen überschrieben werden. Beim Aufrufen einer überschriebenen Methode bestimmt nicht der deklarierte, sondern der aktuelle Typ (also der Typ zur Laufzeit) der im Aufruf verwendeten Klassen- bzw. Objektvariable, welche Implementierung aktiviert wird.

Um eine Methode zu überschreiben, braucht sie nur mit der Direktiven override erneut deklariert zu werden. Dabei müssen Reihenfolge und Typ der Parameter sowie der Typ des Rückgabewertes (falls vorhanden) mit der Deklaration in der Vorfahrklasse übereinstimmen.

Im folgenden Beispiel wird die in der Klasse TFigure deklarierte Methode Draw in zwei abgeleiteten Klassen überschrieben:
Delphi-Quellcode:
type
  TFigure = class
    procedure Draw; virtual;
  end;
  TRectangle = class(TFigure)
    procedure Draw; override;
  end;
  TEllipse = class(TFigure)
    procedure Draw; override;
  end;
Ausgehend von diesen Deklarationen zeigt der folgende Programmcode, wie sich der Aufruf einer virtuellen Methode durch eine Variable auswirkt, deren aktueller Typ zur Laufzeit geändert wird.
Delphi-Quellcode:
var
  Figure: TFigure;
begin
  Figure := TRectangle.Create;
  Figure.Draw; // TRectangle.Draw wird aufgerufen
  Figure.Destroy;
  Figure := TEllipse.Create;
  Figure.Draw; // TEllipse.Draw wird aufgerufen
  Figure.Destroy;
end;
Nur virtuelle und dynamische Methoden können überschrieben werden. Alle Methoden können jedoch überladen werden (siehe Methoden überladen).

Unterschiede zwischen virtuellen und dynamischen Methoden
Virtuelle und dynamische Methoden sind von der Semantik her identisch. Sie unterscheiden sich nur bei der Implementierung der Aufrufverteilung zur Laufzeit. Virtuelle Methoden werden auf Geschwindigkeit, dynamische Methoden auf Code-Größe optimiert.

Im Allgemeinen kann mit virtuellen Methoden polymorphes Verhalten am effizientesten implementiert werden. Dynamische Methoden sind hilfreich, wenn in einer Basisklasse eine große Anzahl überschreibbarer Methoden deklariert ist, die von vielen abgeleiteten Klassen geerbt, aber nur selten überschrieben werden.

Hinweis
Verwenden Sie dynamische Methoden nur, wenn sich daraus ein nachweisbarer Nutzen ergibt. Allgemein sollten Sie virtuelle Methoden verwenden.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

Re: [OOP]: Methode (mit Parameter) überschreiben

  Alt 21. Okt 2004, 12:48
Falls Deine Frage beantwortet ist, nicht vergessen mit dem - Button oben auf der Seite die Frage als beantwortet zu markieren.
Danke
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf