人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C++言語初心者です。コピーコンストラクタのところが分かりません。
どなたかご教授お願いします。

Copy1.cppの
for(int i = 0; i < array0to9.Size(); ++i)
{
array0to9.Set(i, i);
}

の意味が分かりません。すみませんが教えていただけないでしょうか?
上記のfor文がある場合は、
コンストラクタが呼ばれました。要素数は 10です。
Viss : No.1
コピーコンストラクタが呼ばれました。
Viss : No.2
0 1 2 3 4 5 6 7 8 9
Viss : No.3
デストラクタが呼ばれました要素数は10でした
Viss : No.4
デストラクタが呼ばれました要素数は10でした

となります。コメントアウトすると、0 0 0 0 0 0 0 0 0となります。
なぜ、上記のfor文があると、0 1 2 3 4 5 6 7 8 9 と
表示されるのでしょうか? すみません、どなたかよろしくお願いいたします。

//IntArray.h
http://d.hatena.ne.jp/gbs01/20090609/1244516347

//IntArray.cpp
http://d.hatena.ne.jp/gbs01/20090609/1244516346

//Copy1.cpp
http://d.hatena.ne.jp/gbs01/20090609/1244516345

●質問者: gbs01
●カテゴリ:コンピュータ 学習・教育
✍キーワード:C++ SET すみません クタ コピー
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Mook
●35ポイント ベストアンサー

これは配列のサイズだけループ処理を行っており、

配列の各要素に要素のインデックスと同じ数値を設定する処理です。

for(int i = 0; i < array0to9.Size(); ++i)
{
 array0to9.Set(i, i);
}

両方に i が使用されているのでわかりずらいですが、

 array0to9.Set(i, v);

のように表記すると Set は配列の n 番目の要素に v を設定するという関数ですから、これを


 array0to9.Set(i, 100);
 array0to9.Set(i, i * 20 );

のように変えてみたら、働きが分かりませんか。


for 文の処理以外に疑問があるようでしたら、コメントください。

◎質問者からの返答

なるほど、ありがとうございます。助かりました。


2 ● yo-kun
●35ポイント

こんにちは。

本件ですがコピーコンストラクタの理解は関係ありません。


IntArrayは内部でintの配列を持っているだけのクラスです。

コンストラクタで配列のサイズを指定し、Size()メソッドでサイズを取得できます。

Get(int i)で配列のi番目の要素を取得でき、Set(int i, int value)で配列のi番目の要素をvalueに設定できます。


さて、mainを見てみましょう。

最初にIntArrayのコンストラクタに10を渡してIntArrayを一つ作っています。

この時点でarray0to9.Size()は10になっています。


従ってfor文はiを0から9まで10回繰り返します。

array0to9.Set( 0, 0 );

array0to9.Set( 1, 1 );

array0to9.Set( 2, 2 );

array0to9.Set( 3, 3 );

array0to9.Set( 4, 4 );

array0to9.Set( 5, 5 );

array0to9.Set( 6, 6 );

array0to9.Set( 7, 7 );

array0to9.Set( 8, 8 );

array0to9.Set( 9, 9 );

と書くのと同様です。

それぞれ、

配列の0番目の内容を0にする、

配列の1番目の内容を1にする、

配列の2番目の内容を2にする、

配列の3番目の内容を3にする、

...

ということです。

このarray0to9がコピーされてShowに渡されるので出力が0 1 2 3 4 5 6 7 8 9となるのです。


ちなみにfor文をコメントアウトすると、配列が確保され値が設定されないままとなります。

gbs01様の処理系では0 0 0 0 0 0 0 0 0となるようですが、

C++の仕様として、初期化されていない配列の中身が何になるかは保証されません。

絶対に0 0 0 0 0 0 0 0 0となると考えてはいけないということです。

◎質問者からの返答

なるほど、丁寧にありがとうございます。助かりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