C ++コンストラクタ


コンストラクター

C ++のコンストラクターは、クラスのオブジェクトが作成されるときに自動的に呼び出される特別なメソッドです。

コンストラクターを作成するには、クラスと同じ名前に続けて括弧を使用します()

class MyClass {     // The class
  public:           // Access specifier
    MyClass() {     // Constructor
      cout << "Hello World!";
    }
};

int main() {
  MyClass myObj;    // Create an object of MyClass (this will call the constructor)
  return 0;
}

注:コンストラクターはクラスと同じ名前であり、常にpublicであり、戻り値はありません。


コンストラクターパラメーター

コンストラクターは、(通常の関数と同様に)パラメーターを受け取ることもできます。これは、属性の初期値を設定するのに役立ちます。

次のクラスにはbrand、、属性、modelおよびyear異なるパラメーターを持つコンストラクターがあります。コンストラクター内で、コンストラクターパラメーター(brand=xなど)と等しい属性を設定します。(クラスのオブジェクトを作成することによって)コンストラクターを呼び出すとき、コンストラクターにパラメーターを渡します。これにより、対応する属性の値が同じに設定されます。

class Car {        // The class
  public:          // Access specifier
    string brand;  // Attribute
    string model;  // Attribute
    int year;      // Attribute
    Car(string x, string y, int z) { // Constructor with parameters
      brand = x;
      model = y;
      year = z;
    }
};

int main() {
  // Create Car objects and call the constructor with different values
  Car carObj1("BMW", "X5", 1999);
  Car carObj2("Ford", "Mustang", 1969);

  // Print values
  cout << carObj1.brand << " " << carObj1.model << " " << carObj1.year << "\n";
  cout << carObj2.brand << " " << carObj2.model << " " << carObj2.year << "\n";
  return 0;
}

関数と同様に、コンストラクターもクラスの外部で定義できます。まず、クラス内でコンストラクターを宣言し、次にクラスの名前、スコープ解決:: 演算子、コンストラクターの名前(クラスと同じ)を指定して、クラス外でコンストラクターを定義します。

class Car {        // The class
  public:          // Access specifier
    string brand;  // Attribute
    string model;  // Attribute
    int year;      // Attribute
    Car(string x, string y, int z); // Constructor declaration
};

// Constructor definition outside the class
Car::Car(string x, string y, int z) {
  brand = x;
  model = y;
  year = z;
}

int main() {
  // Create Car objects and call the constructor with different values
  Car carObj1("BMW", "X5", 1999);
  Car carObj2("Ford", "Mustang", 1969);

  // Print values
  cout << carObj1.brand << " " << carObj1.model << " " << carObj1.year << "\n";
  cout << carObj2.brand << " " << carObj2.model << " " << carObj2.year << "\n";
  return 0;
}