2017-04-21 3 views
-1

インスタンスtotoという名前のプロパティを持つクラスを実装したいのですが、tlistのように追加、読み込み、書き込みができる動的配列です。それが正しいD6の中で一重の動的配列を持つクラスの最短実装は何ですか?

Tmodel = Class(TObject) 
     ftoto:array of single; 
     function gettoto(ind : integer):single 
     function gettotosize:integer; 
     procedure settoto(ind : integer;valeur:single); 
     property toto[ind:integer]:single read gettoto write settoto; 
     property totosize:integer read gettotosize; 
    end; 


    function Tmodel.gettoto(ind : integer):single; 
    begin 
    result:=ftoto[ind]; 
    end; 
    procedure Tmodel.settoto(ind : integer;valeur:single); 
    begin 
    setlength(ftoto,ind+1); 
    ftoto[ind]:=valeur; 
    end; 
    function Tmodel.gettotosize:integer; 
    begin 
    result:=length(ftoto); 
    end; 

です: 私はこれを書きましたか?

答えて

0

totoプロパティセッター内にSetLength()を呼び出すのは間違っています。 totosizeプロパティを変更して、配列のサイズを変更するための設定を与えます。

type 
    TModel = class(TObject) 
    private 
    fToto: array of Single; 
    function GetToto(index: Integer): Single; 
    function GetTotoSize: Integer; 
    procedure SetToto(index: integer; value: Single); 
    procedure SetTotoSize(value: Integer); 
    public 
    property Toto[index: Integer]: Single read GetToto write SetToto; 
    property TotoSize: Integer read GetTotoSize write SetTotoSize; 
    end; 

function TModel.GetToto(index: Integer): Single; 
begin 
    Result := fToto[index]; 
end; 

procedure TModel.SetToto(index: Integer; value: Single); 
begin 
    fToto[index] := value; 
end; 

function TModel.GetTotoSize: Integer; 
begin 
    Result := Length(fToto); 
end; 

procedure TModel.SetTotoSize(value: Integer); 
begin 
    SetLength(fToto, value); 
end; 
+0

デストラクタはどうですか?私はリークを避けるために自由奔放を加えるべきですか? – bbd

+0

推測の代わりに、動的配列が管理されていることを伝える文書を読んでください。 –

+0

DHは常に否定的で役に立たないコメントであるので、私の投稿に答えることはできません。事前の知識 – bbd

関連する問題