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