Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi virtual / override ?? (https://www.delphipraxis.net/28051-virtual-override.html)

Pseudemys Nelsoni 20. Aug 2004 19:29

Re: virtual / override ??
 
Zitat:

dynamic?
nehm einfach immer "virtual" statt "dynamic", nen wirklichen unterschied wirste eh nicht bemerken.

Zitat:

reintroduce ?
wenn ich in der vorgängerklasse eine methode habe:

Delphi-Quellcode:
procedure blub(param1: typ1); virtual;
so kann ich der nachfolger-methode neue parameter geben bzw ändern oder weglassen - halt neu definieren:

Delphi-Quellcode:
procedure blub(param1: typ1, meinneuerparameter: typ2); reintroduce; overload;
und trotzdem noch die vorgängermethode aufrufen:

Delphi-Quellcode:
procedure blub(param1: typ1, meinneuerparameter: typ2);
begin
  inherited {blub};
  // +...
end;
Zitat:

overload?
Mit overload; sind polymorphe funktionen möglich, d.h du kannst funktionen mit gleichem namen haben die sich in den parametern/rückgabewert unterscheiden. Der compiler entscheidet dann je nachdem was du übergibst, welche funktion benutzt wird.

Hansa 20. Aug 2004 20:12

Re: virtual / override ??
 
@Mods: der Beitrag hier steht oben nochmals, anscheinend war ich noch im Edit-Modus, ohne es zu merken.

es geht weiter :

reintroduce fast abgehakt, sofern das hier so stimmt:

ich erweitere Leusels Bsp. um ein Adoptivkind (Kanzler sei Dank ), von dem das Geburtsdatum nicht genau feststeht. Sagen wir, es ist ein Mädchen, also vom Typ TFrau. In diesem Fall ist das Geburtsdatum irrelevant. TFrauAdoptiv soll nur das Geburtsjahr beinhalten. Ich steige also mit "reintroduce" neu in die Vererbungskette ein. Also TMensch -> TFrau -> TFrauAdoptiv als "reintroduce", was dann allerdings bedeutet, daß alle bereits in TMensch und danach deklarierten Eigenschaften neu definiert (zumindest initialisiert) werden müssen

dynamic abgehakt, wegen Überflüssigkeit.

overload nicht abgehakt

Ist zwar soweit klar, aber ich habe mir das MessageDlg mal näher angesehen. Das ist auch "overload", d.h. die Parameterliste wird flexibel. Nun stellt sich für mich folgende Frage :

Mich hat immer schon gewundert, daß "writeln" egal war, ob ein integer, ein string oder sonstwas angezeigt werden sollte. Geht das Overload in diese Richtung ?


noch was ?

nailor 20. Aug 2004 20:19

Re: virtual / override ??
 
ja tut es. oder auch inttostr. das geht mit integer, cardinal, int64, word, byte...

Hansa 20. Aug 2004 20:46

Re: virtual / override ??
 
Also gut, Freiwillige vor. :mrgreen: Wer bastelt mir mit overload eine ShowMessageHansa die einen integer und auch einen real anzeigt, ohne Typumwandlung ?

ungefähr so :

Delphi-Quellcode:
var i : integer;
    r : real
begin
  ShowMessageHansa (i);
  ShowMessageHansa (r);
end.
Da kein Widerspruch kommt, gehe ich davon aus, daß der Rest so stimmt.

xineohp 20. Aug 2004 20:52

Re: virtual / override ??
 
bidde schön:

Delphi-Quellcode:
interface
 
procedure ShowMessageHansa(r: real); overload;
procedure ShowMessageHansa(i: integer); overload;


implementation

procedure ShowMessageHansa(r: real);
begin
  Showmessage( Floattostr(r) );
end;

procedure ShowMessageHansa(i: integer);
begin
  Showmessage( inttostr(i) );
end;

Hansa 20. Aug 2004 21:08

Re: virtual / override ??
 
Ah ja, stimmt. :shock: Dann ist das auch erledigt. Aber das Thema an sich noch nicht ganz. Was ist nun mit den Mischformen ? Wo macht das Sinn, wo nicht ?
Delphi-Quellcode:
abstract; reintroduce;
wird wohl nicht viel bringen. Der Thread ist zu 95 % erledigt. Aber noch immer nicht ganz.

mschaefer 20. Aug 2004 22:53

Re: virtual / override ??
 
Moin, Spätmoin,

Hallo Hansa, das bringt tatsächlich nichts. Mit Abstract sagst Du dem Compiler ja nur, dass Du ein Klassenhinweis anlegst. Die eigentliche Klasse wird ja später erst definiert.

Das reintroduce wird der Compiler hier freundlicherweise ignorierern (was will der den..), den dieses dient nur dem unterdrücken der Wanrmeldung, wenn Du eine Klasse unerreichbar überschreibst (ohne override). Da Abstract bedingt, das hier noch keine Klasse da ist, so ist auch keine Klasse da die Du schon überschreiben kannst. Somit würde ehedem nie eine Warnung entstehen, die mit reintroduce unterdrückt werden könnte.....

Gute Nacht // Martin

Chewie 21. Aug 2004 11:14

Re: virtual / override ??
 
Zitat:

Zitat von Hansa
Mich hat immer schon gewundert, daß "writeln" egal war, ob ein integer, ein string oder sonstwas angezeigt werden sollte. Geht das Overload in diese Richtung ?

Es geht in diese Richtung, aber die Funktionalität von Write/WriteLn etc. wirst du mit Pascal-Sprachmitteln nie nachbauen können. Die beiden "Funktionen" sind, genauso wie High, Low und einige andere, eher sowas wie Compiler-Makros und keine Funktionen/Prozeduren.

maximov 21. Aug 2004 12:04

Re: virtual / override ??
 
Zitat:

Zitat von mschaefer
...
Das reintroduce wird der Compiler hier freundlicherweise ignorierern (was will der den..), den dieses dient nur dem unterdrücken der Wanrmeldung, wenn Du eine Klasse unerreichbar überschreibst (ohne override). Da Abstract bedingt, das hier noch keine Klasse da ist, so ist auch keine Klasse da die Du schon überschreiben kannst. Somit würde ehedem nie eine Warnung entstehen, die mit reintroduce unterdrückt werden könnte.....

Warum sollte das nicht gehen? Ich kann durchaus abstrakte methoden in abgeleiteten klassen einführen. Habs jetzt nicht getestet aber dies sollte so gehen:

Delphi-Quellcode:
type
  TClass1 = class
  public
    procedure XY; virtual;
  end;

  TClass2 = Class(TClass1)
  public
    procedure XY; reintroduce;overload; virtual; abstract;  
    procedure XY(i:integer); reintroduce; overload;
  end;

  TClass3 = Class(TClass2)
  public
    procedure XY; override;  
  end;
Um hier mal ein salat aus allem zur diskusion zu stellen. Aber sollte so gehen und genau das machen was man erwartet :cyclops:


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

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