Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.

Slides:



Advertisements
Podobne prezentacje
C++ wykład 9 ( ) Szablony.
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
C++ wykład 4 ( ) Przeciążanie operatorów.
Język C/C++ Funkcje.
Programowanie obiektowe
Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 4 Wojciech Pieprzyca.
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas. 2 Wzorce Często pojawia się konieczność pisania podobnych funkcji lub klas operujących na argumentach.
Programowanie obiektowe
Programowanie obiektowe
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 3 Wojciech Pieprzyca.
Wzorce.
Język ANSI C Funkcje Wykład: Programowanie komputerów
Prowadzący: mgr inż. Elżbieta Majka
Static, const, volatile.
Dziedziczenie. Po co nam dziedziczenie? class osoba { char * imie, char * imie, * nazwisko; * nazwisko;public: void wypisz_imie(); void wypisz_imie();
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 6: Tablice, rekordy, zbiory.
ODE Triggery. Wstęp n Triggery są trójką zdarzenie-warunek-akcja (event-condition- action). n Zdarzenia mogą być proste lub złożone, co zostanie omówione.
ODE Informacje wstępne. Pojęcia podstawowe n Obiektowa baza danych u język komunikacji u ziarnistość obiektów u identyfikacja obiektów n Transakcja -
Struktury.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Ogólne jednostki programowe 1
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
Podstawy programowania PP – WYK3 Wojciech Pieprzyca.
Podstawy programowania PP – LAB4 Wojciech Pieprzyca.
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Metody Programowania Wykład
Programowanie obiektowe III rok EiT
Wskaźnik może wskazywać na obiekt dowolnego typu. int * w; char * Wsk_Znak; float * Wskaz_Float; Przykład: Wskaźnik przechowuje adres obiektu wskazanego.
Podstawy programowania II
Podstawy programowania
Jerzy F. Kotowski1 Informatyka I Wykład 8 STRUKTURA PROGRAMU n Funkcje n Klasy zmiennych n Projekt.
Programowanie obiektowe III rok EiT
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład IX.
Programowanie obiektowe III rok EiT
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
Programowanie obiektowe
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Programowanie strukturalne i obiektowe
Kurs języka C++ – wykład 3 ( )
Kurs języka C++ – wykład 9 ( )
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
K URS JĘZYKA C++ – WYKŁAD 10 ( ) Szablony.
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++ Przeładowanie operatorów Robert Nowak.
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 2 ( ) Klasy i obiekty.
Partnerstwo dla Przyszłości 1 Lekcja 27 Klasy i obiekty.
Wykład 5 Klasa Vec i jej operatory 1.Kategorie operatorów 2.Operatory ogólne - przykłady 3.Operatory specjalne [ ], ( ) oraz –> 4.Operatory new i delete.
Partnerstwo dla Przyszłości 1 Lekcja 28 Dziedziczenie i rodzaje dziedziczenia.
Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Programowanie Obiektowe – Wykład 6
Kurs języka C++ – wykład 3 ( )
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
(według:
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie obiektowe Wykład 10
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe
Programowanie obiektowe
Zapis prezentacji:

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 2/15 Parametry domyślne Definiując szablon możemy dla danego parametru typu ustalić wartość domyślną, tzn. wartość, którą dany parametr osiągnie, gdy podczas konkretyzacji wartość typu zostanie pominięta. template class A { … }; Jeżeli podczas konkretyzacji szablonu A, nie wskażemy wartości dla parametru typu T2, zostanie użyty typ char. A a1; //T1 = int, T2 = double A a2; //T1 = char*, T2 = char template class B { … }; B b1; // T = string B<> b2;// T = int

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 3/15 Wartości domyślne w szablonach funkcji Definiując szablon klasy możemy korzystać zarówno z wartości domyślnych dla parametrów typu jaki i wartości domyślnych dla argumentów wyrażeń (nie-typów). Definiując szablon funkcji możemy używać wartości domyślne co najwyżej dla argumentów wyrażeń.

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 4/15 Niejawna konkretyzacja szablonów W przypadku, gdy na podstawie szablonu deklarujemy obiekt, określając żądany typ, korzystamy z niejawnej konkretyzacji szablonu. W takim przypadku kompilator uszczegóławia definicję klasy według schematu zadanego przez szablon tej klasy. A a; niejawna konkretyzacja szablonu Ponadto kompilator zastosuje niejawną konkretyzację wówczas, gdy zostanie użyty obiekt konkretyzowanej klasy: A * wsk; obiekt klasy jeszcze nie jest użyty, więc brak konkretyzacji wsk = new A (); obiekt klasy A jest tworzony, więc musi nastąpić konkretyzacja szablonu

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 5/15 Jawna konkretyzacja szablonów Jawna konkretyzacja zachodzi wówczas, gdy podczas deklaracji klasy użyte jest słowo kluczowe template oraz podane są dokładne wartości typów. Definicja takiej klasy jest tworzona nawet jeśli nie tworzony jest obiekt tej klasy. Np.: template class A ; //możemy teraz korzystać z klasy A

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 6/15 Jawne uszczegółowienie szablonu Jawne uszczegółowienie polega na utworzeniu szablonu dla konkretnej wartości typu lub typów. Ma to zastosowanie w przypadku, gdy dla konkretnego typu chcemy zmienić działanie szablonu. template class LiczbaTP { private: T x; public: LiczbaTP(T _x) : x(_x) {} T dodaj(LiczbaTP L); }; template T LiczbaTP ::dodaj(LiczbaTP L) { return x + L.x; }

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 7/15 Jawne uszczegółowienie szablonu c.d. template <> class LiczbaTP { private: char x; public: LiczbaTP(char _x) : x(_x) {} char* dodaj(LiczbaTP L); bool czyWiekszaOd(const LiczbaTP L); }; char* LiczbaTP ::dodaj(LiczbaTP L) { char* trzy = new char[3]; trzy[0] = x; trzy[1] = L.x; trzy[2] = '\0'; return trzy; } LiczbaTP L1(2), L1(5); //użyto definicji ogólnej szablonu cout << L1.dodaj(L2); //wypisze 7 LiczbaTP C1(‘a’), C2(‘b’); //użyto definicji uszczegółowionej cout << C1.dodaj(C2); //wypisze „ab”

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 8/15 Uszczegółowienie częściowe Stosując tego typu uszczegółowienie możemy skonkretyzować tylko niektóre parametry typu. Zatem definicja takiego szablonu tylko po części ulega ograniczeniu do konkretnego typu. template class A { szablon ogólny … }; template class A { parametr T1 został uszczegółowiony … do parametru int }; A a1; //użyto ogólny szablon A A a2; //użyto częściowego uszczegółowienia A A a3; //użyto jawnego uszczegółowienia A template <> class A { parametry T1, T2 zostały uszczegółowione … do parametru int };

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 9/15 Zagnieżdżanie szablonów W ramach definicji jednego szablonu dopuszczalne jest definiowanie wewnętrznego szablonu składowego. template class Para { private: template class Elem { private: V x; public: Elem(V _x = 0) {x=_x;} V get() const {return V;} }; Elem e1; Elem e2; public: Para(U u, int i) : e1(i), e2(u) {} … };

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 10/15 Szablony a funkcje zaprzyjaźnione Definiując szablon, możemy stosować funkcje zaprzyjaźnione. Możemy wtedy wyróżnić następujące przypadki: Nieszablonowe funkcje zaprzyjaźnione, czyli takie, które nie są zależne od parametru typu. Funkcje zaprzyjaźnione, których typ argumentów jest zależny od szablonu. Funkcje zaprzyjaźnione szablonowe, ale takie, które nie są związane z szablonem.

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 11/15 Nieszablonowe funkcje zaprzyjaźnione template class A { private: int x; public: A(); friend void f(); }; Funkcja f jest funkcją zaprzyjaźnioną z klasą będącą dowolną konkretyzacją szablonu A. Np. f jest zaprzyjaźniona z następującymi klasami: A, A, A, A, A, …. W powyższej deklaracji funkcji f brak jest argumentów. Jaki jest zatem sens zaprzyjaźniać tego typu funkcje z klasą?

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 12/15 Nieszablonowe funkcje zaprzyjaźnione z argumentami szablonowymi template class A { private: int x; public: A(); friend void f(A &); }; źle!!! W celu przekazania do argumentu funkcji klasę szablonową, należy wskazać jej uszczegółowienie. friend void f(A &); Ponieważ powyższa funkcja nie jest szablonowa, możemy zatem podać definicję tylko dla konkretnych typów. void f(A & a) { cout << a.x + 1; } void f(A & a) { cout << (int)a.x; }

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 13/15 Szablonowe funkcje zaprzyjaźnione związane z szablonem W celu zdefiniowania szablonowej funkcji zaprzyjaźnionej związanej z szablonem należy w pierwszej kolejności przed definicją klasy ją zadeklarować. Następnie deklarujemy szablon wraz z wcześniej zadeklarowaną funkcją zaprzyjaźnioną. template void f(T &); template void g(); template class PrzykladTP { private: TYP x; static int i; public: friend void f<>(PrzykladTP &); friend void g (); }; template int PrzykladTP ::i=0; template void f(T & t) { cout << t.x; } template void g() { cout ::i; }

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 14/15 Szablonowe funkcje zaprzyjaźnione niezwiązane z szablonem template class A { private: T x; public: A(T _x) : x(_x) {} template friend void f(U &); }; template void f(U & u) { cout << u.x << endl; } To takie funkcje, których każde uszczegółowienie jest funkcją zaprzyjaźnioną dla każdego uszczegółowienia danej klasy. int main() { A a1(2.3); A a2(‘h’); f(a1); f(a2); return 0; }

Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 15/15 Wesołych Świąt i Szczęśliwego Nowego Roku!!!