next up previous contents
Next: 29.2 メンバ関数 Up: 29.1 クラスとオブジェクト Previous: 29.1.1 クラス

29.1.2 オブジェクト

以上のようにして宣言したものを具体的にメモリ上に静的に確保するには 以下のようにします。

      Point a;

上の場合には、今まで変数を確保してきた方法と同じであるが、問題になる のは動的に(必要な時に必要なだけ)確保する方法である。この場合、以下の ように新しい書き方をする。

      Point * p = new Point();

これは構造体の場合と比較してみればよく分かります。

      struct Point * p = (struct Point*) malloc( sizeof( Point ));

つまり、クラスでは陽にメモリを確保していましたが、new という新しい 演算子でこれを行います。しかし、まったく同じではなく、C++ での 方法の方が更に進んだ機能が付け加えられています。それがコンストラクタ という部分で、クラス名と同じ名前のメンバ関数をクラスの中に書いておくと 、そのメンバ関数は new の際に自動的に呼び出されるようになっています。 つまり、初期化が自動的に行われる訳です。コンストラクタはそのクラスへの ポインタを返すのでデータ型の指定は必要ありません。 また、同様に、メモリから削除するのは、C では free() を用いましたが、 C++ では delete 演算子を用い、 delete は new と同じで削除の前に デストラクタと呼ばれるメンバ関数が定義されていればそれを呼び出してから オブジェクトを消去するようになっています。



Noriyo Kanayama