![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
ファイルのコピーの際に利用する
TStringList、TStringsについてお聞きしたいのですが、
TStringList *ABC = new TStringList;
TStrings *DEF = new TStringList;
上記のように宣言し、
ABC->コンポーネント1、DEF->コンポーネント2のように
使うのですが、両方とも上記宣言の右辺がなぜこのように
なるのでしょうか?なぜ2番目の宣言は左辺にTStringsと
記載していて右辺がTStringListなのでしょうか?
そもそもここで記載しているnewの意図や
通常のC言語のポインタの宣言とどう違うのかが
掴めません。どうか初心者でもわかるように
教えていただけないでしょうか?
No.2ベストアンサー
- 回答日時:
簡単に説明すると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 …
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_04.png?e8efa67)
No.3
- 回答日時:
まず、C++の new は、「演算子」です。
これは、つまりは、 a + b の + などと同じ分類になります。
さて、この場合左辺がポインタなので、初期化として、新しいオブジェクトをひとつ作って、そのオブジェクトのポインタを渡しています。
C言語だと、malloc() という「関数」がこれに近い働きをしていました。
ただし、malloc() はただ単に、要求されたサイズのメモリを確保して、その先頭へのポインタを渡すだけです。
これに対して、C++では、「クラス」の機構が導入されたために、「新しいオブジェクト」を作るには、単に、必要なだけメモリを確保するだけではすみません。
新しいオブジェクトを作るために何をすればいいかは、各クラスのコンストラクタで記述します。いずれにしても、メモリを確保したうえで、何らかの初期化処理をすることで、新しいオブジェクトを生成します。
new 演算子は、この、「メモリの確保」+「コンストラクタの実行(による新しいオブジェクトの生成)」をひとまとめにしたものです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) エクセルVBA 3 2022/06/11 16:01
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Excel(エクセル) 【VBAファイル移動】2つのマクロを順に実行。1つ目のマクロが実行不可⇒2つ目が実行不可となる件 2 2022/07/29 12:17
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Excel(エクセル) 【マクロ】ファイルを古い順に、1個ずつ移動する 1 2022/09/06 20:30
- その他(プログラミング・Web制作) robots.txtが”allow”のサイトを探しています 2 2022/10/09 13:07
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- その他(プログラミング・Web制作) 変数宣言および代入について 4 2022/11/02 13:03
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
入れ子の構造体について
-
LPSTR型の初期化について
-
init関数の意味
-
戻り値で構造体を返すことは可...
-
Run-Time Check Failure #3とい...
-
ポインタについて
-
[C言語] NULLは必ず0(番地)です...
-
C言語のポインタに直接アドレス...
-
C言語の勉強しています。すみま...
-
関数ポインタを返す関数の型をt...
-
TCHAR文字列内の検索について
-
ExcelVBAでのkernel32(64bit)
-
fopne で失敗する原因
-
無効なポインタ操作のエラー
-
CImage GetBitsメソッドについて
-
自作DLLの引数について、ポイン...
-
エラーの意味
-
VC++6.0 MFC ダイアログバーを...
-
NULLポインタが0でない処理系と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
戻り値で構造体を返すことは可...
-
LPSTR型の初期化について
-
Cで作成したDLL関数をVBから呼...
-
ExcelVBAでのkernel32(64bit)
-
アプリを32bitから64bit移行
-
構造体とfscanf
-
c言語で任意のファイルから読み...
-
デバイスハンドルとは?
-
main(int argc,char **argv[])...
-
基本アルゴリズムの『返す』の...
-
コンストラクタでnewを失敗した...
-
C言語の関数と配列に関する質問
-
参照型で受け取った引数をポイ...
-
ハンドル、アドレス、ポインタ...
-
DLL<->VB間での受け渡し(文字...
おすすめ情報