20.2 Konstruktory i destruktory klas pochodnych
Dalej: 20.3 Operator przypisania dla
W górę: 20. Dziedziczenie i polimorfizm
Wstecz: 20.1 Podstawy dziedziczenia
20.2 Konstruktory i destruktory klas pochodnych
Jak wspomnieliśmy, konstruktory nie są dziedziczone. Jeśli
w klasie pochodnej nie zdefiniowaliśmy konstruktora, to zostanie
użyty konstruktor domyślny. Aby jednak powstał obiekt klasy
pochodnej, musi być najpierw utworzony podobiekt klasy
nadrzędnej wchodzący w jego skład. On również zostanie utworzony
za pomocą konstruktora domyślnego, który zatem musi istnieć!
Podobiekt klasy bazowej jest tworzony jeszcze przed
wykonaniem konstruktora klasy pochodnej.
Co w takim razie zrobić, aby do konstrukcji podobiektu klasy bazowej
zawartego w tworzonym właśnie obiekcie klasy pochodnej
użyć konstruktora innego niż domyślny?
Wówczas musimy w klasie pochodnej zdefiniować konstruktor,
a wywołanie właściwego konstruktora dla podobiektu klasy bazowej
musi nastąpić poprzez listę inicjalizacyjną
- wewnątrz konstruktora byłoby już
za późno
(patrz
rozdział o konstruktorach ).
Na liście tej umieszczamy jawne wywołanie konstruktora dla podobiektu.
Tak więc, jeśli klasą bazową jest klasa
A i chcemy wywołać
jej konstruktor, aby „zagospodarował'' podobiekt tej klasy
dziedziczony w klasie
B, to na liście inicjalizacyjnej
konstruktora klasy pochodnej
B umieszczamy wywołanie
A(...), gdzie w miejsce kropek wstawiamy oczywiście argumenty
dla wywoływanego konstruktora. Wywołuje się tylko konstruktory
bezpośredniej klasy bazowej („ojca'', ale nie „dziadka'';
oczywiście konstruktor ojca poprzez swoją listę inicjalizacyjną
może wywołać konstruktor swojego ojca...).
Na przykład w poniższym fragmencie definiujemy klasę bazową
Point. Nie ma ona w ogóle konstruktora domyślnego.
Wyszukiwarka
Podobne podstrony:
node12node127node126node121node126node129node126 EAT2FBA72AHUMICANGCYU4DWVTTCBUBOOFOV5DInode128node124node127node126node124node12 5RJIDD32YMXJNTH7EYXB4KIBTOGGXXKPFHRU6VAnode120node128więcej podobnych podstron