Proste klasy 89
W tym miejscu należy zwrócić uwagę na dwie ważne rzeczy:
□ Konstruktor domyślny to dowolny konstruktor nie pobierający parametrów. Nie ma znaczenia czy zadeklarujesz go sam, czy zrobi to za Ciebie kompilator.
□ Jeśli zadeklarujesz jakikolwiek konstruktor (nie ważne czy pobiera on parametry, czy nie) to kompilator nie stworzy konstruktora domyślnego. W tym wypadku, jeśli chcesz mieć konstruktor domyślny, musisz go sam zadeklarować.
Jeśli nie zadeklarujesz destruktora, to podobnie jak w przypadku konstruktora, kompilator stworzy domyślny destruktor, nie wykonujący żadnych czynności:
-Kot: :Kot()
i
)
Pamiętaj, jeśli zadeklarujesz konstruktor to zadeklaruj również destruktor (nawet jeśli jest on pusty). Nie zabiera to wiele czasu, a czyni program bardziej eleganckim i czytelniejszym.
Listing 6.2. to modyfikacja listingu 6.1. wzbogacona o konstruktor inicjalizujący obiekt klasy Kot, ustawiający wiek kota (jeśli został podany). Demonstruje on również, kiedy wywoływany jest destruktor.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10
11
12
13
14
15
16
17
18
19
20 21 22
23
24
25
26
27
28
29
30
31
32
// Demonstracja deklaracji konstruktora // i destruktora klasy Kot
#include <iostream.h>
// niezbedne dla cout
class Kot {
// początek deklaracji klasy
public:
Kot(int wiek);
~Kot() ; int PobierzWiekO; //
void UstawWiek(int wiek); void Miaucz(); private:
int jegoWiek; //
// początek sekcji publicznej // konstruktor // destruktor
funkcja dostępu
// funkcja dostępu // funkcja ogolna // początek sekcji prywatnej zmienna wewnętrzna
// konstruktor klasy Kot Kot::Kot(int wiek)
{
jegoWiek = wiek;
}
Kot: :-Kot() {
)
II destruktor - nic nie robi
// PobierzWiekO - funkcja dostępu // zwraca wartość zmiennej jegoWiek int Kot::PobierzWiek()
{
W tyra miejscu należy zwrócić uwagę na dwie ważne rzeczy:
□ Konstruktor domyślny to dowolny konstruktor nie pobierający parametrów. Nie ma znaczenia czy zadeklarujesz go sam, czy zrobi to za Ciebie kompilator.
□ Jeśli zadeklarujesz jakikolwiek konstruktor (nie ważne czy pobiera on parametry, czy nie) to kompilator nie stworzy konstruktora domyślnego. W tym wypadku, jeśli chcesz mieć konstruktor domyślny, musisz go sam zadeklarować.
Jeśli nie zadeklarujesz destruktora, to podobnie jak w przypadku konstruktora, kompilator stworzy domyślny destruktor, nie wykonujący żadnych czynności:
-Kot: :Kot()
{
)
Pamiętaj, jeśli zadeklarujesz konstruktor to zadeklaruj również destruktor (nawet jeśli jest on pusty). Nie zabiera to wiele czasu, a czyni program bardziej eleganckim i czytelniejszym.
Listing 6.2. to modyfikacja listingu 6.1. wzbogacona o konstruktor inicjalizujący obiekt klasy Kot, ustawiający wiek kota (jeśli został podany). Demonstruje on również, kiedy wywoływany jest destruktor.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10
11
12
13
14
15
16
17
18
19
20 21 22
23
24
25
26
27
28
29
30
31
32
// Demonstracja deklaracji konstruktora // i destruktora klasy Kot
#include <iostream.h> II niezbedne dla cout
class Kot {
public:
Kot(int wiek); ~Kot() ;
int PobierzWiek(); void UstawWiek(int void Miaucz(); private:
int jegoWiek;
);
// konstruktor klasy Kot Kot::Kot(int wiek)
1
jegoWiek = wiek;
)
II początek deklaracji klasy
// początek sekcji publicznej II konstruktor II destruktor // funkcja dostępu wiek); // funkcja dostępu
II funkcja ogolna // początek sekcji prywatnej // zmienna wewnętrzna
Kot::~Kot() // destruktor - nic nie robi
i
1
// PobierzWiek() - funkcja dostępu // zwraca wartość zmiennej jegoWiek int Kot: : PobierzWiek ()
(
return jegoWiek;