Wprowadzenie do szablonów klas
Transkrypt
Wprowadzenie do szablonów klas
Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Wprowadzenie do szablonów klas Bogdan Kreczmer [email protected] Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Programowanie obiektowe c Copyright°2008-2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową. Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Niniejsza prezentacja została wykonana przy użyciu systemu składu LATEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer: http://latex-beamer.sourceforge.net Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu 1 Szablony klas – Wprowadzenie Najważniejsze cechy Proste szablony 2 Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Szablony klas Szablony klas pozwalają na przedstawienie ogólnych pojęć i wzajemnych ich związków. Pozwalają na abstrahowanie od typu poszczególnych atrybutów związanych z danym pojęciem. Pozwalają programiście skoncentrować na ogólnych zależnościach i mechanizmach. Szablony pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego. Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Szablony klas Szablony klas pozwalają na przedstawienie ogólnych pojęć i wzajemnych ich związków. Pozwalają na abstrahowanie od typu poszczególnych atrybutów związanych z danym pojęciem. Pozwalają programiście skoncentrować na ogólnych zależnościach i mechanizmach. Szablony pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego. Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Szablony klas Szablony klas pozwalają na przedstawienie ogólnych pojęć i wzajemnych ich związków. Pozwalają na abstrahowanie od typu poszczególnych atrybutów związanych z danym pojęciem. Pozwalają programiście skoncentrować na ogólnych zależnościach i mechanizmach. Szablony pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego. Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Szablony klas Szablony klas pozwalają na przedstawienie ogólnych pojęć i wzajemnych ich związków. Pozwalają na abstrahowanie od typu poszczególnych atrybutów związanych z danym pojęciem. Pozwalają programiście skoncentrować na ogólnych zależnościach i mechanizmach. Szablony pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego. Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Szablony klas Szablony klas pozwalają na przedstawienie ogólnych pojęć i wzajemnych ich związków. Pozwalają na abstrahowanie od typu poszczególnych atrybutów związanych z danym pojęciem. Pozwalają programiście skoncentrować na ogólnych zależnościach i mechanizmach. Szablony pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego. Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Problemy z tłumaczeniem template . & wzorzec szablon Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Problemy z tłumaczeniem template . & wzorzec szablon Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Ogólna postać szablonu template < lista-parametrow-rozdzielonych-przecinkami > class Klasa { ... }; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Ogólna postać szablonu template < lista-parametrow-rozdzielonych-przecinkami > class Klasa { ... }; Dopuszczalne parametry: typ wbudowany lub zdefiniowany przez użytkownika, stała w czasie kompilacji (liczba, wskaźnik, znaki itp.), inny szablon. Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Ogólna postać szablonu template < lista-parametrow-rozdzielonych-przecinkami > class Klasa { ... }; Dopuszczalne parametry: typ wbudowany lub zdefiniowany przez użytkownika, stała w czasie kompilacji (liczba, wskaźnik, znaki itp.), inny szablon. Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Ogólna postać szablonu template < lista-parametrow-rozdzielonych-przecinkami > class Klasa { ... }; Dopuszczalne parametry: typ wbudowany lub zdefiniowany przez użytkownika, stała w czasie kompilacji (liczba, wskaźnik, znaki itp.), inny szablon. Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Ogólna postać szablonu template < lista-parametrow-rozdzielonych-przecinkami > class Klasa { ... }; Dopuszczalne parametry: typ wbudowany lub zdefiniowany przez użytkownika, stała w czasie kompilacji (liczba, wskaźnik, znaki itp.), inny szablon. Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } Słowo kluczowe typename sygnalizuje, że parametr szablonu jest typem. Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < class TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<float> St; } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<double[100]> } St; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<std::string> } St; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<std::istream> } St; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<std::istream> } St; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } }; bool Pobierz(TYP& El) P³ P³ { return ! Ilosc ? false : El ³= PTab[−− Ilosc], true; } bool Poloz(const TYP& El) P³ P³ { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] El, true; } ³= P int main( ) { Stos<std::istream> } St; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<std::istream∗> St; } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<std::istream&> } St; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<std::istream&> } St; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos< Stos< Stos< char[20] } > > > St; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP > class Stos { Tab[ROZ STOSU]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP, unsigned int Rozmiar class Stos { Tab[Rozmiar]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } > bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= Rozmiar ? false : Tab[ Ilosc++] = El, true; } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP, unsigned int Rozmiar class Stos { Tab[Rozmiar]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } > bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= Rozmiar ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<float, 100> } St; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP, unsigned int Rozmiar= 100 class Stos { Tab[Rozmiar]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } > bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= Rozmiar ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<float, 100> } St; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Najważniejsze cechy Proste szablony Przykład szablonu stosu template < typename TYP, unsigned int Rozmiar= 100 class Stos { Tab[Rozmiar]; TYP unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } > bool Pobierz(TYP& El) { return ! Ilosc ? false : El = Tab[−− Ilosc], true; } }; bool Poloz(const TYP& El) { return Ilosc >= Rozmiar ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<float> St; } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Klasa z typem wyliczeniowym class EnkoderRobota { int Stan; public: EnkoderRobota( ): Stan( ) {} int Wez( ) const { return Stan; } void Zmien(int Stan) { Stan = Stan; } }; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Klasa z typem wyliczeniowym class EnkoderRobota { int Stan; public: EnkoderRobota( ): Stan( ) {} int Wez( ) const { return Stan; } void Zmien(int Stan) { Stan = Stan; } enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Klasa z typem wyliczeniowym class EnkoderRobota { int Stan; public: EnkoderRobota( ): Stan( ) {} int Wez( ) const { return Stan; } void Zmien(int Stan) { Stan = Stan; } enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; int main( ) { EnkoderRobota } Tab[EnkoderRobota::Ilosc]; Tab[EnkoderRobota::Naped].Zmien(2); Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Klasa z typem wyliczeniowym class EnkoderRobota { int Stan; public: EnkoderRobota( ): Stan( ) {} int Wez( ) const { return Stan; } void Zmien(int Stan) { Stan = Stan; } enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; int main( ) { EnkoderRobota } Tab[EnkoderRobota::Ilosc]; Tab[EnkoderRobota::Naped].Zmien(2); Tab[10].Zmien(2); Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Klasa z typem wyliczeniowym class EnkoderRobota { int Stan; public: EnkoderRobota( ): Stan( ) {} int Wez( ) const { return Stan; } void Zmien(int Stan) { Stan = Stan; } enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; class PotencjometrRobota { int Stan; public: PotencjometrRobota( ): Stan( ) {} int Wez( ) const { return Stan; } void Zmien(int Stan) { Stan = Stan; } enum Urzadzenie { Noga1, Noga2, Noga3, Noga4, Ilosc}; }; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Synonimy dla nazw typów class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; class PotencjometrRobota { ... enum Urzadzenie { Noga1, Noga2, Noga3, Noga4, Ilosc}; }; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Synonimy dla nazw typów class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; class PotencjometrRobota { ... enum Urzadzenie { Noga1, Noga2, Noga3, Noga4, Ilosc}; }; int main( ) { StanEnkRob StanEnk; StanPotRob StanPot; StanEnk.Wez(::Naped); StanPot.Wez(::Noga1); } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Synonimy dla nazw typów class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; class PotencjometrRobota { ... enum Urzadzenie { Noga1, Noga2, Noga3, Noga4, Ilosc}; }; int main( ) { StanEnkRob StanEnk; StanPotRob StanPot; } StanEnk.Wez(::Naped); StanPot.Wez(::Noga1); StanPot.Wez(1); Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Synonimy dla nazw typów class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; class PotencjometrRobota { ... enum Urzadzenie { Noga1, Noga2, Noga3, Noga4, Ilosc}; }; int main( ) { StanEnkRob StanEnk; StanPotRob StanPot; } StanEnk.Wez(::Naped); StanPot.Wez(::Noga1); StanPot.Wez(1); encoder.cpp: In function ’int main()’: encoder.cpp:62: error: invalid conversion from ’int’ to ’PotencjometrRobota::Urzadzenie’ Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Synonimy dla nazw typów class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; class PotencjometrRobota { ... enum Urzadzenie { Noga1, Noga2, Noga3, Noga4, Ilosc}; }; int main( ) { StanEnkRob StanEnk; StanPotRob StanPot; StanEnk.Wez(EnkoderRobota::Naped); StanPot.Wez(PotencjometrRobota::Noga1); } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Synonimy dla nazw typów class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; ... typedef PotencjometrRobota typedef EnkoderRobota PotRob; EnkRob; int main( ) { StanEnkRob StanEnk; StanPotRob StanPot; StanEnk.Wez(EnkoderRobota::Naped); StanPot.Wez(PotencjometrRobota::Noga1); } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Synonimy dla nazw typów class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; ... typedef PotencjometrRobota typedef EnkoderRobota PotRob; EnkRob; int main( ) { StanEnkRob StanEnk; StanPotRob StanPot; StanEnk.Wez(EnkRob::Naped); StanPot.Wez(PotRob::Noga1); } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Definicja szablonu class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; class PotencjometrRobota { ... enum Urzadzenie { Noga1, Noga2, Noga3, Noga4, Ilosc}; }; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Definicja szablonu class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; ... template <typename TYP> class Stan { TYP TabCzytn[TYP::Ilosc]; public: int Wez(typename TYP::Urzadzenie Urz) const { return TabCzytn[Urz].Wez( ); } void Zmien(typename TYP::Urzadzenie Urz, int Stan) { return TabCzytn[Urz].Zmien(Stan); } }; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Definicja szablonu class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; ... template <typename TYP> class Stan { TYP TabCzytn[TYP::Ilosc]; public: int Wez(typename TYP::Urzadzenie Urz) const { return TabCzytn[Urz].Wez( ); } void Zmien(typename TYP::Urzadzenie Urz, int Stan) { return TabCzytn[Urz].Zmien(Stan); } }; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Definicja szablonu class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; ... template <typename TYP> class Stan { TYP TabCzytn[TYP::Ilosc]; public: int Wez(typename TYP::Urzadzenie Urz) const { return TabCzytn[Urz].Wez( ); } void Zmien(typename TYP::Urzadzenie Urz, int Stan) { return TabCzytn[Urz].Zmien(Stan); } }; Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Wykorzystanie szablonu class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; ... template <typename TYP> class Stan { TYP TabCzytn[TYP::Ilosc]; public: int Wez(typename TYP::Urzadzenie Urz) const ... }; int main() { Stan<EnkoderRobota> StanEnk; StanEnk.Wez(EnkoderRobota::Naped); } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Wykorzystanie szablonu class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; ... template <typename TYP> class Stan { TYP TabCzytn[TYP::Ilosc]; public: int Wez(typename TYP::Urzadzenie Urz) const ... }; int main() { Stan<EnkoderRobota> StanEnk; StanEnk.Wez(EnkoderRobota::Naped); StanEnk.Wez(1); } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Wykorzystanie szablonu class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; ... template <typename TYP> class Stan { TYP TabCzytn[TYP::Ilosc]; public: int Wez(typename TYP::Urzadzenie Urz) const ... }; int main() { Stan<EnkoderRobota> StanEnk; StanEnk.Wez(EnkoderRobota::Naped); StanEnk.Wez(1); encoder.cpp: In function ’int main()’: encoder.cpp:62: error: invalid conversion from ’int’ to ’PotencjometrRobota::Urzadzenie’ } encoder.cpp:62: error: initializing argument 1 of ’int Stan<TYP>::Wez(typename TYP::Urzadzenie) const [with TYP = PotencjometrRobota]’ Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Synonimy nazw typów po raz drugi class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; ... template <typename TYP> class Stan { ... public: int Wez(typename TYP::Urzadzenie Urz) const ... }; int main( ) { Stan<EnkoderRobota>StanEnkRob StanEnk; StanEnk.Wez(EnkoderRobotaEnkRob::Naped); } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Synonimy nazw typów po raz drugi class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; ... template <typename TYP> class Stan { ... public: int Wez(typename TYP::Urzadzenie Urz) const ... }; typedef Stan<EnkoderRobota> StanEnkRob; typedef EnkoderRobota EnkRob; int main( ) { Stan<EnkoderRobota>StanEnkRob StanEnk; StanEnk.Wez(EnkoderRobotaEnkRob::Naped); } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Synonimy nazw typów po raz drugi class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; ... template <typename TYP> class Stan { ... public: int Wez(typename TYP::Urzadzenie Urz) const ... }; typedef Stan<EnkoderRobota> StanEnkRob; typedef EnkoderRobota EnkRob; int main( ) { Stan<EnkoderRobota>StanEnkRob StanEnk; StanEnk.Wez(EnkoderRobotaEnkRob::Naped); } Programowanie obiektowe Wprowadzenie do szablonów klas Szablony klas – Wprowadzenie Przykład wykorzystania szablonu Klasy z definicją podtypu Szablon dla klasy z podtypem Synonimy nazw typów po raz drugi class EnkoderRobota { ... enum Urzadzenie { Naped, Skret, Wiezyczka, Ilosc}; }; ... template <typename TYP> class Stan { ... public: int Wez(typename TYP::Urzadzenie Urz) const ... }; typedef Stan<EnkoderRobota> StanEnkRob; typedef EnkoderRobota EnkRob; int main( ) { StanEnkRob StanEnk; StanEnk.Wez(EnkRob::Naped); } Programowanie obiektowe Wprowadzenie do szablonów klas