Szablon klas działa na podobnej zasadzie, jak szablon funkcji. Tak więc jeżeli zrozumiałeś na czym polegają szablony funkcji oraz funkcje to praktycznie ten rozdział będzie tylko przypomnieniem. Już wiesz czym są szablony funkcji oraz wiesz jak je tworzyć. Teraz pokażę jakich korzyści dostarczają szablony klas. Definicja szablonu klasy wygląda następująco:

Powyżej zdefiniowaliśmy sobie klasę szablonową o nazwie figura. Definicja rozpoczyna się słówka template. Dalej w nawiasach trójkątnych określone są parametry szablonu. W naszym przypadku jest tylko jeden parametr. Sama klasa zawiera trzy składniki dowolnego typu. Klasa służy do przechowywania informacji o figurach. Nasza klasa nie reprezentuje żadnego konkretnego obiektu. Jest to klasa abstrakcyjna. Aby utworzyć obiekt należy się trochę namachać. Najpierw trzeba napisać nazwę klasy. Później należy określić typ parametru podając go w nawiasach trójkątnych. Dopiero teraz podajemy nazwę obiektu.

Jeżeli taki zapis Cię przeraża to możesz tutaj skorzystać z małego uproszczenia. C++ daje możliwość zastępowania długich i skomplikowanych wyrażeń krótszymi. Służy do tego słówko typedef. Skorzystajmy z niego.

Od tej pory wyrażenie figura jest równoznaczne z wyrażeniem figura_. W naszym przypadku korzystanie ze słówka typedef ma charakter raczej demonstracyjny. Jest ono bardzo przydatne w przypadku długich i złożonych wyrażeń. Dlatego też warto o nim pamiętać. Rozbudujmy trochę naszą klasę figura.

Do naszej klasy dodaliśmy kilka funkcji umożliwiających dostęp do składników nie-publicznych. Zobacz teraz jak są definiowane funkcje składowe szablonu klasy.

Definicja funkcji składowej szablonu klasy trochę przypomina definicję szablonu funkcji. Zaczynamy od słówka template i nawiasów trójkątnych zawierających parametry szablonu. Następnie podajemy rezultat zwracany przez definiowaną funkcję. Dalej jest nazwa klasy wraz z nawiasami trójkątnymi. W nich ponownie umieszczamy wszystkie parametry szablonu. Kolejny jest operator zakresu i wreszcie nazwa funkcji. Zauważ jednak, że po nazwie funkcji podajemy jedynie nazwę parametru! Nie ma tam już słówka class.

Specjalizowana wersja szablonu klas

Tym zagadnieniem już się zajmowaliśmy przy omawianiu szablonów funkcji. Tak się składa, że w przypadku szablonów klas również można tworzyć wersje specjalizowane. Nie będę już wyjaśniał, jakie są z tego korzyści. Pokażę tylko jak to zrealizować.

Tak właśnie wygląda specjalizowana wersja szablonu klas. Jak widzisz tutaj już nie stosujemy słówka template. Jest natomiast nazwa klasy, po której umieszczamy konkretny parametr. U nas jest to wskaźnik do typu int. Oczywiście podajemy go w nawiasach trójkątnych.

Specjalizowana wersja funkcji składowej szablonu klas

Została nam jeszcze specjalizowana funkcja składowa szablonu klas. Takie funkcje działają w analogiczny sposób, jak funkcje specjalizowane szablonu funkcji. Również składniowo jest tak samo. Jednak dla formalności mały przykład:

Tutaj również nie podajemy słówka template. Wystarczy nazwa funkcji wraz z określeniem konkretnych parametrów. To właściwie tyle o szablonach. Sam sposób korzystania z klas szablonowych jest analogiczny, jak w przypadku zwykłych klas. Szablony mają jedynie skrócić czas powstawania programu.

Autor: Kesay

[Artykuł pochodzi ze strony guidecpp.prv.pl, autor wyraził zgodę na publikację]