クラスとしてArrayを実装した例 ============================== この例ではArrayをクラスとして定義し、今まで関数として書いてきたものを メンバ関数にしています。 .. literalinclude:: s005.cpp :language: c++ :linenos: :lineno-start: 1 :lines: 1-31 ``Array`` クラスの定義の中ではメソッドを宣言したり定義したりしています。 メソッドの形だけ書いて処理の中身を書かないのが宣言で、処理の中身まで書いてあるの が定義です。 .. literalinclude:: s005.cpp :language: c++ :linenos: :lineno-start: 33 :lines: 33-37 クラス名と同じ名前のメソッドはコンストラクタ。 コンストラクタの中にnewが書いてあり、もしもメモリ不足が起きたら ``throw std::bad_alloc`` されるので、このコンストラクタを呼ぶと ``std::bad_alloc`` 例外 が「上がってくる」可能性があります。 .. literalinclude:: s005.cpp :language: c++ :linenos: :lineno-start: 39 :lines: 39-42 名前が「~」+クラス名のデストラクタではメモリを解放します。 .. literalinclude:: s005.cpp :language: c++ :linenos: :lineno-start: 44 :lines: 44-76 前の例での関数は、ここではメソッドになっています。 69行目の ``at(i)`` は、同一オブジェクトの ``at`` メソッドの呼び出しです。 .. literalinclude:: s005.cpp :language: c++ :linenos: :lineno-start: 78 :lines: 78-102 83,84行目で ``Array`` 型の変数を定義している行で、コンストラクタが呼ばれます。 関数から抜ける際にデストラクタが呼ばれます。 全体のソースを以下に示します: .. literalinclude:: s005.cpp :language: c++ :linenos: :download:`Download the source code` 実行例を示します :: % ./s005 s005 Before initialization [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] After initialization [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9] After array copy [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]