オブジェクト配列
1870 ワード
オブジェクト配列の初期化:配列の各要素オブジェクトが作成されると、クラスコンストラクタが呼び出されてオブジェクト が初期化する.は、例えば、Point a[10]={Point(1,2)、Point(3,4)}を初期化することによって値を付与することができる. 配列要素に明示的な初期値が指定されていない場合、配列要素はデフォルトのコンストラクタ を呼び出す.配列の各オブジェクトが削除されると、システムは一次構造関数 を呼び出す.
例:
例:
#include
#include
using namespace std;
class Point
{
public:
Point(): x(0), y(0) { sum++; } // , ,
Point(int x, int y): x(x), y(y) { sum++; }
Point(const Point &b) { sum++; }
static int Getsum() { return sum; }
int Getx() { return x; }
int Gety() { return y; }
void Move(int t) { x += t, y += t; }
~Point() { sum--; }
private:
int x, y;
static int sum;
};
int Point::sum = 0;
void Change(Point s[][2], int t)
{ // , , , arr[i][j]
int i, j;
for(i=0;i<=4;i++)
{
for(j=0;j<=1;j++)
s[i][j].Move(t);
}
}
int main(void)
{
int i, j;
Point s[5][2] = {{Point(0,0), Point(3,4)}, {Point(5,6)}};
printf("%d
", Point::Getsum()); // :10
for(i=0;i<=4;i++)
{
for(j=0;j<=1;j++)
printf("s[%d][%d] = (%d, %d); ", i, j, s[i][j].Getx(), s[i][j].Gety());
puts("");
}
Change(s, 100);
for(i=0;i<=4;i++)
{
for(j=0;j<=1;j++)
printf("s[%d][%d] = (%d, %d); ", i, j, s[i][j].Getx(), s[i][j].Gety());
puts("");
}
return 0;
}
/*
s[0][0] = (0, 0); s[0][1] = (3, 4);
s[1][0] = (5, 6); s[1][1] = (0, 0);
s[2][0] = (0, 0); s[2][1] = (0, 0);
s[3][0] = (0, 0); s[3][1] = (0, 0);
s[4][0] = (0, 0); s[4][1] = (0, 0);
s[0][0] = (100, 100); s[0][1] = (103, 104);
s[1][0] = (105, 106); s[1][1] = (100, 100);
s[2][0] = (100, 100); s[2][1] = (100, 100);
s[3][0] = (100, 100); s[3][1] = (100, 100);
s[4][0] = (100, 100); s[4][1] = (100, 100);
*/