Poznaj C++ w$ godziny0115

Poznaj C++ w$ godziny0115



102 Godzina 7

Linia 33 w listingu 7.4. rozpoczyna główny blok programu. Aż do linii 35 nie została wykonana żadna operacja na pamięci. Poinformowaliśmy jedynie kompilator, jak ma tworzyć obiekt typu Punkt i Prostokąt.

W linii 36 definiujemy obiekt klasy Prostokąt i przekazujemy wartości jego współrzędnych.

W linii 38 tworzymy zmienną lokalną Pole. Zmienna ta będzie przechowywać obliczoną wartość pola stworzonego prostokąta. Zmienna Pole jest inicjalizowana wartością zwróconą przez funkcję PobierzPole (), należącą do klasy Prostokąt.

Każdy klient klasy Prostokąt może stworzyć dowolny obiekt tej klasy i odczytać pole figury bez zagłębiania się w detale implementacji.

Aby dowiedzieć się jak wykorzystywać klasę Prostokąt wystarczy spojrzeć na jej plik nagłówkowy. Wiemy, że funkcja PobierzPole () zwraca wartość typu int, a jak ona to robi, to już nas zupełnie nie obchodzi. Autor klasy Prostokąt może dowolnie modyfikować funkcję PobierzPole (), nie będzie to miało wpływu na działanie programów wykorzystujących klasę.

Podsumowanie

W ciągu ostatniej godziny poznałeś tajniki tworzenia klas.

Nauczyłeś się tworzyć funkcje wewnętrzne nie zmieniające zawartości klasy (const). Wiesz na czym polega różnica pomiędzy interfejsem klasy a implementacją jej metod.

Dobrym zwyczajem programistycznym jest separowanie interfejsu (deklaracji) klasy w pliku nagłówkowym. Pliki takie zazwyczaj mają rozszerzenie .HPP. Implementację metod umieszcza się w plikach z rozszerzeniem .CPP.

Pytania i odpowiedzi

P: Jeśli użycie const powoduje błędy kompilacji, to dlaczego nie mogę pominąć słowa const i uważać, aby nie popełnić błędu?

O: Jeśli logicznym jest, że funkcja wewnętrzna nie powinna zmieniać zawartości klasy to użycie const pozwala wykryć w fazie kompilacji wszystkie błędy polegające na nieuwadze programisty. Np. funkcja PobierzWiek () nie powinna zmienić żadnej danej w klasie Kot, ale jeśli pomylisz się i napiszesz (jest to bardzo częsta pomyłka):

if (jegoWiek = 100) cout « "Hej! Masz juz 100 lat!\n";

to dzięki zadeklarowaniu funkcji PobierzWiek () jako const kompilator poinformuje Cię, że popełniłeś błąd. Chciałeś zapewne sprawdzić, czy zmienna jegoWiek jest równa 100 ale przez pomyłkę przypisujesz 100 do tej zmiennej. Ponieważ ewidentnie jest to zmiana zawartości klasy, a zadeklarowałeś, że funkcja ma nic nie zmieniać w klasie to otrzymasz komunikat błędu. Będziesz mógł poprawić go już w fazie kompilacji.

Linia 33 w listingu 7.4. rozpoczyna główny blok programu. Aż do linii 35 nie została wykonana żadna operacja na pamięci. Poinformowaliśmy jedynie kompilator, jak ma tworzyć obiekt typu Punkt i Prostokąt.

W linii 36 definiujemy obiekt klasy Prostokąt i przekazujemy wartości jego współrzędnych.

W linii 38 tworzymy zmienną lokalną Pole. Zmienna ta będzie przechowywać obliczoną wartość pola stworzonego prostokąta. Zmienna Pole jest inicjalizowana wartością zwróconą przez funkcję PobierzPole (), należącą do klasy Prostokąt.

Każdy klient klasy Prostokąt może stworzyć dowolny obiekt tej klasy i odczytać pole figury bez zagłębiania się w detale implementacji.

Aby dowiedzieć się jak wykorzystywać klasę Prostokąt wystarczy spojrzeć na jej plik nagłówkowy. Wiemy, że funkcja PobierzPole () zwraca wartość typu int, a jak ona to robi, to już nas zupełnie nie obchodzi. Autor klasy Prostokąt może dowolnie modyfikować funkcję PobierzPole (), nie będzie to miało wpływu na działanie programów wykorzystujących klasę.

