Szablony funkcji i klas - Instytut Sterowania i Systemów

Transkrypt

Szablony funkcji i klas - Instytut Sterowania i Systemów
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 wektory (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 <? >
class sort {
i n t ∗ wsk ;
public :
void s o r t u j {
}
// . . .
};
i n t main ( ) {
s o r t <i n t , 2 0 , r o s n ą c o > o b i e k t 1 ;
s o r t <i n t , 3 0 , malej ac o > 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 metodę 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 Fibonacciego 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ładowanymi 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 dodawania 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