Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Elementzugriff auf einer Klasse ohne Funktionen (https://www.delphipraxis.net/27845-elementzugriff-auf-einer-klasse-ohne-funktionen.html)

Blechwolf 16. Aug 2004 14:58


Elementzugriff auf einer Klasse ohne Funktionen
 
Servus,

ich habe folgendes Problem:

Ich habe einen Datentyp TComplex, der aus einer Real und einer imaginär Zahl besteht.
Von diesem Datentyp brauche ich ein 3D-Array.
Eigentlich kein Problem:

Delphi-Quellcode:
type
 TComplex3Darray = array of array of array of TComplex;
oder eleganter über den Umweg mir ein 2DArray Typ und ein 1DArray Typ zu definieren.

Jetzt will ich aber mit diesem Array noch ein paar Sachen machen. Zum Beispiel in ein 1D Array umwandeln, speziell formatiert ausgeben, FFT drüberjagen, etc.
Also eigentlich ist ne Klasse sinnvoller.

Auch kein Problem:
Delphi-Quellcode:
type
  CComplex3DArray = class
    private:
      Data : array of array of array of TComplex;
    public:
      setDimensions(x,y,z:integer);
usw.

So wie ich das bisher kenne, muß ich jetzt noch zwei Funktion schreiben, die mir die Werte setzen und auslesen.
Also:
Delphi-Quellcode:
Dummy := CComplex3DArray.Create(x,y,z);
Dummy.setValue(x,y,z,Value);
Dummy.getValue(x,y,z);
Meine Frage ist jetzt die folgende:
Gibt es eine Möglichkeit diese Funktionen zum setzen und auslesen von Werte so zu gestalten, das ich statt
Delphi-Quellcode:
Dummy.setValue(x,y,z,Value);
auch
Delphi-Quellcode:
Dummy[x,y,z] := Value;
schreiben kann?

Grüße

Blechwolf

Thebe 16. Aug 2004 15:06

Re: Elementzugriff auf einer Klasse ohne Funktionen
 
klar geht das

Delphi-Quellcode:
type
  CComplex3DArray = class
    private:
      Data : array of array of array of TComplex;
      function GetCells(x, y, z: integer): TComplex;
      procedure SetCells(x, y, z: integer; value: TComplex);
    public:
      procedure setDimensions(x,y,z:integer);
      property Cells[x, y, z: integer]: TComplex read GetCells write SetCells; default;
  end;

function CComplex3DArray.GetCells(x, y, z: integer): TComplex;
begin
   result := Data[x, y, z];
end;

procedure CComplex3DArray.SetCells(x, y, z: integer; value: TComplex);
begin
   Data[x,y,z] := value;
end;

Das wichtige hierbei is das default; hinter dem Property. Damit kannste die Eigenschaft per Dummy[x,y,z] oder aber per Dummy.Cells[x,y,z] ansprechen. So eine default Eigenschaft kannst Du BTW nur mit Array Eigenschaften machen und dann auch nur einmal pro Klasse.

MfG

- Thebe

Luckie 16. Aug 2004 15:07

Re: Elementzugriff auf einer Klasse ohne Funktionen
 
Ich glaube du redest von Delphi-Referenz durchsuchenPropertys. Kuck dazu auch mal in mein Klassen-Tutorial rein ( http://tutorials.luckie-online.de ).

Blechwolf 16. Aug 2004 15:07

Re: Elementzugriff auf einer Klasse ohne Funktionen
 
Bingo :o)

Besten Dank.

mytar 16. Aug 2004 15:09

Re: Elementzugriff auf einer Klasse ohne Funktionen
 
Dazu musst du allerdings wissen was propertys sind.

Beispiel:
Delphi-Quellcode:
public
property SetValue[x,y,z: Integer]: Integer read GetValue write SetValue; default;
Ohne das default kannst du nur über Dummy.SetValue[x, y, z] zugreifen, d.h. lesen und
schreiben.

mit default erreichst du dein Ziel:
Dummy.SetValue[x, y, z] := Value

! Achte allerdings auf die Typen !

greetz
mytar :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 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