category: C / C++
DATE : 2006/09/22 (Fri)
DATE : 2006/09/22 (Fri)
2次元座標の点を表す Point クラスを考えてみます。
Java の場合は以下のようなクラスになります。
public class Point { private int x; private int y; public Point() { } public Point(int x, int y) { this.x = x; this.y = y; } public int getX() { return this.x; } public int getY() { return this.y; } }
引数なしのコンストラクタの場合は原点 (0, 0) を表し、引数を指定したコンストラクタでは引数に渡された座標を設定します。
このコードを C++ のクラスで表現すると次のようになります。
class Point { private : int x; int y; public : Point(); Point(int x, int y); int getX() const; int getY() const; }; Point::Point() : x(0), y(0) { } Point::Point(int x, int y) : x(x), y(y) { } int Point::getX() const { return this->x; } int Point::getY() const { return this->y; }
Java の場合、上の Point オブジェクトを生成するには次のようにします。
Point origin = new Point(); Point point = new Point(1, 2);
C++ の場合は、基本的には次のようになります。
Point origin; Point point(1, 2);
コンストラクタに渡す引数を指定しながら変数宣言をするイメージです。
ちなみに、Java の場合、origin, point の両変数に入るのは生成されたオブジェクトの参照ですが、上の C++ の場合はオブジェクトそのものになります。
なお、引数なしのコンストラクタを使用する場合、Java 風の書き方だと「Point origin();」と書きがちですが、この場合はコンパイルエラーとなります。
上の方法で生成した場合、次のようにしてクラスの public メンバにアクセスできます。
int originX = origin.getX(); int originY = origin.getY();
ただし、上の方法の場合、必要な時に必要な分だけ(動的に)Point オブジェクトを生成することができません。動的に Point オブジェクトを生成するには、次のようにします。
Point* origin = new Point; Point* point = new Point(1, 2);
(,,゚Д゚)ポインタが出てきました。
new 演算子を使うと、生成されたオブジェクトのアドレスが返ってきます。
動的に生成したオブジェクトを使う場合は、C 同様アロー演算子(->)を使います。
int originX = origin->getX(); int originY = origin->getY();
ところで、動的に確保したメモリの領域は解放しなければならない C のように、C++ でも動的に生成したオブジェクトは破棄しなければなりません。そこで、次の記事はオブジェクトの破棄について書こうと思います。
PR
●この記事にコメントする
忍者ブログ [PR]