Podsumowanie

W ciągu ostatniej godziny poznałeś tajniki tworzenia klas.

Nauczyłeś się tworzyć funkcje wewnętrzne nie zmieniające zawartości klasy (const). Wiesz na czym polega różnica pomiędzy interfejsem klasy a implementacją jej metod.

Dobrym zwyczajem programistycznym jest separowanie interfejsu (deklaracji) klasy w pliku nagłówkowym. Pliki takie zazwyczaj mają rozszerzenie .HPP. Implementację metod umieszcza się w plikach z rozszerzeniem .CPP.

Pytania i odpowiedzi

P: Jeśli użycie const powoduje błędy kompilacji, to dlaczego nie mogę pominąć słowa const i uważać, aby nie popełnić błędu?

O: Jeśli logicznym jest, że funkcja wewnętrzna nie powinna zmieniać zawartości klasy to użycie const pozwala wykryć w fazie kompilacji wszystkie błędy polegające na nieuwadze programisty. Np. funkcja PobierzWiek () nie powinna zmienić żadnej danej w klasie Kot, ale jeśli pomylisz się i napiszesz (jest to bardzo częsta pomyłka):

if (jegoWiek = 100) cout « "Hej! Masz juz 100 lat!\n";

to dzięki zadeklarowaniu funkcji PobierzWiek () jako const kompilator poinformuje Cię, że popełniłeś błąd. Chciałeś zapewne sprawdzić, czy zmienna jegoWiek jest równa 100 ale przez pomyłkę przypisujesz 100 do tej zmiennej. Ponieważ ewidentnie jest to zmiana zawartości klasy, a zadeklarowałeś, że funkcja ma nic nie zmieniać w klasie to otrzymasz komunikat błędu, Będziesz mógł poprawić go już w fazie kompilacji.


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0104 90Godzina 6 33:    > 34: 35:    // defini
Poznaj C++ w$ godziny0195 186Godzina 13 Listing 13.2. Wykorzystanie wartości
Poznaj C++ w$ godziny0205 196Godzina 14 Listing 14.1. Klasa Licznik 1:    // Listing
Poznaj C++ w$ godziny0206 197Przeciążanie operatorów Listing 14.2. Przeciążenie operatora
Poznaj C++ w$ godziny0232 Tablice 223Usuwanie tablicy ze sterty Rodzina jest wskaźnikiem do tablicy
Poznaj C++ w$ godziny0108 Więcej o klasach 95 Więcej o klasach 95Dlaczego wykorzystywać kompilator d
Poznaj C++ w$ godziny0146 Wskaźniki 135 Wskaźniki 135 ANALIZA: W tym programie deklarujemy dwie zmie
Poznaj C++ w$ godziny0215 206Godzina 14 W liniach 34-37 kasowane i odtwarzane są wewnętrzne zmienne
Poznaj C++ w$ godziny0101 Proste klasy 87 Linia 12 rozpoczyna sekcję prywatną, która w tym wypadku s
Poznaj C++ w$ godziny0121 Zaawansowane sterowanie programem 109 W liniach 12-15 wprowadzamy wartości
Poznaj C++ w$ godziny0033 Program w C++ 17 Sednem naszego programu jest linia 5. Obiekt cout użyty z
Poznaj C++ w$ godziny0049 Zmienne i stałe 33 Zmienne całkowite ze znakiem „zawijają się” od najwięks
Poznaj C++ w$ godziny0058 Instrukcje i wyrażenia 43Listing 4.2. Obliczanie wartości wyrażenia // Lis
Poznaj C++ w$ godziny0062 Instrukcje i wyrażenia 47Instrukcja if Normalnie program wykonuje się lini
Poznaj C++ w$ godziny0080 66 Godzina 5Listing 5.3. Przekazywanie przez wartość 1:    
Poznaj C++ w$ godziny0105 Proste klasy 91 Linia 58 zawiera definicję obiektu Frisky (będącego klasy
Poznaj C++ w$ godziny0114 Więcej o klasach 101 32 33 34:    < 35 36 37 38 39 40 41
Poznaj C++ w$ godziny0124 112 Godzina 8 112 Godzina 8 ANALIZA: W linii 10 rozpoczynana jest pętla wh
Poznaj C++ w$ godziny0125 Zaawansowane sterowanie programem Listing 8.6. Pomijanie pętli while 1:

więcej podobnych podstron