P-Programowanie
Tekst
zmniejsz/powiększ
Kolory
jasne/ciemne/kontrast/brak

Lista inicjalizacyjna

W niniejszym artykule omówię listę inicjalizacyjną w języku C++. Jest ona bardzo często używana podczas bardziej rozbudowanych projektów programistycznych. Zastosowanie listy inicjalizacyjnej jest niezbędne podczas używania zaawansowanych mechanizmów programowania obiektowego.

Czym jest lista inicjalizacyjna

Lista inicjalizacyjna jest rozszerzeniem możliwości zwykłego konstruktora. Jej zadaniem jest inicjalizacja składowych nowego obiektu. Ważnym jest fakt, że wykonuje się ona jeszcze zanim obiekt zacznie istnieć.

Na pierwszy rzut oka ciężko znaleźć różnicę pomiędzy konstruktorem a listą inicjalizacyjną. Obydwa mechanizmy są ze sobą bardzo ściśle związane. Sama lista stanowi poszerzenie możliwości konstruktora, a więc nie można zdefiniować listy inicjalizacyjnej nie definiując konstruktora w danej klasie.

Cechą konstruktorów jest to, że wykonują się one w momencie kiedy obiekt klasy już istnieje. Co za tym idzie, konstruktory mogą modyfikować wartości składowych klas jednak w niektórych przypadkach staje się to niemożliwe. Jeżeli składową klasy jest zmienna const wtedy nie będziemy mieli możliwości nadania jej wartości poprzez konstruktor.

Lista inicjalizacyjna  znajduje się w definicji konstruktora i poprzedzona jest dwukropkiem. Argumenty w liście inicjalizacyjnej przypisywane są składowym klasy w specyficzny sposób, przeanalizuj poniższy obrazek:

lista inicjalizacyjna C++

Wartość zmiennej WIEK, która jest argumentem konstruktora przypisywana jest zmiennej wiek, która jest składnikiem klasy. Po przecinku można wypisać kolejne inicjalizowane składowe.

Zwróć uwagę, że w przypadku użycia listy inicjalizacyjnej ciało konstruktora jest puste. Można oczywiście umieścić w nim jakiejś instrukcje. Niektóre składowe mogą być inicjalizowane poprzez konstruktor a inne poprzez listę inicjalizacyjną.

Składowe stałe const

Tak jak było napisane w poprzednim akapicie, w konstruktorze nie można przypisać zmiennej cons żadnej wartości, ponieważ podczas wywołania konstruktora obiekt już istnieje. Poniższy przykład nie skompiluje się:

Zamierzony efekt można osiągnąć używając listy inicjalizacyjnej. Składowe wiek oraz wzrost musimy zainicjalizować na liście, jednak wartość składowej imie można przypisać w konstruktorze:

Jeżeli jest taka możliwość, powinno się jednak wszystkie możliwe składowe inicjalizować za pomocą listy inicjalizacyjnej, ponieważ jest to rozwiązanie szybsze i wydajniejsze od użycia konstruktorów.

Wywołanie konstruktorów obiektów składowych

Lista inicjalizacyjna jest jedyną metodą na wywołanie konstruktorów obiektów składowych. Jest to przypadek kiedy nie używamy żadnego dziedziczenia, jedynie jedna klasa jest elementem innej klasy.

W momencie kompilacji programu, kompilator szuka konstruktora domyślnego dla klasy Silnik ponieważ jest ona składnikiem klasy Samochod. Ponieważ klasa Silnik nie posiada konstruktora domyślnego kompilacja programu się nie uda.

Nie można zainicjalizować wartości klasy Silnik w konstruktorze klasy Samochod, ponieważ w momencie wywołania konstruktora klasy Samochod składowa Silnik silnik; już istnieje. Trzeba wykorzystać listę inicjalizacyjną i w niej wywołać konstruktor wieloargumentowy.

Lista inicjalizacyjna a tablice

Nie ma możliwości inicjalizacji tablicy za pomocą listy inicjalizacyjnej.

Udostępnij ten artykuł na fejsie lub zostaw komentarz!

Komentarze:

Użytkownik as napisał/a:

09 kwietnia 2014


Fajna strona kolego!

Użytkownik ce napisał/a:

26 kwietnia 2015


Jedyny plus dla c++ to jego szybkość. Skladnia jest chyba za karę w porównaniu do pythona.

Użytkownik de napisał/a:

07 sierpnia 2015


Rok 2015: porównywanie C++ do pythona…

Użytkownik mags napisał/a:

09 grudnia 2015


Dzieki, swietnie wyjaśnione.

Zachęcam Cię do zostawienia komentarza!

Ilość znaków: 0

Zachęcam Cię do polubienia bloga na facebooku! Dając lajka wspierasz moją pracę - wszystkie artykuły na blogu są za darmo!