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 Wann ein "inherited" im Constructor ? (https://www.delphipraxis.net/82508-wann-ein-inherited-im-constructor.html)

EccoBravo 14. Dez 2006 16:40


Wann ein "inherited" im Constructor ?
 
Hallo,

wann muß ich ein inherited im Constructor verwenden?

Vielen Dank

E. B.

Dax 14. Dez 2006 16:43

Re: Wann ein "inherited" im Constructor ?
 
Ganz klar: immer.

Wenn du es lääst, wird der Konstruktorcode der Parentklasse nicht ausgeführt: viele Felder, die man später hundertprozentig braucht, bleiben uninitialisiert.

SirThornberry 14. Dez 2006 16:45

Re: Wann ein "inherited" im Constructor ?
 
immer dann wenn du den Constructor der Klasse ausführen willst.
Bei TObject macht es nicht viel Sinn da der Constructor leer ist.
Bei TComponente ist es hingegen wieder vorraussetzung um ordentlich damit arbeiten zu können weil recht viel im Constructor initialisiert wird was auch von Nachfahren benötigt wird.
Man kann eigentlich immer mit inherited den Constructor der Klasse aufrufen von der man erbt außer man will nicht dass das ausgeführt wird.

Muetze1 14. Dez 2006 17:47

Re: Wann ein "inherited" im Constructor ?
 
Frage an die bisherigen Antworter (juhu, ein neues Wort erfunden...): Warum nicht einfach sagen, immer wenn der Constructor virtuell ist in der Basisklasse und wir ihn überschrieben haben (bzw. neu implementieren und den alten verstecken)? Afair ist ohne einen virtuellen Constructor auch kein Zwang da, inherited auf zu rufen.

Dies ist meine Behauptung, und nun ihr... :zwinker:

SirThornberry 14. Dez 2006 17:52

Re: Wann ein "inherited" im Constructor ?
 
auch ein virtueller Constructor muss nicht zwangsläufig nach dem Überschreiben aufgerufen werden wenn im Constructor nix drin steht und dieser nur dazu dient das abgeleitete Klassen bestimmte Parameter erwarten.

Muetze1 14. Dez 2006 18:00

Re: Wann ein "inherited" im Constructor ?
 
Zitat:

Zitat von SirThornberry
auch ein virtueller Constructor muss nicht zwangsläufig nach dem Überschreiben aufgerufen werden wenn im Constructor nix drin steht und dieser nur dazu dient das abgeleitete Klassen bestimmte Parameter erwarten.

Ok, das war mir auch klar und darauf bezog ich mich nicht. Ich meinte den anderen Fall: Constructor nicht virtuell (z.B. von einer Ableitung von einer Ableitung von TObject).

Hawkeye219 14. Dez 2006 18:07

Re: Wann ein "inherited" im Constructor ?
 
Thomas, schau dir mal den Constructor von TPen oder TBrush an...

Gruß Hawkeye

Muetze1 14. Dez 2006 18:21

Re: Wann ein "inherited" im Constructor ?
 
Ja, ok, somit hatte ich Recht mit meiner Annahme bzw. Frage. Das inherited muss aufgerufen werden, wenn der Constructor in der Basisklasse virtuell ist und er somit überschrieben wurde bzw. man will den verdeckte virtuellen Constructor explizit aufrufen. Wenn ein Aufruf nicht gewollt ist, dann natürlich nicht. (ich hoffe damit habe ich alle Möglichkeiten abgedeckt).

Danke!

/EDIT: Ok, dann eine Frage dazu: TGraphic führt einen virtuellen Constructor ein, aber warum wird innerhalb dessen denn "Inherited Create" aufgerufen?

Hawkeye219 14. Dez 2006 18:44

Re: Wann ein "inherited" im Constructor ?
 
Eigentlich wollte ich diese Aussage widerlegen:

Zitat:

Zitat von Muetze1
Afair ist ohne einen virtuellen Constructor auch kein Zwang da, inherited auf zu rufen.

Ein Beispiel:

Delphi-Quellcode:
type
  TMyPen = class (TPen)
  public
    constructor Create;
  end;

constructor TMyPen.Create;
begin
  inherited;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Pen : TMyPen;
begin
  Pen := TMyPen.Create;
  Pen.Color := clRed; // ohne INHERITED in TMyPen.Create knallt es hier...
  Pen.Free;
end;
Zu deiner TGraphic-Frage:

Zitat:

Zitat von Graphics.pas von Delphi 6
Delphi-Quellcode:
constructor TGraphic.Create;
begin                // This stub is required for C++ compatibility.
  inherited Create;  // C++ doesn't support abstract virtual constructors.
end;

Gruß Hawkeye

marabu 14. Dez 2006 19:00

Re: Wann ein "inherited" im Constructor ?
 
Hallo,

nur wegen dem Borland Kommentar im Zitat von Hawkeye: der Object Pascal Compiler kennt zwar abstrakte virtuelle Konstruktoren - aber zur Laufzeit knallt es auf jeden Fall beim Aufruf von inherited im Konstruktor einer abgeleiteten Klasse. Irgendwie unbrauchbar.

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 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