332 Dodatek A
utworzeniem jakiegokolwiek obiektu klasy C! W tym celu piszemy po prostu
C::x~jakaś wartość.
Zbliżone ideowo jest pojęcie metody statycznej: może być ona wywołana jeszcze przed utworzeniem jakiegokolwiek obiektu. Oczywistym ograniczeniem metod statycznych jest brak dostępu do pól niestatycznych dcmej klasy, ponadto wskaźnik this nie ma żadnego sensu. W przypadku metody statycznej, jeśli chcemy jej umożliwić dostęp do pól niestatycznych pewnego obiektu, trzeba go jej przekazać jako... parametr!
Metoda danej klasy może zostać przez programistę określona mianem stałej (np. void fun() const;). Nazwa ta jest dość nieszczęśliwie wybrana, chodzi w istocie o metodę, która deklaruje się, że nigdy nie zmodyfikuje pól obiektu, na rzecz którego została zaktywowana.
Załóżmy, że dysponujemy starannie opracowanymi klasami A i D. Dostaliśmy jc w postaci skompilowanych bibliotek, tzn. oprócz kodu wykonywalnego mamy tylko do dyspozycji szczegółowo skomentowane pliki nagłówkowe, które informują nas o sposobach użycia metod i o dostępnych atrybutach.
Niestety, twórca klas A i B dokonał kilku wyborów, które nas niespecjalnie satysfakcjonują, i zaczęło nam się wydawać, że my zrobilibyśmy to nieco lepiej...
Czy musimy wobec tego napisać własne klasy A i B, a dostępne biblioteki wyrzucić na śmietnik? Powinno być oczywiste dla każdego, że nie zadawałbym tego pytania, gdyby odpowiedź nic brzmiała: NIE. Język C++ pozwala na bardzo łatwą „reutylizację" kodu już napisanego (a nawet skompilowanego), przy jednoczesnym umożliwieniu wprowadzenia „niezbędnych” zmian. Weźmy dla przykładu deklaracje dwóch klas A i B, zamieszczone na listingu poniżej:
dziedzic.li
class Cl
t
protected: int x; public:
Cl(int n) //konstruktor {
x = n;
}
void pisz () t
cout<<"**Stara wersia