Costruttori C++


Costruttori

Un costruttore in C++ è un metodo speciale che viene chiamato automaticamente quando viene creato un oggetto di una classe.

Per creare un costruttore, usa lo stesso nome della classe, seguito da parentesi ():

Esempio

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;
}

Nota: il costruttore ha lo stesso nome della classe, è sempre publice non ha alcun valore restituito.


Parametri del costruttore

I costruttori possono anche prendere parametri (proprio come le normali funzioni), che possono essere utili per impostare i valori iniziali per gli attributi.

La classe seguente ha brand, modele yearattributi e un costruttore con parametri diversi. All'interno del costruttore impostiamo gli attributi uguali ai parametri del costruttore ( brand=x, etc). Quando chiamiamo il costruttore (creando un oggetto della classe), passiamo parametri al costruttore, che imposterà il valore degli attributi corrispondenti allo stesso:

Esempio

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;
}

Proprio come le funzioni, i costruttori possono essere definiti anche al di fuori della classe. Innanzitutto, dichiara il costruttore all'interno della classe, quindi definiscilo all'esterno della classe specificando il nome della classe, seguito dall'operatore di risoluzione dell'ambito :: , seguito dal nome del costruttore (che è lo stesso della classe):

Esempio

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;
}