3-1-3. コンストラクタとデストラクタ

公開日: 22:55 3. オブジェクト指向編/3-1. クラスとオブジェクト/3-1-3. コンストラクタとデストラクタ

コンストラクタ

コンストラクタはクラスの新しいオブジェクトを生成した時に実行される特別な関数です。コンストラクタはクラスと完全に同じ名前を持ち、返り値の型をvoid型ですら持ちません。コンストラクタはメンバ変数の初期値を設定するのにとても便利です。

次の例はコンストラクタのコンセプトを説明しています。
#include <iostream>
 
using namespace std;
 
class Line
{
   public:
      void setLength( double len );
      double getLength( void );
      Line();  // コンストラクタ
 
   private:
      double length;
};
 
// コンストラクタを含むメンバ関数の定義
Line::Line(void)
{
    cout << "オブジェクトが生成されました。" << endl;
}
 
void Line::setLength( double len )
{
    length = len;
}
 
double Line::getLength( void )
{
    return length;
}
// Main()
int main()
{
   Line line;
 
   // lengthをセット
   line.setLength(6.0); 
   cout << "線の長さ : " << line.getLength() <<endl;
 
   return 0;
}
上のコードをコンパイルし実行すると、次の結果が得られます。
オブジェクトが生成されました。
線の長さ : 6

引数を取るコンストラクタ

デフォルトコンストラクタは引数を持ちませんが、必要であればコンストラクタは引数 を取ることができます。これはオブジェクト生成時に初期値を割り当てるのに役立ちま す。
#include <iostream>
 
using namespace std;
 
class Line
{
   public:
      void setLength( double len );
      double getLength( void );
      Line(double len);  // コンストラクタ
 
   private:
      double length;
};
 
// コンストラクタを含むメンバ関数の定義
Line::Line( double len)
{
    cout << "オブジェクトが生成されました。length = " << len << endl;
    length = len;
}
 
void Line::setLength( double len )
{
    length = len;
}
 
double Line::getLength( void )
{
    return length;
}
// プログラムの開始
int main()
{
   Line line(10.0);
 
   // lengthを最初にセット
   cout << "線の長さ : " << line.getLength() <<endl;
   // lengthを再セット
   line.setLength(6.0); 
   cout << "線の長さ : " << line.getLength() <<endl;
 
   return 0;
}
上のコードをコンパイルし実行すると、次の結果が得られます。
オブジェクトが生成されました。
length = 10
線の長さ : 10
線の長さ : 6

初期化指定子

コンストラクタに引数を渡す場合、フィールドの初期化に次の構文を使うことが可能で す。
Line::Line( double len): length(len)
{
    cout << "オブジェクトが生成されました。length = " << len << endl;
}
上の構文は次のものと同じです。

Line::Line( double len)
{
    cout << "オブジェクトが生成されました。length = " << len << endl;
    length = len;
}
クラスCがあり、X、Y、Z...と初期化したい複数のフィールドがあるとき、次の構文を使っ てフィールドをカンマで分けることができます。
C::C( double a, double b, double c): X(a), Y(b), Z(c)
{
  ....
}

クラスデストラクタ

デストラクタはクラスのオブジェクトがスコープ外へ出て行く時、またはクラスのオブジェクトのポインタへdelete式が適応された時に実行される特別な関数です。

デストラクタは頭にチルダ(~)がついたクラスと全く同じ名前を持ち、引数を取ることも値を返すこともできません。デストラクタはファイルを閉じたり、メモリを開放するなど、プログラムが終了する前にリソースを開放するのに役立ちます。

次の例はデストラクタのコンセプトを説明したものです。
#include <iostream>
 
using namespace std;
 
class Line
{
   public:
      void setLength( double len );
      double getLength( void );
      Line();   // コンストラクタ
      ~Line();  // デストラクタ
 
   private:
      double length;
};
 
// コンストラクタを含むメンバ関数の定義
Line::Line(void)
{
    cout << "オブジェクトが生成されました。" << endl;
}
Line::~Line(void)
{
    cout << "オブジェクトが破棄されました。" << endl;
}
 
void Line::setLength( double len )
{
    length = len;
}
 
double Line::getLength( void )
{
    return length;
}
// プログラムの開始
int main( )
{
   Line line;
 
   // lengthをセット
   line.setLength(6.0); 
   cout << "線の長さ : " << line.getLength() <<endl;
 
   return 0;
}
上のコードをコンパイルし実行すると、次の結果が得られます。
オブジェクトが生成されました。
線の長さ : 6
オブジェクトが破棄されました。
  • ?±??G???g???[?d????u?b?N?}?[?N???A

0 件のコメント :

コメントを投稿