• ベストアンサー

C++ Builderでのnewコマンドについて

ファイルのコピーの際に利用する TStringList、TStringsについてお聞きしたいのですが、 TStringList *ABC = new TStringList; TStrings *DEF = new TStringList; 上記のように宣言し、 ABC->コンポーネント1、DEF->コンポーネント2のように 使うのですが、両方とも上記宣言の右辺がなぜこのように なるのでしょうか?なぜ2番目の宣言は左辺にTStringsと 記載していて右辺がTStringListなのでしょうか? そもそもここで記載しているnewの意図や 通常のC言語のポインタの宣言とどう違うのかが 掴めません。どうか初心者でもわかるように 教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Rulurulu
  • ベストアンサー率47% (8/17)
回答No.2

簡単に説明するとTStringListはTStringsから派生したクラスなので TStrings型のポインタは、TStringList型も持つことができます。 >>newの意図 TStringListなどのVCLのクラスを使うには、Builderではポインタとして操作し newでオブジェクトを作成しなければならない決まりになってます。 (これはDelphiの影響のため) ですが、正確に理解するためにはNo1の方がおっしゃるとおりC++について 基本から勉強してみる事をお勧めします。 下記のHPなどを参考に読んでみてください。 C++入門 http://wisdom.sakura.ne.jp/programming/cpp/index.html 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.html
noname#25605
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

まず、C++の new は、「演算子」です。 これは、つまりは、 a + b の + などと同じ分類になります。 さて、この場合左辺がポインタなので、初期化として、新しいオブジェクトをひとつ作って、そのオブジェクトのポインタを渡しています。 C言語だと、malloc() という「関数」がこれに近い働きをしていました。 ただし、malloc() はただ単に、要求されたサイズのメモリを確保して、その先頭へのポインタを渡すだけです。 これに対して、C++では、「クラス」の機構が導入されたために、「新しいオブジェクト」を作るには、単に、必要なだけメモリを確保するだけではすみません。 新しいオブジェクトを作るために何をすればいいかは、各クラスのコンストラクタで記述します。いずれにしても、メモリを確保したうえで、何らかの初期化処理をすることで、新しいオブジェクトを生成します。 new 演算子は、この、「メモリの確保」+「コンストラクタの実行(による新しいオブジェクトの生成)」をひとまとめにしたものです。

noname#25605
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

> 通常のC言語のポインタの宣言とどう違うのかが > 掴めません。 これはC++なので、C言語と異なるのは当然です。 他の質問についても、一度C++の入門書で一通り勉強してから再質問することをお勧めします。 C++はかなりのボリュームがあるので、基本的なことから一通り説明するには、この場は狭すぎます。

noname#25605
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A