Poznaj C++ w$ godziny0197

Poznaj C++ w$ godziny0197



188 Godzina 13

Wartości domyślne czy przeciążanie funkcji

Programy 13.1 i 13.2 robiły to samo. Jednak program 13.1, napisany z wykorzystaniem przeciążenia funkcji, jest prostszy i bardziej intuicyjny. Dodatkowym argumentem, przemawiającym za rozwiązaniem prezentowanym w programil3.1, jest łatwość rozbudowy. Jeśli programista chciałby dodać trzeci wariant funkcji, to nie ma problemu — wystarczy dopisać kolejną realizację. Program 13.2 nie posiada tej zalety, wartość domyślna stanie się bezużyteczne w przypadku nowych wariantów.

Jak zatem zdecydować czy wykorzystać przeciążanie funkcji czy wartości domyślne. Oto kilka głównych reguł:

Decyduj się na przeciążanie funkcji jeśli:

□    Nie ma żadnej sensownej wartości domyślnej.

□    Wykorzystujesz różne algorytmy w zależności od liczby parametrów.

□    Musisz obsługiwać różne typy w liście parametrów.

Konstruktor domyślny

Jak już mówiliśmy w rozdziale 6, „Proste klasy”, jeśli nie zadeklaruje się jawnie konstruktora klasy to przy każdym tworzeniu obiektu klasy wywoływany jest konstruktor domyślny, nie pobierający argumentów i nie wykonujący żadnych operacji. Możesz stworzyć własny konstruktor domyślny, czyli ten nie pobierający żadnych argumentów i wykorzystać go do inicjalizowania obiektów.

Konstruktor dostarczany przez kompilator nazywany jest domyślnym ale konwencja mówi, że każdy konstruktor nie pobierający argumentów jest domyślny. Pojawia się tutaj pewne zagmatwanie, ale zazwyczaj z kontekstu wynika, o który konstruktor chodzi.

Pamiętaj, że jeśli stworzysz jakikolwiek konstruktor, to kompilator nie stworzy już konstruktora domyślnego. Zatem jeśli chcesz mieć konstruktor nie pobierający argumentów i stworzyłeś już inne konstruktory, to musisz go napisać samodzielnie!

Przeciążanie konstruktorów

Konstruktor służy do inicjalizowania obiektu. Np. konstruktor klasy Prostokąt tworzy w pamięci pojedynczy prostokąt. Przed wywołaniem konstruktora w pamięci istniał tylko zarezerwowany obszar. Po wykonaniu konstruktora obszar ten stał się gotowym do użycia obiektem.

Konstruktory, podobnie jak wszystkie inne metody klasy, mogą być przeciążane. Możliwość przeciążania konstruktorów daje programiście wiele możliwości.

Np. możesz stworzyć klasę Prostokąt posiadającą dwa konstruktory: pierwsze, pobierający dwa parametry określające wymiary, drugi, bez parametrów, tworzący prostokąt o wymiarach domyślnych. Kompilator wybierze konstruktor na podstawie typu i liczby parametrów, tak jak w przypadku zwykłych funkcji.

W przeciwieństwie do konstruktorów, destruktorów przeciążać nie można. Każdy destruktor, z definicji, tworzony jest tak samo: nazwa klasy poprzedzona znakiem tyldy (~). Destruktor nie pobiera żadnych parametrów.

Wartości domyślne czy przeciążanie funkcji

Programy 13.1 i 13.2 robiły to samo. Jednak program 13.1, napisany z wykorzystaniem przeciążenia funkcji, jest prostszy i bardziej intuicyjny. Dodatkowym argumentem, przemawiającym za rozwiązaniem prezentowanym w programil3.1, jest łatwość rozbudowy. Jeśli programista chciałby dodać trzeci wariant funkcji, to nie ma problemu - wystarczy dopisać kolejną realizację. Program 13.2 nie posiada tej zalety, wartość domyślna stanie się bezużyteczne w przypadku nowych wariantów.

Jak zatem zdecydować czy wykorzystać przeciążanie funkcji czy wartości domyślne. Oto kilka głównych reguł:

Decyduj się na przeciążanie funkcji jeśli:

□    Nie ma żadnej sensownej wartości domyślnej.

□    Wykorzystujesz różne algorytmy w zależności od liczby parametrów.

□    Musisz obsługiwać różne typy w liście parametrów.

Konstruktor domyślny

