Konstruktory w C++

1. Konstruktor domyślny
Konstruktor domyślny to konstruktor, który może być wywołany bez podawania żadnych argumentów. Jeżeli nie zostanie zdefiniowany żaden konstruktor, kompilator dostarczy konstruktor domyślny, który nie inicjalizuje obiektów w żaden specyficzny sposób. Możemy jednak zdefiniować własny konstruktor domyślny, aby ustawić domyślne wartości dla obiektów:
class MyClass {
public:
    int a;
    double b;
    // Konstruktor domyślny przypisujący wartości początkowe
    MyClass() : a(0), b(0.0) {}
};
2. Konstruktor z parametrami
Konstruktor z parametrami pozwala na inicjalizację obiektów z wartościami przekazanymi podczas tworzenia obiektu. Umożliwia to ustawienie początkowych wartości atrybutów obiektu na podstawie zewnętrznych danych:
class MyClass {
public:
    int a;
    double b;
    // Konstruktor z parametrami przypisujący wartości przekazane do a i b
    MyClass(int x, double y) : a(x), b(y) {}
};
3. Przeciążanie konstruktorów
C++ umożliwia definicję wielu konstruktorów w jednej klasie, z różną liczbą lub typami argumentów. Pozwala to na tworzenie obiektów w różnych kontekstach z różnymi wartościami początkowymi:
class MyClass {
public:
    int a;
    double b;
    // Konstruktor domyślny
    MyClass() : a(0), b(0.0) {}
    // Konstruktor z jednym parametrem
    MyClass(int x) : a(x), b(0.0) {}
    // Konstruktor z dwoma parametrami
    MyClass(int x, double y) : a(x), b(y) {}
};
4. Konstruktor kopiujący
Konstruktor kopiujący umożliwia stworzenie nowego obiektu jako kopii istniejącego obiektu. Jest wywoływany, kiedy nowy obiekt jest inicjalizowany wartością innego obiektu tej samej klasy:
class MyClass {
public:
    int a;
    double b;
    // Konstruktor kopiujący
    MyClass(const MyClass &other) : a(other.a), b(other.b) {}
};
5. Delegowanie konstruktora
Delegowanie konstruktora pozwala na wywołanie jednego konstruktora przez inny w tej samej klasie. Jest to przydatne, gdy kilka konstruktorów ma wspólne elementy inicjalizacyjne.
class MyClass {
public:
    int a;
    double b;
    // Główny konstruktor z parametrami
    MyClass(int x, double y) : a(x), b(y) {}
    // Delegowanie konstruktora
    MyClass() : MyClass(0, 0.0) {}
    MyClass(int x) : MyClass(x, 0.0) {}
};