変数の内容のスワップは普通にできますが、
クラスのメンバーの内容をスワップするには
どうすればよいのでしょうか?
必要な部分のみですが、
コードは大体下記のようになっています。
----------------------------------------------
type
TData = class
protected
FField: Integer;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Data: array[0..1] of TData;
begin
Data := TData.Create;
TClass.swap;
Data.Destroy;
end;
procedure TClass.swap;
var
Temp: TData;
begin
Temp := TData.Create;
Temp.FField := Data[0].FField;
Data[0].FField := Data[1].FField;
Data[1].FField := Temp.FField;
Temp.Destroy;
end;
-------------------------------------------
クラス型はアドレスを示してるだけなので(?)、
上記のコードではうまくいかないですよね。
参照先のアドレスが変わっているだけで、
つまりは上書きされてしまっているので。
(順を追って考えると混乱してきた(^^;)
値をスワップするにはどのようにしたらいいでしょうか?
よろしくお願いします。
FormCreate の内容も TClass.swap も意味不明です。
TClass クラスには swap などというメソッドが定義されていませんよ?
> 値をスワップするにはどのようにしたらいいでしょうか?
なにと何を swap させるのですか? Data[] はローカル変数になってるし。
こんなことですか?
type
TData = class
protected
FField: Integer;
end;
var
Data: array[0..1] of TData;
procedure TForm1.FormCreate(Sender: TObject);
begin
Data[0] := TData.Create;
Data[0].FField := 1010;
Data[1] := TData.Create;
Data[1].FField := 1111;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Temp:integer;
begin
// FField の swap
Temp := Data[0].FField;
Data[0].FField := Data[1].FField;
Data[1].FField := Temp;
// 表示
Label1.Caption := IntToStr(Data[0].FField);
Label2.Caption := IntToStr(Data[1].FField);
end;
追加です。
procedure TForm1.FormDestroy(Sender: TObject);
begin
Data[0].Free;
Data[1].Free;
end;
すいません。
かなり省略してしまったので…。
わかりました!
クラスのフィールド、たとえば、integer型のフィールドなら、
普通にinteger型で宣言された変数に代入すればいいんですよね。
なにも同じクラス型じゃなくても。
ありがとうございました!!
ツイート | ![]() |