Jak już mówiliśmy w rozdziale 6, „Proste klasy”, jeśli nie zadeklaruje się jawnie konstruktora klasy to przy każdym tworzeniu obiektu klasy wywoływany jest konstruktor domyślny, nie pobierający argumentów i nie wykonujący żadnych operacji. Możesz stworzyć własny konstruktor domyślny, czyli ten nie pobierający żadnych argumentów i wykorzystać go do inicjalizowania obiektów.

Konstruktor dostarczany przez kompilator nazywany jest domyślnym ale konwencja mówi, że każdy konstruktor nie pobierający argumentów jest domyślny. Pojawia się tutaj pewne zagmatwanie, ale zazwyczaj z kontekstu wynika, o który konstruktor chodzi.

Pamiętaj, że jeśli stworzysz jakikolwiek konstruktor, to kompilator nie stworzy już konstruktora domyślnego. Zatem jeśli chcesz mieć konstruktor nie pobierający argumentów i stworzyłeś już inne konstruktory, to musisz go napisać samodzielnie!

Przeciążanie konstruktorów

Konstruktor służy do inicjalizowania obiektu. Np. konstruktor klasy Prostokąt tworzy w pamięci pojedynczy prostokąt. Przed wywołaniem konstruktora w pamięci istniał tylko zarezerwowany obszar. Po wykonaniu konstruktora obszar ten stal się gotowym do użycia obiektem.

Konstruktory. podobnie jak wszystkie inne metody klasy, mogą być przeciążane. Możliwość przeciążania konstruktorów daje programiście wiele możliwości.

Np. możesz stworzyć klasę Prostokąt posiadającą dwa konstruktory: pierwsze, pobierający dwa parametry określające wymiary, drugi, bez parametrów, tworzący prostokąt o wymiarach domyślnych. Kompilator wybierze konstruktor na podstawie typu i liczby parametrów, tak jak w przypadku zwykłych funkcji.

W przeciwieństwie do konstruktorów, destruktorów przeciążać nie można. Każdy destruktor, z definicji, tworzony jest tak samo: nazwa klasy poprzedzona znakiem tyldy (~). Destruktor nie pobiera żadnych parametrów.


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0018 Część IWstęp do C++ VGodzina 1    Zaczynamy 2   &
Poznaj C++ w$ godziny0062 Instrukcje i wyrażenia 47Instrukcja if Normalnie program wykonuje się lini
Poznaj C++ w$ godziny0160 Zaawansowane wykorzystanie wskaźników 149Do czego służy wskaźnik this Gdyb
Poznaj C++ w$ godziny0180 169Zaawansowane referencje i wskaźniki 39:    FunkcjaDruga(
Poznaj C++ w$ godziny0203 194 Godzina 13Pytania i odpowiedzi P: Dlaczego wymyślono wartości domyślne
Poznaj C++ w$ godziny0011 X Poznaj C++ w 24 godziny Ograniczenia przy przeciążaniu operatorów
Poznaj C++ w$ godziny0030 14 Godzina 1 P: Czy można ignorować ostrzeżenia kompilatora (wamings) O: W
Poznaj C++ w$ godziny0061 46 Godzina 4Operatory relacji Operatory relacji są używane do określenia,
Poznaj C++ w$ godziny0083 Funkcje 69Parametry domyślne Do każdego zadeklarowanego w prototypie i def
Poznaj C++ w$ godziny0193 184 Godzina 13 Listing 13.1. Przeciążanie wewnętrznych funkcji
Poznaj C++ w$ godziny0204 Przeciążanie operatorów W poprzednim rozdziale nauczyłeś się przeciążać me
Poznaj C++ w$ godziny0206 197Przeciążanie operatorów Listing 14.2. Przeciążenie operatora
Poznaj C++ w$ godziny0208 Przeciążanie operatorów 199Listing 14.3. Operator przedrostkowy i
Poznaj C++ w$ godziny0210 Przeciążanie operatorów 201 Przeciążanie operatorów
Poznaj C++ w$ godziny0212 Przeciążanie operatorów 203 ITrzy = 1Jeden + lDwa; niż ITrzy - 1Jeden.Doda
Poznaj C++ w$ godziny0214 Przeciążanie
Poznaj C++ w$ godziny0216 Przeciążanie operatorów 207 EFEKT DZIAŁANIA: Compile error! Unable to conv
Poznaj C++ w$ godziny0217 208 Godzina 14 licz: 5 ANALIZA: W linii 11 zaszła ważna zmiana. Przeciążyl
Poznaj C++ w$ godziny0218 Przeciążanie operatorów 209 23:    {} 24: 25:

więcej podobnych podstron