Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Versuche Objektorientierung zu lernen

  Alt 18. Feb 2012, 22:03
Außerdem würde ich mich freuen wenn mir jemand nocheinmal mit eigenen Worten den Sinn von inhirated und die genaue Funktionsweise des constructors erklären könnte. (Den constructor braucht man irgendwie um Speicher für die klasse zu reservieren und sie zu erstellen, was bedeutet dies genau? Und inherited ka wird halt manchmal auch hingeschrieben und manchmal nicht...)
Jedes Objekt (TObject) hat von Haus aus einen constructor .
Dieser reserviert automatisch den Speicher.

Wenn du keine weiteren Anforderungen an dein Objekt hast, dann brauchst du auch keinen speziellen constructor .

Delphi-Quellcode:
type
  TFoo = class
    public
      procedure DoSomething;
  end;

...

procedure TFoo.DoSomething;
begin
  // some code
end;
Allerdings musst du alles, was du in der Typ-Deklaration angibst auch ausformulieren (Ausnahme bei virtual abstract )

inherited bedeutet, dass hier der Code aus der Ableitung ausgeführt werden soll.
Delphi-Quellcode:
type
  TFoo = class
    public
      InFooObject : TObject;
      constructor Create;
      destructor Destroy; override; // ist in TObject als virtual deklariert, darum override
  end;

...

constructor TFoo.Create;
begin
  inherited; // den Code der Vorgänger-Klasse - hier TObject.Create - ausführen
  
  InFooObject := TObject.Create;
end;

destructor TFoo.Destroy;
begin
  InFooObject.Free;

  inherited; // den Code aus der Vorgänger-Klasse - hier TObject.Destroy - ausführen
end;
Hier mal deine Unit2 korrekt formuliert:
Delphi-Quellcode:
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils;

type
  TRechnen = class( TObject )
    public
      // virtual - weil diese Methode in der Regel überschrieben werden soll
      // abstract - weil es keine Basis-Implementierung gibt, eben halt abstrakt :o)
      function CalcIt( a, b : real ) : real; virtual; abstract;
  end;

  TAddition = class( TRechnen )
    public
      function CalcIt( a, b : real ) : real; override;
  end;

  TSubtraktion = class( TRechnen )
    public
      function CalcIt( a, b : real ) : real; override;
  end;

implementation

function TAddition.CalcIt( a, b : real ) : real;
  begin
    result := a + b;
  end;

function TSubtraktion.CalcIt( a, b : real ) : real;
  begin
    result := a - b;
  end;

end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (18. Feb 2012 um 22:10 Uhr)
  Mit Zitat antworten Zitat