どなたかご教授お願いします。
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
これは配列のサイズだけループ処理を行っており、
配列の各要素に要素のインデックスと同じ数値を設定する処理です。
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 文の処理以外に疑問があるようでしたら、コメントください。
これは配列のサイズだけループ処理を行っており、
配列の各要素に要素のインデックスと同じ数値を設定する処理です。
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 文の処理以外に疑問があるようでしたら、コメントください。
なるほど、ありがとうございます。助かりました。
こんにちは。
本件ですがコピーコンストラクタの理解は関係ありません。
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となると考えてはいけないということです。
なるほど、丁寧にありがとうございます。助かりました。
なるほど、ありがとうございます。助かりました。