Uniwersytet Zielonogórski
Wydział Informatyki, Elektrotechniki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych
Informatyka stacjonarne-dzienne pierwszego stopnia z tyt. inżyniera
Laboratorium Programowania Obiektowego
Szablony funkcji i klas
Ćwiczenia
1. Dla zadania znalezienia iloczynu dwóch argumentów:
a) zrealizować szablon funkcji w wersji normalnej i operatorowej,
b) dodać funkcję specjalizowaną działającą dla tablic jednowymiarowych reprezentujących wek- tory (np. 3 elementowe),
c) w punkcie b) wprowadzić domniemany parametr szablonu określający rozmiar tablicy.
2. Zdefiniować szablon klasy umożliwiający przechowywanie tablicy o dowolnym rozmiarze danych dla dowolnego typu wbudowanego. Zdefiniować konstruktory, funkcje sortowania danych, funkcje wyznaczającą indeks elementu podanego jako argument, jeśli element nie istnieje funkcja ma zwrócić wartość -1.
3. Przeanalizować poniższe deklaracje:
int i1;
const int i2=0;
float f1,f2;
template <class T> int fun(T, T*);
template <class T,class U> U fun (T, T*,U);
int fun(int, int*);
int fun(double, double*,double=0.0);
Rozstrzygnąć, która z funkcji zostanie wywołana, gdy w programie pojawia się instrukcja:
a) i1=fun(i2,&i1); b) f1=fun(f2,&f2); c) f1=fun(f2,&f2,0.0); d) i1=fun(i2,&f2);
4. Zdefinuj wszystkie funkcje szablonu sort tak, aby poniższy kod był prawidłowy (instrukcje w main() były prawidłowe).
t e m p l a t e <? >
c l a s s s o r t { i n t ∗ wsk ; p u b l i c :
v o i d s o r t u j { }
// . . . } ;
i n t main ( ) {
s o r t <i n t , 20 , rosnąco > o b i e k t 1 ; s o r t <i n t , 3 0 , malejaco > o b i e k t 1 ; }
Zdefiniować klasę specjalizowaną dla typu char∗
5. Zdefiniować szablon klas, przechowujący wskaźnik do pewnego obiektu. Wyposażyć go w meto- dę show() wyświetlającą wartość tego wskaźnika oraz konstruktor rezerwujący dla niego pamięć.
Pokazać przykładowe deklaracje obiektów wykorzystujących ten szablon.
6. Zrealizować na prostych przykładach dziedziczenie:
a) klasy szablonowej przez zwykłą klasę, b) szablonu klas przez zwykłą klasę,
c) klasy szablonowej przez szablon klas, d) szablonu przez inny szablon,
e) zwykłej klasy przez specjalizowaną klasę szablonową, f) klasy szablonowej przez inną klasę szablonową.
Zadania do samodzielnego wykonania
1. Stworzyć szablon funkcji f ibonacci() umożliwiający wyznaczanie kolejnych elementów ciągu Fibo- nacciego dla różnego typu argumentów (np. long, f loat itp.).
2. Opierając się na szablonie klasy z zadania 2 wyposażonej dodatkowo w funkcje liczenia sumy oraz sumy kwadratów elementów, wyprowadzić dwuwymiarową tablicę liczb dowolnego typu z przełado- wanymi metodami z klasy bazowej. Sprawdzić działanie polimorfizmu dla tych klas.
3. * Zaprojektować szablon klasy przechowującej dane w postaci listy, z metodami dotyczącymi doda- wania oraz usuwania elementu, przeładowanym operatorem [] pozwalającym na pracę z listą tak jak z tablicą i wyświetlaniem zawartości. Ponadto zrealizować metodę znajdującą adres ostatniego elementu na liście w taki sposób, by mogła pracować z dowolnym typem przez nią zwracanym.
Litertura
• Grębosz J.,Symfonia C++ standard, Edition 2000, 2008
• Grębosz J., Pasja C++, Edition 2000, 200
• Stroustrup B., Język C++, Wydawnictwa Naukowo-Techniczne 1994, 2000 i 2002
• Eckel B., Thinking in C++. Edycja polska, Helion , 2002