Autor Beitrag
perry5
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: Di 23.01.07 01:24 
Hi von C++ bin ich jetzt gewohnt, dass der Basiskonstruktor immer von dem Konstruktor der abgeleiteten Klasse aufgerufen wird.
Ich habe also eine Basisklasse mit 5 Werten, und ungefähr 8 abgeleitete Klassen. Nun sollen die einheitliche Standardwerte haben, das wollte ich halt durch den Basiskonstruktor lösen. In C++ hätte das ja auch funktioniert, aber in Delhpi geht das irgendwie so net, weil die Werte nie gesetzt werden, d.h. ich vermute der Basiskonstruktor wurde nicht aufgerufen.
Jetzt finde ich es aber stilistisch extrem unschön in jeder abgeleiteten Klasse diese Standardinitialisierungen zu schreiben, gibt es also eine bessere Lösung, als in jedem abgeleiteten Konstruktor eine InitValues-Procedure aufzurufen die dass dann erledigen würde?
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 23.01.07 01:36 
zeig mal ein stück von deinen code der nicht geht, oder ein beispiel dessen.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
perry5 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: Di 23.01.07 01:47 
Also, ein Beispiel:
Ich habe eine Klasse, "Basisklasse". Diese hat eine Varaible "Wert".
Dann hab ich die Klasse "Unterklasse" die von "basisklasse" abgeleitet ist.
Im Basisklassen-konstruktor setze ich den Wert von "Wert" auf 5.
Ich habe eine Variable "meineKlasse" von typ Basisklasse, die ich mit einer "Unterklasse" initialisiere. Qausi einfache Polymorphie.
So, wenn ich jetzt von "meineKlasse" eine Funktion aufrufe, hat "Wert" nicht den Inhalt 5.
Meiner Meinung weil nur der konstruktor von Unterklasse aufgerufen wurde, der eignetlich gar nichts macht.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 23.01.07 01:56 
Wenn der Konstruktor der abgeleiteten Klasse gar nichts macht, dann lasse ihn einfach weg. Wenn Du in der abgeleiteten Klasse den Konstruktor brauchst, dann rufe am Anfang inherited; auf, um den Konstruktor der Basisklasse aufzurufen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 23.01.07 02:02 
Ich verstehe worauf du hinaus willst.
Zitat:

Meiner Meinung weil nur der konstruktor von Unterklasse aufgerufen wurde, der eignetlich gar nichts macht.


Glaube ich zwar nicht. Weil er Compiler die Zeile die ich hinzugefügt habe normalerweise selber einfügt. Aber probier es mal so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
type
  TBaseClass = class
  public
    constructor Create;
  private
    Wert: integer;
  end;

  TSubClass = class(TBaseClass)
  public
    constructor Create;
  private
  end;

constructor TBaseClass.Create;
begin
  Wert := 5;
end;

constructor TSubClass.Create;
begin
  inherited// hinzugefügt
end;

procedure DoIt;
var klasse: TBaseClass;
begin
  klasse:=TSubClass.Create;
end;

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
perry5 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: Di 23.01.07 13:41 
Ok, danke es scheint zu funktionieren.
Und dieses inheried gibt es nicht nur bei Konstruktoren, sondern ruft allgemein die jeweilige Funktion des Basisobjektes auf, richitg?
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 23.01.07 16:55 
Ja ganz genau. Es wird immer die direkte Vorgängerfunktion aufgerufen. Aber nur dann wen diese identische Parameter hat.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Robinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: Di 23.01.07 17:08 
Wenn die parameter nicht identisch sind kann man aber auch einfach

ausblenden Delphi-Quelltext
1:
inherited Create(Param1, Param2);					


nutzen

gruss, rob