1.2.04_C++クラス構築関数&構造解析関数

3740 ワード

C++クラス&オブジェクト
クラスのコンストラクタ
クラスのコンストラクション関数は、クラスの新しいオブジェクトを作成するたびに実行されるクラスの特殊なメンバー関数です.
コンストラクション関数の名前はクラスの名前と全く同じで、タイプもvoidも返されません.コンストラクション関数は、一部のメンバー変数の初期値を設定するために使用できます.
次の例は、構造関数の概念をよりよく理解するのに役立ちます.例
#include 
 
using namespace std;
 
class Line
{
   public:
      void setLength( double len );
      double getLength( void );
      Line();  //       
 
   private:
      double length;
};
 
//       ,      
Line::Line(void)
{
    cout << "Object is being created" << endl;
}
 
void Line::setLength( double len )
{
    length = len;
}
 
double Line::getLength( void )
{
    return length;
}
//       
int main( )
{
   Line line;
 
   //     
   line.setLength(6.0); 
   cout << "Length of line : " << line.getLength() <

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
Object is being created
Length of line : 6

パラメータ付きコンストラクション関数
デフォルトのコンストラクション関数にはパラメータはありませんが、必要に応じてコンストラクション関数にパラメータを付けることもできます.これにより、次の例のように、オブジェクトの作成時にオブジェクトに初期値が割り当てられます.
#include 
 
using namespace std;
 
class Line
{
   public:
      void setLength( double len );
      double getLength( void );
      Line(double len);  //       
 
   private:
      double length;
};
 
//       ,      
Line::Line( double len)
{
    cout << "Object is being created, length = " << len << endl;
    length = len;
}
 
void Line::setLength( double len )
{
    length = len;
}
 
double Line::getLength( void )
{
    return length;
}
//       
int main( )
{
   Line line(10.0);
 
   //          
   cout << "Length of line : " << line.getLength() <

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
Object is being created, length = 10
Length of line : 10
Length of line : 6

初期化リストを使用してフィールドを初期化
初期化リストを使用してフィールドを初期化します.
Line::Line( double len): length(len)
{
    cout << "Object is being created, length = " << len << endl;
}

上の構文は、次の構文と同じです.
Line::Line( double len)
{
    cout << "Object is being created, length = " << len << endl;
    length = len;
}

複数のフィールドX、Y、Zなどを初期化するクラスCがあるとします.同様に、上記の構文を使用して、次のように異なるフィールドでカンマで区切るだけです.
C::C( double a, double b, double c): X(a), Y(b), Z(c)
{
  ....
}

クラスの構造関数
クラスの構造関数は、作成したオブジェクトを削除するたびに実行されるクラスの特殊なメンバー関数です.
構造関数の名前はクラスの名前と全く同じですが、前に波番号(~)を接頭辞として付けただけで、値は返されず、パラメータも持たれません.
構造関数は、ファイルを閉じる、メモリを解放するなど、プログラムから飛び出す前にリソースを解放するのに役立ちます.
次の例は、構造関数の概念をよりよく解析するのに役立ちます.例
#include 
 
using namespace std;
 
class Line
{
   public:
      void setLength( double len );
      double getLength( void );
      Line();   //         
      ~Line();  //         
 
   private:
      double length;
};
 
//       ,      
Line::Line(void)
{
    cout << "Object is being created" << endl;
}
Line::~Line(void)
{
    cout << "Object is being deleted" << endl;
}
 
void Line::setLength( double len )
{
    length = len;
}
 
double Line::getLength( void )
{
    return length;
}
//       
int main( )
{
   Line line;
 
   //     
   line.setLength(6.0); 
   cout << "Length of line : " << line.getLength() <

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
Object is being created
Length of line : 6
Object is being deleted

コードリンク:https://github.com/karst87/cpp/tree/master/learning/com.runoob