1=Szablony, wybrane elementy biblioteki STL

Transkrypt

1=Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony, wybrane elementy biblioteki STL
Bogdan Kreczmer
[email protected]
Katedra Cybernetyki i Robotyki
Wydziału Elektroniki
Politechnika Wrocławska
Kurs: Programowanie obiektowe
c
Copyright2016
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Plan prezentacji
1
Konstruktory i operatory domyślne
Klasy z polami referencyjnymi
Klasa std::string
2
Szablony
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
3
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Plan prezentacji
1
Konstruktory i operatory domyślne
Klasy z polami referencyjnymi
Klasa std::string
2
Szablony
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
3
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Klasy z polami referencyjnymi
class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
int
&x, &y;
int
Tab[2];
};
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Klasy z polami referencyjnymi
class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
int
&x, &y;
int
Tab[2];
};
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Wektor2
W1;
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Klasy z polami referencyjnymi
class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
int
&x, &y;
int
Tab[2];
};
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
PP
Wektor2 W1;
P
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Klasy z polami referencyjnymi
class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
int
&x, &y;
int
Tab[2];
Wektor2( ): x(Tab[0]), y(Tab[1]) { }
};
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Wektor2
W1;
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Klasy z polami referencyjnymi
class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
int
&x, &y;
int
Tab[2];
Wektor2( ): x(Tab[0]), y(Tab[1]) { }
};
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Wektor2
Wektor2
W1;
W2(W1);
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Klasy z polami referencyjnymi
class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
int
&x, &y;
int
Tab[2];
Wektor2( ): x(Tab[0]), y(Tab[1]) { }
};
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Wektor2
Wektor2
W1;
PP
W2(W1);
P
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Klasy z polami referencyjnymi
class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
int
&x, &y;
int
Tab[2];
Wektor2( ): x(Tab[0]), y(Tab[1]) { }
Wektor2(const Wektor2 &W) . . .
};
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Wektor2
Wektor2
W1;
W2(W1);
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Klasy z polami referencyjnymi
class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
int
&x, &y;
int
Tab[2];
Wektor2( ): x(Tab[0]), y(Tab[1]) { }
Wektor2(const Wektor2 &W): x(Tab[0]), y(Tab[1]) { x = W.x; y = W.y; }
};
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Wektor2
Wektor2
W1;
W2(W1);
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Klasy z polami referencyjnymi
class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
int
&x, &y;
int
Tab[2];
Wektor2( ): x(Tab[0]), y(Tab[1]) { }
Wektor2(const Wektor2 &W): x(Tab[0]), y(Tab[1]) { x = W.x; y = W.y; }
};
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Wektor2
Wektor2
}
W1;
W2(W1);
W1 = W2;
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Klasy z polami referencyjnymi
class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
int
&x, &y;
int
Tab[2];
Wektor2( ): x(Tab[0]), y(Tab[1]) { }
Wektor2(const Wektor2 &W): x(Tab[0]), y(Tab[1]) { x = W.x; y = W.y; }
};
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Wektor2
Wektor2
W1;
W2(W1);
P }
P
W1
=P
W2;
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Klasy z polami referencyjnymi
class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
int
&x, &y;
int
Tab[2];
Wektor2( ): x(Tab[0]), y(Tab[1]) { }
Wektor2(const Wektor2 &W): x(Tab[0]), y(Tab[1]) { x = W.x; y = W.y; }
};
Wektor2& operator = ( const Wektor2& W ) . . .
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Wektor2
Wektor2
}
W1;
W2(W1);
W1 = W2;
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Klasy z polami referencyjnymi
class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
int
&x, &y;
int
Tab[2];
Wektor2( ): x(Tab[0]), y(Tab[1]) { }
Wektor2(const Wektor2 &W): x(Tab[0]), y(Tab[1]) { x = W.x; y = W.y; }
};
Wektor2& operator = ( const Wektor2& W ) { x = W.x; y = W.y; }
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Wektor2
Wektor2
}
W1;
W2(W1);
W1 = W2;
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Podsumowanie (1)
W przypadku klas, w których zdefiniowane są pola wskaźnikowe, może
koniecznym okazać się zdefiniowanie konstruktora kopiującego oraz
przeciążenie operatora przypisania. Jest to niezbędne wtedy, gdy
obiekty tej klasy stowarzyszone są ze strukturami tworzonymi
dynamicznie i usuwanymi w destruktorze.
Jeżeli stowarzyszone z danym obiektem struktury danych nie są
usuwane w destruktorze, to na ogół można ograniczyć się do
domyślnej implementacji konstruktora kopiującego i operatora
przypisania.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Podsumowanie (1)
W przypadku klas, w których zdefiniowane są pola wskaźnikowe, może
koniecznym okazać się zdefiniowanie konstruktora kopiującego oraz
przeciążenie operatora przypisania. Jest to niezbędne wtedy, gdy
obiekty tej klasy stowarzyszone są ze strukturami tworzonymi
dynamicznie i usuwanymi w destruktorze.
Jeżeli stowarzyszone z danym obiektem struktury danych nie są
usuwane w destruktorze, to na ogół można ograniczyć się do
domyślnej implementacji konstruktora kopiującego i operatora
przypisania.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Podsumowanie (1)
W przypadku klas, w których zdefiniowane są pola wskaźnikowe, może
koniecznym okazać się zdefiniowanie konstruktora kopiującego oraz
przeciążenie operatora przypisania. Jest to niezbędne wtedy, gdy
obiekty tej klasy stowarzyszone są ze strukturami tworzonymi
dynamicznie i usuwanymi w destruktorze.
Jeżeli stowarzyszone z danym obiektem struktury danych nie są
usuwane w destruktorze, to na ogół można ograniczyć się do
domyślnej implementacji konstruktora kopiującego i operatora
przypisania.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Podsumowanie (2)
W klasach, w których definiowane są pola referencyjne nie istnieje
domyślna implementacja konstruktora kopiującego i operatora
przypisania. Wynika to z fakty, że zwykłe przepisanie bajt po bajcie
zawartości obiektów zmieniałoby referencje. Z definicji zaś referencji
wynika, że w trakcie swojego istnienia nie może ona ulegać zmianom.
Jeżeli obiekty klasy zawierającej pola referencyjne mają być
przekazywane jako parametr wywołania funkcji/metody lub przez nie
zwracane lub też w sposób jawny ma być wywoływany konstruktor
kopiujący, to jego zdefiniowanie jest bezwzględnie konieczne.
W przypadku, gdy ma być wykonywana operacja przypisania,
konieczne jest wówczas zdefiniowanie operatora przypisania.
Jeżeli wyżej wymienione operacje nie będą wykonywane, to nie ma
potrzeby definiowania zarówno konstruktora kopiującego, jak też
operatora przypisania.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Podsumowanie (2)
W klasach, w których definiowane są pola referencyjne nie istnieje
domyślna implementacja konstruktora kopiującego i operatora
przypisania. Wynika to z fakty, że zwykłe przepisanie bajt po bajcie
zawartości obiektów zmieniałoby referencje. Z definicji zaś referencji
wynika, że w trakcie swojego istnienia nie może ona ulegać zmianom.
Jeżeli obiekty klasy zawierającej pola referencyjne mają być
przekazywane jako parametr wywołania funkcji/metody lub przez nie
zwracane lub też w sposób jawny ma być wywoływany konstruktor
kopiujący, to jego zdefiniowanie jest bezwzględnie konieczne.
W przypadku, gdy ma być wykonywana operacja przypisania,
konieczne jest wówczas zdefiniowanie operatora przypisania.
Jeżeli wyżej wymienione operacje nie będą wykonywane, to nie ma
potrzeby definiowania zarówno konstruktora kopiującego, jak też
operatora przypisania.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Podsumowanie (2)
W klasach, w których definiowane są pola referencyjne nie istnieje
domyślna implementacja konstruktora kopiującego i operatora
przypisania. Wynika to z fakty, że zwykłe przepisanie bajt po bajcie
zawartości obiektów zmieniałoby referencje. Z definicji zaś referencji
wynika, że w trakcie swojego istnienia nie może ona ulegać zmianom.
Jeżeli obiekty klasy zawierającej pola referencyjne mają być
przekazywane jako parametr wywołania funkcji/metody lub przez nie
zwracane lub też w sposób jawny ma być wywoływany konstruktor
kopiujący, to jego zdefiniowanie jest bezwzględnie konieczne.
W przypadku, gdy ma być wykonywana operacja przypisania,
konieczne jest wówczas zdefiniowanie operatora przypisania.
Jeżeli wyżej wymienione operacje nie będą wykonywane, to nie ma
potrzeby definiowania zarówno konstruktora kopiującego, jak też
operatora przypisania.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Podsumowanie (2)
W klasach, w których definiowane są pola referencyjne nie istnieje
domyślna implementacja konstruktora kopiującego i operatora
przypisania. Wynika to z fakty, że zwykłe przepisanie bajt po bajcie
zawartości obiektów zmieniałoby referencje. Z definicji zaś referencji
wynika, że w trakcie swojego istnienia nie może ona ulegać zmianom.
Jeżeli obiekty klasy zawierającej pola referencyjne mają być
przekazywane jako parametr wywołania funkcji/metody lub przez nie
zwracane lub też w sposób jawny ma być wywoływany konstruktor
kopiujący, to jego zdefiniowanie jest bezwzględnie konieczne.
W przypadku, gdy ma być wykonywana operacja przypisania,
konieczne jest wówczas zdefiniowanie operatora przypisania.
Jeżeli wyżej wymienione operacje nie będą wykonywane, to nie ma
potrzeby definiowania zarówno konstruktora kopiującego, jak też
operatora przypisania.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Podsumowanie (2)
W klasach, w których definiowane są pola referencyjne nie istnieje
domyślna implementacja konstruktora kopiującego i operatora
przypisania. Wynika to z fakty, że zwykłe przepisanie bajt po bajcie
zawartości obiektów zmieniałoby referencje. Z definicji zaś referencji
wynika, że w trakcie swojego istnienia nie może ona ulegać zmianom.
Jeżeli obiekty klasy zawierającej pola referencyjne mają być
przekazywane jako parametr wywołania funkcji/metody lub przez nie
zwracane lub też w sposób jawny ma być wywoływany konstruktor
kopiujący, to jego zdefiniowanie jest bezwzględnie konieczne.
W przypadku, gdy ma być wykonywana operacja przypisania,
konieczne jest wówczas zdefiniowanie operatora przypisania.
Jeżeli wyżej wymienione operacje nie będą wykonywane, to nie ma
potrzeby definiowania zarówno konstruktora kopiującego, jak też
operatora przypisania.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Plan prezentacji
1
Konstruktory i operatory domyślne
Klasy z polami referencyjnymi
Klasa std::string
2
Szablony
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
3
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Klasa std::string
Klasa łańcuchów napisowych została zaprojektowana, tak aby można ją było
wykorzystywać jak normalny typ wbudowany. Pozwala to na ułatwienie
przetwarzania tekstów
Jedną z najważniejszych cech typu std::string jest to że jest zdefiniowana dla
niego operacja kopiowania z wykorzystaniem zarówno konstruktora kopiującego jak
też operatora podstawienie =. Rozwiązuje to problem dynamicznego przydziału i
zwalniania pamięci, co na poziomie języka C jest zawsze kłopotliwe.
Zdefiniowane są operacje porównywaniałańcuchów (operatory: ==, <, >, <=,
>=, !=), oraz operacja konkatenacji (operatory: +, +=).
Dostępnych jest wiele dodatkowych udogodnień pozwalających na wyszukiwaniu
znaków lub podciągów, wstawianie sekwencji znaków, zamiany itp.
Nie są zdefiniowane metody wyszukiwania w oparciu o wyrażenia regularne.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład prostych operacji
int main( )
{
std::string Zyczenia;
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład prostych operacji
int main( )
{
std::string Zyczenia;
std::string Naglowek = ”Z okazji spotkania Marsjan\n”;
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład prostych operacji
int main( )
{
std::string Zyczenia;
std::string Naglowek = ”Z okazji spotkania Marsjan\n”;
Zyczenia = Naglowek + ”wszystkiego najlepszego zyczy\n”;
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład prostych operacji
int main( )
{
std::string Zyczenia;
std::string Naglowek = ”Z okazji spotkania Marsjan\n”;
Zyczenia = Naglowek + ”wszystkiego najlepszego zyczy\n”;
Zyczenia += ”Ziemianin”;
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład prostych operacji
int main( )
{
std::string Zyczenia;
std::string Naglowek = ”Z okazji spotkania Marsjan\n”;
Zyczenia = Naglowek + ”wszystkiego najlepszego zyczy\n”;
Zyczenia += ”Ziemianin”;
cout << Zyczenia << endl;
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład prostych operacji
string UniwersalneZyczenia( const char ∗Naglowek, const
{
string Zyczenia = Naglowek;
char ∗Zakonczenie )
Zyczenia += ”wszystkiego najlepszego zyczy\n”;
Zyczenia += Zakonczenie;
return Zyczenia;
}
int main( )
{
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład prostych operacji
string UniwersalneZyczenia( const char ∗Naglowek, const
{
string Zyczenia = Naglowek;
char ∗Zakonczenie )
Zyczenia += ”wszystkiego najlepszego zyczy\n”;
Zyczenia += Zakonczenie;
return Zyczenia;
}
int main( )
{
string Zyczenia = UniwersalneZyczenia(”Z okazji spotkania Marsjan ”,”Ziemianin”);
cout << Zyczenia << endl;
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład prostych operacji
string UniwersalneZyczenia( const char ∗Naglowek, const
{
string Zyczenia = Naglowek;
char ∗Zakonczenie )
Zyczenia += ”wszystkiego najlepszego zyczy\n”;
Zyczenia += Zakonczenie;
return Zyczenia;
}
int main( )
{
string Zyczenia = UniwersalneZyczenia(”Z okazji spotkania Marsjan ”,”Ziemianin”);
cout << Zyczenia << endl;
const char ∗Zycz C = Zyczenia.c str( );
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład prostych operacji
string UniwersalneZyczenia( const char ∗Naglowek, const
{
string Zyczenia = Naglowek;
char ∗Zakonczenie )
Zyczenia += ”wszystkiego najlepszego zyczy\n”;
Zyczenia += Zakonczenie;
return Zyczenia;
}
int main( )
{
string Zyczenia = UniwersalneZyczenia(”Z okazji spotkania Marsjan ”,”Ziemianin”);
cout << Zyczenia << endl;
const char ∗Zycz C = Zyczenia.c str( );
Zyczenia = ”Z okazji pierwszej swiatowej inwazji Marsjan na supermarkety ...”;
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład prostych operacji
string UniwersalneZyczenia( const char ∗Naglowek, const
{
string Zyczenia = Naglowek;
char ∗Zakonczenie )
Zyczenia += ”wszystkiego najlepszego zyczy\n”;
Zyczenia += Zakonczenie;
return Zyczenia;
}
int main( )
{
string Zyczenia = UniwersalneZyczenia(”Z okazji spotkania Marsjan ”,”Ziemianin”);
cout << Zyczenia << endl;
const char ∗Zycz C = Zyczenia.c str( );
Zyczenia = ”Z okazji pierwszej swiatowej inwazji Marsjan na supermarkety ...”;
cout << Zycz C << endl;
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przeciążone operatory
Przeciążenia w klasie string:
< > <= >= == !=
=
+, +=
[ ]
–
–
–
–
porównania,
przypisanie,
konkatenacja,
bezpośredni dostęp do znaku bez kontroli zakresu,
Przeciążenia zewnętrzne dla klasy string:
<<
>>
– zapis do strumień klasy ostream,
– cztanie ze strumienia klasy istream.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład metod
Tworzenie tablic i łańcuchów znakowych w sensie języka C:
c str
data
copy
– zwraca łańcuch w sensie języka C,
– zwraca łańcuch w postaci tablicy znakowej,
– przekopiowuje do tablicy znakowej zadana ilość znaków.
Ekstrahowanie podłańcuchów:
substr
– zwraca podciąg (obiekt klasy string),
Dostęp do poszczególnych elementów łańcucha:
at
– kontrolowany dostęp do danego znaku.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład metod
Rozmiar i wielkość łańcucha:
length
size
max size
empty
–
–
–
–
podaje długość łańcucha w sensie języka C,
podaje rozmiar łańcucha,
podaje maksymalny mo¿liwy rozmiar łańcucha,
informuje czy dany łańcuch jest pusty.
Pojemność łańcucha i jej zmiana:
capacity
reserve
– określenie pojemności,
– rezerwacja pamięci.
Szukanie i porównywanie:
find
compare
– szukania znaków i ciągów znaków,
– porównuje dwa ciągi.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład metod
string RdzenNazwyPliku( const string &NazwaPliku )
{
size t Ind = NazwaPliku.find(’ . ’);
if ( Ind == string::npos ) return NazwaPliku;
return NazwaPliku.substr( 0, Ind );
}
int main( )
{
cout << RdzenNazwyPliku(”rownanie liniowe.dane”)
}
Programowanie obiektowe
<<
endl;
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład metod
int main()
{
cout << CzyNalezyDoGrupy(”jk”,”cdrom:x:24:jk,installer,mythtv”)
}
Programowanie obiektowe
<<
endl;
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład metod
bool CzyJestWLiscie( string LoginUzyt, string ListaUzyt )
{
LoginUzyt = ”,” + LoginUzyt + ”,”;
ListaUzyt = ”,” + ListaUzyt + ”,”;
return
ListaUzyt.find(LoginUzyt) != string ::npos;
}
int main()
{
cout << CzyNalezyDoGrupy(”jk”,”cdrom:x:24:jk,installer,mythtv”)
}
Programowanie obiektowe
<<
endl;
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Klasy z polami referencyjnymi
Klasa std::string
Przykład metod
bool CzyJestWLiscie( string LoginUzyt, string ListaUzyt )
{
LoginUzyt = ”,” + LoginUzyt + ”,”;
ListaUzyt = ”,” + ListaUzyt + ”,”;
return
ListaUzyt.find(LoginUzyt) != string ::npos;
}
bool CzyNalezyDoGrupy( const char ∗ sLoginUzyt, const char ∗ sListaGrupy )
{
istringstream StrmWe(sListaGrupy);
string ListaUzyt;
for (int i = 0; i < 3; ++i) StrmWe.ignore(1000,’:’);
return CzyJestWLiscie(sLoginUzyt,ListaUzyt);
}
int main()
{
cout << CzyNalezyDoGrupy(”jk”,”cdrom:x:24:jk,installer,mythtv”)
}
Programowanie obiektowe
<<
endl;
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Plan prezentacji
1
Konstruktory i operatory domyślne
Klasy z polami referencyjnymi
Klasa std::string
2
Szablony
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
3
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Problemy z tłumaczeniem
template
.
&
wzorzec
szablon
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Problemy z tłumaczeniem
template
.
&
wzorzec
szablon
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Dlaczego szablony?
W językach takich jak C i Pascal mamy do czynienia
z separacją kodu i typu parametrów. Wartości z jakimi
wywoływane są funkcje i procedury mogą parametryzować ich działanie. Jednak ich typy zostają ustalone raz
na zawsze w momencie ich definicji.
Problem:
Należy zaimplementować algorytm sortowania dla obiektów różnych typów.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Dlaczego szablony?
W językach takich jak C i Pascal mamy do czynienia
z separacją kodu i typu parametrów. Wartości z jakimi
wywoływane są funkcje i procedury mogą parametryzować ich działanie. Jednak ich typy zostają ustalone raz
na zawsze w momencie ich definicji.
Problem:
Należy zaimplementować algorytm sortowania dla obiektów różnych typów.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Dlaczego szablony?
Problem:
Należy zaimplementować algorytm sortowania dla obiektów różnych typów.
Możliwe rozwiązania:
Implementacja algorytmu dla wszystkich typów, dla których
przewidziane jest jego zastosowanie.
Implementacja algorytmu dla typu podstawowego takiego jak
void∗ lub Object.
Zdefiniowanie makr i wykorzystanie specjalnych preprocesorów
(np. cpp dla C/C++).
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Dlaczego szablony?
Problem:
Należy zaimplementować algorytm sortowania dla obiektów różnych typów.
Możliwe rozwiązania:
Implementacja algorytmu dla wszystkich typów, dla których
przewidziane jest jego zastosowanie.
Implementacja algorytmu dla typu podstawowego takiego jak
void∗ lub Object.
Zdefiniowanie makr i wykorzystanie specjalnych preprocesorów
(np. cpp dla C/C++).
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Dlaczego szablony?
Problem:
Należy zaimplementować algorytm sortowania dla obiektów różnych typów.
Możliwe rozwiązania:
Implementacja algorytmu dla wszystkich typów, dla których
przewidziane jest jego zastosowanie.
Implementacja algorytmu dla typu podstawowego takiego jak
void∗ lub Object.
Zdefiniowanie makr i wykorzystanie specjalnych preprocesorów
(np. cpp dla C/C++).
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Dlaczego szablony?
Problem:
Należy zaimplementować algorytm sortowania dla obiektów różnych typów.
Możliwe rozwiązania:
Implementacja algorytmu dla wszystkich typów, dla których
przewidziane jest jego zastosowanie.
Implementacja algorytmu dla typu podstawowego takiego jak
void∗ lub Object.
Zdefiniowanie makr i wykorzystanie specjalnych preprocesorów
(np. cpp dla C/C++).
Najlepszym rozwiązaniem dla postawionego problemu jest koncepcja
szablonów.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Dlaczego szablony?
Problem:
Należy zaimplementować algorytm sortowania dla obiektów różnych typów.
Możliwe rozwiązania:
Implementacja algorytmu dla wszystkich typów, dla których
przewidziane jest jego zastosowanie.
Implementacja algorytmu dla typu podstawowego takiego jak
void∗ lub Object.
Zdefiniowanie makr i wykorzystanie specjalnych preprocesorów
(np. cpp dla C/C++).
Najlepszym rozwiązaniem dla postawionego problemu jest koncepcja
szablonów.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Dlaczego szablony?
Problem:
Należy zaimplementować algorytm sortowania dla obiektów różnych typów.
Możliwe rozwiązania:
Implementacja algorytmu dla wszystkich typów, dla których
przewidziane jest jego zastosowanie.
Implementacja algorytmu dla typu podstawowego takiego jak
void∗ lub Object.
Zdefiniowanie makr i wykorzystanie specjalnych preprocesorów
(np. cpp dla C/C++).
Najlepszym rozwiązaniem dla postawionego problemu jest koncepcja
szablonów.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Podstawowe cechy
Szablony pozwalają na definiowanie funkcji, których typy
parametrów są także parametrami tych funkcji.
Możliwe jest definiowanie klas, które parametryzowane mogą być
typami pól występujących w tych klasach i/lub też typami
parametrów metod.
Programista definiuje tylko raz dany szablon. Kompilator dokonuje
dedukcji typów parametrów danego szablonu i konkretyzuje go
tworząc kod dla użytych typów w wywołaniu funkcji lub definicji
obiektu danej klasy.
Programista może też jawnie określić “wartości” parametrów
szablonu.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Podstawowe cechy
Szablony pozwalają na definiowanie funkcji, których typy
parametrów są także parametrami tych funkcji.
Możliwe jest definiowanie klas, które parametryzowane mogą być
typami pól występujących w tych klasach i/lub też typami
parametrów metod.
Programista definiuje tylko raz dany szablon. Kompilator dokonuje
dedukcji typów parametrów danego szablonu i konkretyzuje go
tworząc kod dla użytych typów w wywołaniu funkcji lub definicji
obiektu danej klasy.
Programista może też jawnie określić “wartości” parametrów
szablonu.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Podstawowe cechy
Szablony pozwalają na definiowanie funkcji, których typy
parametrów są także parametrami tych funkcji.
Możliwe jest definiowanie klas, które parametryzowane mogą być
typami pól występujących w tych klasach i/lub też typami
parametrów metod.
Programista definiuje tylko raz dany szablon. Kompilator dokonuje
dedukcji typów parametrów danego szablonu i konkretyzuje go
tworząc kod dla użytych typów w wywołaniu funkcji lub definicji
obiektu danej klasy.
Programista może też jawnie określić “wartości” parametrów
szablonu.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Podstawowe cechy
Szablony pozwalają na definiowanie funkcji, których typy
parametrów są także parametrami tych funkcji.
Możliwe jest definiowanie klas, które parametryzowane mogą być
typami pól występujących w tych klasach i/lub też typami
parametrów metod.
Programista definiuje tylko raz dany szablon. Kompilator dokonuje
dedukcji typów parametrów danego szablonu i konkretyzuje go
tworząc kod dla użytych typów w wywołaniu funkcji lub definicji
obiektu danej klasy.
Programista może też jawnie określić “wartości” parametrów
szablonu.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Wady i zalety
Zalety:
? Szablony dają możliwość tworzenia uniwersalnych algorytmów i uniwersalnych struktur danych.
? W odróżnieniu od makr możliwe jest zachowanie przejrzystości kodu.
? W odróżnieniu od wykorzystywania typów bazowych
pozwalają zachować ścisłą kontrolę typów w trakcie
kompilacji.
Wady:
◦ Brak możliwości tworzenia oddzielnych jednostek kompilacji (modułów) w postaci “czystych” szablonów.
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Szablony funkcji – przykład dla typów wbudowanych
template <class Typ>
Typ Max( Typ w1, Typ w2 )
{
return w1 < w2 ? w2 : w1;
}
enum
Symbole { a=1, b, c };
int main( )
{
cout <<
cout <<
cout <<
cout <<
}
Max(1,2) << endl;
Max(1.1, 2.2) << endl;
Max(’A’,’B’) << endl;
Max( a , b ) << endl;
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Szablony funkcji – przykład dla typów wbudowanych
template <class Typ>
Typ Max( Typ w1, Typ w2 )
{
return w1 < w2 ? w2 : w1;
}
enum
Symbole { a=1, b, c };
int main( )
{
cout <<
cout <<
cout <<
cout <<
}
Max(1,2) << endl;
Max(1.1, 2.2) << endl;
Max(’A’,’B’) << endl;
Max( a , b ) << endl;
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Szablony funkcji – przykład dla typów wbudowanych
template <class Typ>
Typ Max( Typ w1, Typ w2 )
{
return w1 < w2 ? w2 : w1;
}
enum
W tym przykładzie kompilator
generuje kod funkcji Max dla czterech
przypadków. Słowo kluczowe class
może zostać zastąpione przez
typename.
Symbole { a=1, b, c };
int main( )
{
cout <<
cout <<
cout <<
cout <<
}
Max(1,2) << endl;
Max(1.1, 2.2) << endl;
Max(’A’,’B’) << endl;
Max( a , b ) << endl;
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Szablony funkcji – własna klasa
template <class Typ>
Typ Max( Typ w1, Typ w2 )
{
return w1 < w2 ? w2 : w1; Czy szablon można stosować również
}
dla własnych klas?
int main( )
{
Wektor W1(1,1), W2(4,5), W3;
W3 = Max(W1,W2);
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Szablony funkcji – własna klasa
struct Wektor {
float x, y;
};
template <class Typ>
Typ Max( Typ w1, Typ w2 )
{
return w1 < w2 ? w2 : w1;
}
int main( )
{
Wektor W1(1,1), W2(4,5), W3;
}
W3 = Max(W1,W2);
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Szablony funkcji – własna klasa
struct Wektor {
float x, y;
};
W takiej postaci na pewno nie będzie
template <class Typ>
Typ Max( Typ w1, Typ w2 ) dobrze. Dlaczego?
{
return w1 < w2 ? w2 : w1;
}
int main( )
{
Wektor W1(1,1), W2(4,5), W3;
}
W3 = Max(W1,W2);
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Szablony funkcji – własna klasa
struct Wektor {
float x, y;
};
Problemem jest operacja prównania
template <class Typ>
Typ Max( Typ w1, Typ w2 ) dwóch wektorów. Dlaczego?
{
return w1 < w2 ? w2 : w1;
}
int main( )
{
Wektor W1(1,1), W2(4,5), W3;
}
W3 = Max(W1,W2);
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Szablony funkcji – własna klasa
struct Wektor {
float x, y;
};
bool operator < ( const Wektor& W ) const
{ return x∗x+y∗y < W.x∗W.x+W.y∗W.y; }
Aby było dobrze, należy zdefiniować
template <class Typ>
Typ Max( Typ w1, Typ w2 ) przeciążenie operatora porównania.
{
return w1 < w2 ? w2 : w1;
}
int main( )
{
Wektor W1(1,1), W2(4,5), W3;
}
W3 = Max(W1,W2);
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Plan prezentacji
1
Konstruktory i operatory domyślne
Klasy z polami referencyjnymi
Klasa std::string
2
Szablony
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
3
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Ogólna postać szablonu
template < lista-parametrow-rozdzielonych-przecinkami >
class Klasa {
...
};
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Stos
class Stos {
int
Tab[ROZ STOSU];
int unsigned int Ilosc;
public :
Stos( ) { Ilosc = 0; }
bool Pobierz(int& El)
{ return ! Ilosc ? false : El = Tab[−− Ilosc], true; }
};
bool Poloz(const int& El)
{ return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; }
int main( )
{
Stos St;
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP >
class Stos {
TYP
Tab[ROZ STOSU];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < class TYP >
class Stos {
TYP
Tab[ROZ STOSU];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP >
class Stos {
TYP
Tab[ROZ STOSU];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP >
class Stos {
TYP
Tab[ROZ STOSU];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP >
class Stos {
TYP
Tab[ROZ STOSU];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP >
class Stos {
TYP
Tab[ROZ STOSU];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP >
class Stos {
TYP
Tab[ROZ STOSU];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP >
class Stos {
TYP
Tab[ROZ STOSU];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP >
class Stos {
TYP
Tab[ROZ STOSU];
unsigned int Ilosc;
public :
Stos( ) { Ilosc = 0; }
bool Pobierz(TYP& El)
P
Tab[−− Ilosc], true; }
P=
{ return ! Ilosc ? false : El
P
};
bool Poloz(const TYP& El)
P
{ return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++]
=PEl, true; }
P
int main( )
{
Stos<std::istream>
}
St;
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP >
class Stos {
TYP
Tab[ROZ STOSU];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP >
class Stos {
TYP
Tab[ROZ STOSU];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP >
class Stos {
TYP
Tab[ROZ STOSU];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP >
class Stos {
TYP
Tab[ROZ STOSU];
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]
}
>>>
Programowanie obiektowe
St;
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP >
class Stos {
TYP
Tab[ROZ STOSU];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP, unsigned int Rozmiar
class Stos {
TYP
Tab[Rozmiar];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP, unsigned int Rozmiar
class Stos {
TYP
Tab[Rozmiar];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP, unsigned int Rozmiar= 100
class Stos {
TYP
Tab[Rozmiar];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Przykład szablonu stosu
template < typename TYP, unsigned int Rozmiar= 100
class Stos {
TYP
Tab[Rozmiar];
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
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Plan prezentacji
1
Konstruktory i operatory domyślne
Klasy z polami referencyjnymi
Klasa std::string
2
Szablony
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
3
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Klasa wektor – plik nagłówkowy: wektor.hh
#ifndef WEKTOR HH
#define WEKTOR HH
#include <iostream>
#define ROZMIAR 3
#define TYP
double
class Wektor {
TYP Wsp[ ROZMIAR ];
public :
Wektor( );
TYP operator [ ] (int Ind) const { return
{ return
TYP& operator [ ] (int Ind)
};
std::ostream & operator
std::istream & operator
#endif
<<
>>
Wsp[Ind]; }
Wsp[Ind]; }
(std::ostream & StrmWy, const Wektor & Wek);
(std::istream & StrmWe, Wektor & Wek);
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Klasa wektor – plik modułu: wektor.cpp
#include ”wektor.hh”
using namespace std;
Wektor::Wektor( )
{
for (int Ind = 0; Ind
}
< ROZMIAR; ++Ind)
Tab[Ind] = 0;
ostream & operator
{
...
}
<<
(ostream & StrmWy, const Wektor & Wek)
istream & operator
{
...
}
>>
(istream & StrmWe, Wektor & Wek)
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Klasa wektor – plik nagłówkowy: wektor.hh
#ifndef WEKTOR HH
#define WEKTOR HH
#include <iostream>
template <typename Typ, int Rozmiar>
class Wektor {
private :
Typ Wsp[ Rozmiar ];
public :
Wektor();
Typ operator [ ] (unsigned int Ind) const { return Wsp[Ind]; }
{ return Wsp[Ind]; }
Typ& operator [ ] (unsigned int Ind)
};
#endif
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Klasa wektor – plik nagłówkowy: wektor.hh
...
template <typename Typ, int Rozmiar>
class Wektor {
private :
Typ Wsp[ Rozmiar ];
public :
Wektor();
Typ operator [ ] (unsigned int Ind) const { return Wsp[Ind]; }
Typ& operator [ ] (unsigned int Ind)
{ return Wsp[Ind]; }
};
template <typename Typ, int Rozmiar>
std::ostream & operator << (std::ostream & StrmWy, Wektor<Typ,Rozmiar>& Wek)
{ ...
}
template <typename Typ, int Rozmiar>
std::istream & operator >> (std::istream & StrmWe, Wektor<Typ,Rozmiar>& Wek)
{ ...
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Klasa wektor – plik nagłówkowy: wektor.hh
...
template <typename Typ, int Rozmiar>
class Wektor {
...
public :
Wektor();
...
};
template <typename Typ, int Rozmiar>
Wektor<Typ,Rozmiar>::Wektor()
{
for (int Ind = 0; Ind < Rozmiar; ++Ind) Wsp[Ind] = 0;
}
...
template <typename Typ, int Rozmiar>
std::istream & operator >> (std::istream & StrmWe, Wektor<Typ,Rozmiar>& Wek)
{ ...
}
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Klasa wektor – plik nagłówkowy: wektor.hh
...
inline
bool Wczytaj OkreslonyZnak(std::istream &StrmWe, const char Wzorzec)
{
...
}
template <typename Typ>
bool Wczytaj Liczbe OkreslonyZnak(std::istream & StrmWe, Typ & Liczba, const char Wzorzec)
{
...
}
template <typename Typ, int Rozmiar>
std::istream & operator >> (std::istream & StrmWe, Wektor<Typ,Rozmiar>& Wek)
{ ...
}
...
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Plan prezentacji
1
Konstruktory i operatory domyślne
Klasy z polami referencyjnymi
Klasa std::string
2
Szablony
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
3
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Szablon klasy Wektor w UML
template <typename Typ, int Rozmiar>
class Wektor {
private :
Typ Wsp[ Rozmiar ];
public :
Wektor();
Typ operator [ ] (unsigned int Ind) const { return Wsp[Ind]; }
Typ& operator [ ] (unsigned int Ind)
{ return Wsp[Ind]; }
};
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
Klasa będąca instancją szablonu
template <typename Typ, int Rozmiar>
class Wektor {
private :
Typ Wsp[ Rozmiar ];
public :
Wektor();
Typ operator [ ] (unsigned int Ind) const { return Wsp[Ind]; }
Typ& operator [ ] (unsigned int Ind)
{ return Wsp[Ind]; }
};
Wektor<double, 3>
W;
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Plan prezentacji
1
Konstruktory i operatory domyślne
Klasy z polami referencyjnymi
Klasa std::string
2
Szablony
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
3
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Klasa będąca instancją szablonu
vector
deque
–
–
list
forward list
array
string
–
–
–
–
dynamiczna tablica,
kolejka wspierająca swobodny dostęp do dowolnego elementu,
lita dwukierukowa,
lista jednokierunkowa,
tablica o stałym rozmiarze,
kontener znakowy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Plan prezentacji
1
Konstruktory i operatory domyślne
Klasy z polami referencyjnymi
Klasa std::string
2
Szablony
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
3
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Klasa będąca instancją szablonu
vec.front( )
vec.back( )
vec[ i ]
vec.at( i )
–
–
–
–
zwraca pierwszy element,
zwraca ostatni element,
zwraca i-ty element (zakres nie jest sprawdzany),
zwraca i-ty element (zakres jest sprawdzany, w przypadku błędu
zgłaszany jest wyjątek out of range),
vec.push back(e)
–
vec.pop back( )
–
dodaje na koniec kopie elementu e (może powodowaæ realokację
pamięci),
usuwa ostatni element i nie zwraca go (może powodowaæ realokację
pamięci),
vec.size( )
vec.max size( )
–
–
zwraca aktualną liczbę elementów,
zwraca największą możliwą ilość elementów jaką można zaalokować,
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Klasa będąca instancją szablonu
vec.begin( )
vec.end( )
vec.rbegin( )
–
–
–
vec.rend( )
–
zwraca iterator wskazujący na pierwszy element,
zwraca iterator wskazujący na pozycję za ostatnim elementem,
zwraca iterator dla iteracji odwrotnej wskazujący na ostatni element,
zwraca iterator dla iteracji odwrotnej wskazujący na pozycję przed
pierwszym elementem,
std::vector<float> V1(6);
float zm;
for (int i=0; i < V1.size(); i++) V1[i] = 13;
for (std::vector<float>::iterator iter = V1.begin(); iter != V1.end(); ++iter) ∗iter = 13
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Plan prezentacji
1
Konstruktory i operatory domyślne
Klasy z polami referencyjnymi
Klasa std::string
2
Szablony
Szablony funkcji – Podstawowa idea
Szablony klas
Od klasy do szablonu – klasa Wektor
Reprezentacja szablonów w UML
3
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Zbiór punktów
struct Wektor { int x, y; };
class ZbiorPunktow {
public :
...
private :
unsigned int Rozmiar;
Wektor
∗ wPunkty;
...
};
...
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Obiekt z dynamiczną tablicą elementów
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Przeglądanie tablicy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Przeglądanie tablicy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Przeglądanie tablicy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Przeglądanie tablicy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Przeglądanie tablicy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Przeglądanie tablicy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Przeglądanie tablicy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Przeglądanie tablicy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Przeglądanie tablicy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Przeglądanie tablicy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Przeglądanie tablicy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Przeglądanie tablicy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Przeglądanie tablicy
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Kontentery o różnej organizacji
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Kontentery o różnej organizacji
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Kontentery o różnej organizacji
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Iterator – zunifikowane przeglądanie kolekcji elementów
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Iterator – zunifikowane przeglądanie kolekcji elementów
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Iterator – zunifikowane przeglądanie kolekcji elementów
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Szablony o dostępie sekwencyjnym
Szablon std::vector<>
Jak przeglądać kolekcje – idea iteratora
Iterator – zunifikowane przeglądanie kolekcji elementów
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne
Szablony
Wybrane klasy z bilioteki standardowej szablonów (STL)
Koniec prezentacji
Dziękuję za uwagę
Programowanie obiektowe
Szablony, wybrane elementy biblioteki STL

Podobne dokumenty