性格いい人が優勝

ファイルのコピーの際に利用する
TStringList、TStringsについてお聞きしたいのですが、

TStringList *ABC = new TStringList;
TStrings *DEF = new TStringList;

上記のように宣言し、
ABC->コンポーネント1、DEF->コンポーネント2のように
使うのですが、両方とも上記宣言の右辺がなぜこのように
なるのでしょうか?なぜ2番目の宣言は左辺にTStringsと
記載していて右辺がTStringListなのでしょうか?

そもそもここで記載しているnewの意図や
通常のC言語のポインタの宣言とどう違うのかが
掴めません。どうか初心者でもわかるように
教えていただけないでしょうか?

A 回答 (3件)

簡単に説明するとTStringListはTStringsから派生したクラスなので


TStrings型のポインタは、TStringList型も持つことができます。
>>newの意図
TStringListなどのVCLのクラスを使うには、Builderではポインタとして操作し
newでオブジェクトを作成しなければならない決まりになってます。
(これはDelphiの影響のため)
ですが、正確に理解するためにはNo1の方がおっしゃるとおりC++について
基本から勉強してみる事をお勧めします。
下記のHPなどを参考に読んでみてください。
C++入門
http://wisdom.sakura.ne.jp/programming/cpp/index …
C++
http://www.asahi-net.or.jp/~yf8k-kbys/newcpp0.html
C++Builder
http://gimite.ddo.jp/bcbqtree/qtreemain.cgi

参考URL:http://wisdom.sakura.ne.jp/programming/cpp/index …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
参考になるURLまで教えていただきありがとう
ございます。

お礼日時:2006/12/23 09:00

まず、C++の new は、「演算子」です。


これは、つまりは、 a + b の + などと同じ分類になります。

さて、この場合左辺がポインタなので、初期化として、新しいオブジェクトをひとつ作って、そのオブジェクトのポインタを渡しています。
C言語だと、malloc() という「関数」がこれに近い働きをしていました。

ただし、malloc() はただ単に、要求されたサイズのメモリを確保して、その先頭へのポインタを渡すだけです。
これに対して、C++では、「クラス」の機構が導入されたために、「新しいオブジェクト」を作るには、単に、必要なだけメモリを確保するだけではすみません。

新しいオブジェクトを作るために何をすればいいかは、各クラスのコンストラクタで記述します。いずれにしても、メモリを確保したうえで、何らかの初期化処理をすることで、新しいオブジェクトを生成します。

new 演算子は、この、「メモリの確保」+「コンストラクタの実行(による新しいオブジェクトの生成)」をひとまとめにしたものです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
非常にわかりやすく参考になりました。

お礼日時:2006/12/23 09:01

> 通常のC言語のポインタの宣言とどう違うのかが


> 掴めません。

これはC++なので、C言語と異なるのは当然です。
他の質問についても、一度C++の入門書で一通り勉強してから再質問することをお勧めします。
C++はかなりのボリュームがあるので、基本的なことから一通り説明するには、この場は狭すぎます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
jactaさんのおっしゃる通り一から勉強しなおします。

お礼日時:2006/12/23 08:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!