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

Podobne dokumenty