オブジェクト配列

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); */