クラスを使用するには?


もうすぐ中級者  2009-06-30 00:54:25  No: 34936

クラスを作りました。
ボタンを貼り付けて、以下のようにテストプログラムを作成しました。
コンパイルで「W1036 変数'Test'は初期化されていない可能性があります」
と表示され、
実行してボタンを押した後にモジュールエラーが発生します。
以下のような作り方はできないのでしょうか?

TTest = class
public
  A:  Integer;
  B:  Integer;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Test:  TTest;
begin
  Test.A := 10;
  Test.B := 10;
end;


祟りかもね  2009-06-30 01:24:33  No: 34937

クラスは宣言しただけでは実体のないまるで幽霊のようなもの。
使う前に実体(インスタンス)を作成しなきゃ。


にしの  2009-06-30 02:01:04  No: 34938

クラスにこだわらないのであれば、
TTest = record
  A: Integer;
  B: Integer;
end;
でもいいかも。


もうすぐ中級者  2009-07-01 19:00:38  No: 34939

どうもありがとうございます。
実はC++Builderからの移植をしているのですが、
C++Builder では New(Create) しなくても
実態ができるのですよね。

祟りかもねさんありがとうございます。

TTest = class
public
  A: Integer;
  B: Integer;
end;

TTest *Test; で宣言した場合

Test = new TTest;
delete Test;

ですが

TTest Test;  で宣言すると
そのまま使えるみたいです。

つまり、移植する場合、Create,Freeの形で
すべて変更しなきゃなんないんですね。

にしのさんありがとうございます。

TTest = record
  A: Integer;
  B: Integer;
  function AddData();
end;

function TTest.AddData();
begin
  Result := A + B;
end;

Test: TTest;
GetDt: Integer;

GetDt := Test.AddData();

レコードでクラスのように処理する関数とか作成できますか?
c++Builder  では可能みたいですね。(Cはよくわかんないけど)


ふ〜ん  2009-07-01 19:37:59  No: 34940

Delphiのクラス(オブジェト)は暗黙にポインタであり、C++Builderで
>TTest *Test; で宣言した場合
と同等といえる。

>TTest Test;  で宣言すると
>そのまま使えるみたいです。
この場合はコンストラクタが自動的に実行される?
でもデストラクタも自動的に実行されるのかあやしいかな。

>c++Builder  では可能みたいですね。
そうなの?


ぽむぽむ  2009-07-02 02:26:04  No: 34941

> レコードでクラスのように
Delphi2006 以降なのかな?Record型でできるようになったのは。
それより以前は、非推奨ということで消滅しそうで消滅しなかったobject型を使えばよろしい。

TTest = object
  〜
end;

この辺の説明は、ネット上になかなかないらしいので、ここを紹介しておきます
ttp://delfusa.blog65.fc2.com/blog-entry-109.html


なかさま  2009-07-03 03:37:00  No: 34942

> TTest = object

Delphiでは当初から非推奨のようですが、
2009になってもまだ使えています。
レコードのように代入でコピーできて、
クラスのように継承できるところが
結構使えると思うのですが、なぜに非推奨なのでしょうかね。


ぽむぽむ  2009-07-03 06:55:09  No: 34943

> Delphiでは当初から非推奨のようですが、
> 2009になってもまだ使えています。
お、いいことを聞きました。
今までobject型で作った資産は引き続き使えるのですね。

> 結構使えると思うのですが、なぜに非推奨なのでしょうかね。
「言語仕様の変更で、使えなくなる可能性がありますよ」ということでは?
object型使いの自分としては、生き残っていてくれているのがありがたいです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加