temat 8

Transkrypt

temat 8
Tematyka wykładów
1.
Wprowadzenie. Klasy – cz. 1
2.
Klasy – cz. 2
3.
4.
5.
6.
7.
8.
Funkcje operatorowe. Wskaźnik this
Dziedziczenie
Polimorfizm i funkcje wirtualne
Szablony
Strumienie
Tworzenie aplikacji w systemie Windows
- Język C++. Programowanie obiektowe
- Klasy i obiekty
- Budowa i deklaracja klasy. Prawa dostępu
- Pola i funkcje składowe
- Konstruktor i destruktor
- Tworzenie obiektów
- Konstruktor kopiujący. Pola tworzone
statycznie i dynamicznie
- Funkcje zaprzyjaźnione
- Składowe statyczne
Szablony
•
•
•
Szablony klas
Szablony funkcji
Kontenery (pojemniki)
Szablony klas
Szablon klasy (klasa wzorcowa), to
klasa uogólniona (klasa sparametryzowana),
która pozwala na definiowanie klas dla różnych
typów danych przechowywanych w polach składowych.
W definicji szablonu klasy, parametrem jest
typ danych pola składowego klasy.
Deklaracja szablonu klasy
template <param1, param2, ...> class nazwa
{
// ciało klasy
};
Parametry opisujące typ danych mają postać:
class nazwa_typu_uogólnionego
Przykład deklaracji szablonu klasy
Nazwa typu uogólnionego
Nazwa szablonu klasy
template <class T> class Tablica
{
// ciało szablonu klasy Tablica
};
Przykład deklaracji szablonu klasy
template <class T> class Tablica
{
public:
Tablica(int n = 10);
~Tablica();
T& operator [] (int i);
// konstruktor
// destruktor
// op. indeksowania
private:
T* t;
// wskaznik na tablice danych typu T
int rozmiar; // rozmiar tablicy
};
Przykład definicji szablonu klasy
// konstruktor
template <class T> Tablica<T>::Tablica(int n)
{
rozmiar = n;
t = new T[rozmiar];
// tablica danych typu T
}
// destruktor
template <class T> Tablica<T>::~Tablica()
{
delete []t;
}
// operator indeksowania
template <class T> T& Tablica<T>::operator [] (int i)
{
return t[i];
}
Przykład użycia szablonu klasy
Konkretyzacja szablonu klasy – następuje w momencie
tworzenia obiektu.
W miejsce parametrów podajemy typ danych
Tablica <float> a(20);
for (int i = 0; i < 20; i++)
{
a[i] = i * 3.14;
cout << a[i] << endl;
}
Tablica <Punkt> pkt(5);
for (int i = 0; i < 5; i++)
{
pkt[i] = Punkt(i, 2*i);
cout << pkt[i] << endl;
}
Tablica <zesp> z();
for (int i = 0; i < 10; i++)
{
z[i] = zesp(i*2, 1);
cout << z[i] << endl;
}
Szablony funkcji
Szablon funkcji, to funkcja uogólniona,
która pozwala na definiowanie funkcji dla różnych
typów danych przetwarzanych przez tę funkcję.
Rodzina funkcji różniących się typem argumentów
i/lub typem zwracanego wyniku.
W definicji szablonu funkcji, parametrem jest
typ danych argumentu funkcji.
Przykład definicji szablonu funkcji
int max(int x, int y)
{
return (x > y) ? x : y;
}
long max(long x, long y)
{
return (x > y) ? x : y;
}
zesp max(zesp x, zesp y)
{
return (x > y) ? x : y;
}
W klasie zesp konieczny operator >
Przykład definicji szablonu funkcji
template <class T> T max ( T& x, T& y )
{
return (x > y) ? x : y;
}
Szablon funkcji może być użyty dla wszystkich typów danych,
pomiędzy którymi zdefiniowana jest relacja większości >
Przykład definicji szablonu funkcji
template <class T> char* porownaj( T obiekt1, T obiekt2)
{
if (obiekt1 = = obiekt2)
return "takie same\n";
else
return "rozne\n";
}
Konkretyzacja szablonu funkcji
Konkretyzacja szablonu funkcji – następuje w momencie
wywołania funkcji.
int
!!
i = 4,
j = 4;
cout << porownaj(i, j);
float x = 3.5,
y = 4.5;
cout << porownaj(x, y);
char
c1 = 'a',
c2 = 'a';
cout << porownaj(c1, c2);
int
*w1 = &i,
*w2 = &i;
cout << porownaj(w1, w2);
zesp
z3(1, 1),
z4(1, 2);
cout << porownaj(z3, z4);
punkt p1(0, 0),
p2(0, 0);
cout << porownaj(p1, p2);
Kontenery (pojemniki)
Kontenery, to klasy sparametryzowane (szablony) służące
do przechowywania i udostępniania danych.
vector
- tablica dynamiczna (dostęp do elementów za pomocą indeksu).
vector<bool> - specjalna wersja kontenera vector , operująca na bitach pamięci.
list
- lista elementów (efektywne wstawianie i usuwanie).
stack
- stos (dostęp tylko do wierzchołka stosu).
queue
- kolejka (wstawianie na końcu, usuwanie z początku).
deque
- kolejka dwukierunkowa (wstawianie i usuwanie z obu końców).
priority queue
set
- kolejka priorytetowa (do operacji na dużych elementach).
- zbiór (brak kolejności elementów, operacje zawierania, dołączania i usuwania).
multiset - kontener set z powtarzającymi się elementami.
bitset
- kontener set ze zoptymalizowanym sposobem przechowyw. wartości binarnych.
map
- mapa (dostęp do wartości poprzez unikatowy klucz).
multimap- mapa (klucz może się powtarzać).
string
- przechowywanie i operacje na łańcuchach znakowych.
Kontener vector
Plik nagłówkowy <vector>
vector<double> x;
// pusta tablica
vector<int> a(10, 0);
// 10-el. zerowych
Wybrane metody klasy vector:
size
- zwraca liczbę elementów w wektorze
insert
- wstawia nowy element przed podaną pozycję
push_back - wstawia nowy element na koniec tablicy
erase
- usuwa element z podanej pozycji
clear
- usuwa wszystkie elementy z wektora.
..... i funkcje implementujące różne algorytmy
(sortowanie, odwracanie kolejności, permutacje itd...)