Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi überladene Operator und dyn. Array's (https://www.delphipraxis.net/107957-ueberladene-operator-und-dyn-arrays.html)

Kroko1999 5. Feb 2008 10:15


überladene Operator und dyn. Array's
 
Wie im Freeware-Bereich bereits ersichtlich, bastle ich ein paar Units mit Hilfe von überladenen Operatoren. Dabei gibt es mit komplexe Zahlen und Brüchen keine Probleme.
Jetzt bin ich bei Polynomen und hier taucht das 1.Porblem auf, denn die Koeffizienten sind ein dynamisches Array of Double.
Bei der Zuweisung:
Code:
type
  TPolynom = record
    public
      A: array of Double;
      // usw.
  end;
var
  FX,FZ: TPolynom;
begin
  FX .Grad := 1;
  FX.A[0] := -2;
  FX.A[1] := 1; //x-2
  FZ := FX;
  FZ[0] := -4;
end;
ist X(x) = x-4 und Z(x)=x-4 !
Sogar ein Überschreiben von
Code:
   
class operator Implicit(const A: TPolynom): TPolynom;
bringt nichts.

Hat jemand einen Rat?

Laufi 5. Feb 2008 10:27

Re: überladene Operator und dyn. Array's
 
Hallo

Da dynamische Arrays leider kein copyonwrite haben wie strings musst du das selber machen! Du musst bei jedem setter prüfen ob der referenzcounter > 0 ist und wenn ja musst du ein copy() machen :)

Liebe Grüsse
Laufi

Mr.borland 5. Feb 2008 10:57

Re: überladene Operator und dyn. Array's
 
du musst den zugriffs- operator Items realisieren; probiere es mal so:
Delphi-Quellcode:
type TPolynom = record
    private
     function GetCoef(idx:Integer):double;
     procedure PutCoef(Idx: Integer; value:double);
    public

      A: array of Double;
      Grad:integer;
         // usw.
      property Items[Idx: Integer]: double read GetCoef write PutCoef; default;
end;
var FX,FZ: TPolynom;
dann kannst du auch schreiben und lesen der koefizienten wie folgt realisieren

Delphi-Quellcode:
  setLength(FX.A,10);
  setLength(FZ.A,10);

  FX.Grad := 1;
  FX.A[0] := -2;
  FX.A[1] := 1; //x-2
  FZ := FX;
  FZ[0] := -4;
grüsse

Kroko1999 5. Feb 2008 11:22

Re: überladene Operator und dyn. Array's
 
laufi: Danke, habe ich momentan per Methode Assign realisiert

Mr.borland: das usw. heißt dass A gekapselt per Get- und Set-proceduren, und so funktioniert es ja eben nicht!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 Uhr.

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