Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Klasse mit zwei parentklassen definieren
pflo - So 31.10.10 22:14
Titel: Klasse mit zwei parentklassen definieren
hi Leute,
ich hab - kurz gefasst - folgende Situation:
TObject00 = class(TObject)
. procedure abc; virtual;
. procedure def; virtual;
end;
TObject10 = class(TOject00)
. procedure abc; override;
end;
TObject01 = class(TObject00)
. procedure def; override;
end;
So weit. TObject10_01 soll jetzt die procedure abc von TObject10 haben und die procedure def von TObject01.
Ich habe alle Schreibweisen ausprobiert, die mir eingefallen sind.
hat jemand eine Idee?
Danke schon mal in Vorraus, schon alleine dafür, dass du meine Frage durchgelesen hast.
jaenicke - So 31.10.10 22:18
Mehrfachvererbung gibt es in Delphi nicht. Du kannst also nicht von zwei Klassen erben.
Die einzige Möglichkeit ist, die Vererbungshierarchie so hinzubekommen, dass du keine Mehrfachvererbung brauchst. In diesem Zusammenhang sind auch Interfaces oft nützlich.
der organist - Mo 01.11.10 00:24
wenn, das Objekt 10 die abc verändert und 01 die def verändert und beide jeweils die vom andern annehmen, was haben die beiden jeweils für Prozeduren? Sind das nicht dann die gleichen, sprich 10 und 01 haben jeweils abc und def, beide die override Versionen?
Vllt vertuhe ich mich ja auch einfach..
Gruss,
jaenicke - Mo 01.11.10 07:04
Nein, da hast du was falsch verstanden bei der Vererbung.
Wenn ich im Beispiel ein Objekt vom Typ TObject00 erstelle, habe ich die beiden unveränderten Methoden.
Wenn ich ein Objekt vom Typ TObject10 erstelle, habe ich die veränderte Methode abc und die originale def.
Wenn ich ein Objekt vom Typ TObject01 erstelle, habe ich die originale Methode abc und die veränderte def.
Erwünscht wäre jetzt hier ein Objekt, das beide veränderten Methoden enthält. Also sowohl von TObject10 als auch von TObject01 abgeleitet ist. Wenn es denn gehen würde also sowas:
Delphi-Quelltext
1:
| TObject11 = class(TObject01, TObject10) |
Diese Schreibweise funktioniert in Delphi zwar, aber es darf dabei nur eine Klasse vorkommen, der Rest können nur ein oder mehrere Interfaces sein. (Dass das überhaupt geht, war zur Unterstützung von COM notwendig.)
Xion - Mo 01.11.10 09:00
Als Lösung kannst du eigentlich nur Delegation verwenden:
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:
| type TObject00 = class(TObject) procedure abc; virtual; procedure def; virtual; end;
type TObject10 = class(TOject00) procedure abc; override; end;
type TObject01 = class(TObject00) procedure def; override; end;
type TObject10_01 = class(TObject10) private obj01: Tobject01; public procedure def; override; end;
procedure TObject10_01.def; begin if obj01=nil then obj01:=TObject01.Create; obj01.def; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!