C++/Konstruktor i destruktor: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
→‎Konstruktor: kompilator generuje pusty konstruktor
dodałem o instrukcjach inicjujących
Linia 68:
otrzymawszy w ten sposób kalendarz na styczeń.
 
 
W przypadku dziedziczenia zawsze najpierw jest wykonywany konstruktor nadklasy. Jeżeli nie podamy jawnie, który konstruktor nadklasy ma się wykonać, zostanie wykonany konstruktor bezparametrowy (jeżeli taki nie istnieje kompilator zwróci informacje o błędzie). Możemy jawnie wywołać inny konstruktor np. w taki sposób:
Najczęstszą funkcją konstruktora jest inicjalizacja obiektu oraz alokacja pamięci dla dodatkowych zmiennych (w tym celu lepiej jest użyć instrukcji inicjujących, które poznasz już za chwilę).
 
=== Instrukcje inicjujące ===
''' Instrukcje inicjujące ''' to instrukcje konstruktora spełniające specyficzne zadanie. Mianowice mogą one zostać wywołane przez kompilator zaraz po utworzeniu klasy. Służą do inicjowania pól klasy, w tym stałych i referencji.
 
Jeżeli chcemy zaimplementować '''instrukcje inicjujące''' musimy po deklaracji konstruktora umieścić dwukropek i podać w nich nazwy pól, które chcemy zainicjować, a potem wartości ich ujęte w nawiasy okrągłe. Mogą one wyglądać np. tak:
<source lang="cpp">
Rok()
class Miesiac
: miesiace=(new Miesiac[12];)
{
, liczbaDni(7)
public:
/*
int numer;
zamiast średników stosuje się przecinki
int rok;
przy ostatniej instrukcji przecinka nie stosuje się
Miesiac(int numer,int rok)
*/
{
{}
this->numer=numer;
this->rok=rok;
}
};
class Grudzien : public Miesiac
{
public:
Grudzien(int rok) : Miesiac(12, rok) //tutaj wywołujemy konstruktor klasy pierwotnej
{}
};
</source>
Najczęstszą funkcją konstruktora jest inicjalizacja obiektu oraz alokacja pamięci dla dodatkowych zmiennych.
 
=== Konstruktor kopiujący ===
Linia 115 ⟶ 110:
};
</source>
{{Porada|1=Jeżeli dokonujemy w konstruktorze (np. w instrukcjach inicjujących) alokacji pamięci, np:
<source lang="cpp">
class Rok
Linia 123 ⟶ 118:
public:
Rok()
: miesiace(new Miesiac[12]) {}
miesiace=new Miesiac[12];
}
};
</source>
Linia 136 ⟶ 129:
Miesiac *miesiace;
public:
Rok() : miesiace(new Miesiac[12]) {}
{
miesiace=new Miesiac[12];
}
Rok(const Rok &rok)
{