Autor Beitrag
baphumet
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

Windows XP
Delphi 7
BeitragVerfasst: Do 08.10.09 16:21 
Also ich kenn den Unterschied zwischen dynamischen und virtuellen Methoden, der Unterschied zwischen überladen(overload) und überscheiben(override) ist mir auch klar, mit dem Befehl as kann ein Typcast durchgeführt werden und durch is eine Abfrage vorgenommen werden ob ein Objekt ein Objekt einer bestimmten Klasse ist. Mit dem Befehl abstract wird eine Methode als abstrakt definiert, wird also in entsprechender Klasse nicht implementiert, sondern in den abgeleiteten

Das einzige was mir ein Rätsel bleibt ist der Befehl inherited, selbst die Hilfe nutzt mir da nichts und bei properties blick ich auch nicht völlig durch. Ich kapier properties soweit, das es das Prinzip information hiding unterstützt und mit diesen Lese- bzw. Schreibzugriffe auf die Attribute einer Klasse möglich sind, aber was sagen die Parameter (default, nodefault) im Klartext aus und wie funktioniert das überschreiben bzw. überladen von properties.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Do 08.10.09 16:24 
inherited ruft die ererbte Methode auf

_________________
Markus Kinzler.
baphumet Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

Windows XP
Delphi 7
BeitragVerfasst: Do 08.10.09 16:38 
Das heißt folgendes

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
T1=class
private
public
end;
T2=class(T1)
private
public
end;

wenn ich in T2 eine Methode mit inherited aufrufe, wird die Methode von T1 aufgerufen.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 08.10.09 16:41 
wenn du beide du in T2 die methode von T1 überschreibst glaub ich, dann ja.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Do 08.10.09 16:41 
Ja. Du musst dich dann nur um die Erweiterungen deiner Klasse kümmern.

_________________
Markus Kinzler.
Critter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: Do 08.10.09 16:42 
Hi,

mit inherited kannst du auf Funktionen aus der Vorfahrklasse zugreifen. Ein kleines Beispiel dazu:

ausblenden volle Höhe 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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  tKlasse1 = class(tObject)
    public
      procedure MachWas; virtual;
  end;

  tKlasse2 = class(tKlasse1)
    public
      procedure MachWas; override;
      procedure MachDasAlte;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ tKlasse2 }

procedure tKlasse2.MachDasAlte;
begin
  inherited MachWas;
end;

procedure tKlasse2.MachWas;
begin
  ShowMessage('Zwei');
end;

{ tKlasse1 }

procedure tKlasse1.MachWas;
begin
  ShowMessage('Eins');
end;

procedure TForm1.Button1Click(Sender: TObject);
  Var
    Klasse2 : tKlasse2;
begin
  Klasse2 := tKlasse2.Create;
  Klasse2.MachWas;
  Klasse2.MachDasAlte;
  Klasse2.Free;
end;

end.


Interessant ist hier MachDasAlte welche das MachWas von tKlasse1 und nicht von tKlasse2 aufgerufen.

Du gibst also hinter inherited den Namen der Funktion aus der Vohrfahrklasse an. Wenn die Methode in der Vorfahrklasse genau gleich heist und auch exakt die gleichen Parameter erwartet, kannst du den Methodennamen auch weg lassen.

critter

_________________
Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)