Pracę wykonali: Rafał Chmielorz Michał Sporek Jan Nowik

Slides:



Advertisements
Podobne prezentacje
Ćwiczenie (1) Dostosuj poniższy program do potrzeb zdefiniowanych w treści programu zaliczeniowego: #include void dodaj(){}; void edytuj(){}; void usun(){};
Advertisements

Język C/C++ Funkcje.
Wstęp do programowania
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.
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas Tablica asocjacyjna Składowe statyczne.
Zmienne i Typy.
Wzorce.
Język ANSI C Funkcje Wykład: Programowanie komputerów
Prowadzący: mgr inż. Elżbieta Majka
Filip Andrzejewski Remigiusz Chiluta
Języki programowania C++
argumenty wiersza poleceń: getopt
Funkcje Modularyzacja : program główny , funkcje Funkcje :
Standard Template Library
Metody numeryczne Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Język C – Część II Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Wskaźniki. Definiowanie wskaźników Wskaźnik może wskazywać na obiekt dowolnego typu. int * w; char * Wsk_Znak; float * Wskaz_Real; Przykłady: Wskaźnik.
Tablice.
Podstawy programowania PP – WYK3 Wojciech Pieprzyca.
Podstawy programowania PP – WYK2 Wojciech Pieprzyca.
Podstawy programowania PP – LAB4 Wojciech Pieprzyca.
#include #include main () { cout
Programowanie obiektowe W2
Polsko – Japońska Wyższa Szkoła Technik Komputerowych

Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Podstawy informatyki (4)
Podstawy programowania w języku C i C++
Podstawy programowania
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
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.
Wczytywanie danych z klawiatury, komentarze, zmienne.
Podstawy programowania w języku C i C++
Informatyka I Wykład 10 WSKAŹNIKI I ADRESY Jerzy F. Kotowski.
Przekazywanie argumentów
Jerzy F. Kotowski1 Informatyka I Wykład 8 STRUKTURA PROGRAMU n Funkcje n Klasy zmiennych n Projekt.
Programowanie strukturalne i obiektowe
Jerzy F. Kotowski1 Informatyka I Wykład 14 DEKLARATORY.
Algorytmy rekurencyjne - przykład
Programowanie strukturalne i obiektowe
Instrukcja for. Instrukcja warunkowa mgr inż. Agata Pacek.
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Programowanie obiektowe 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Programowanie obiektowe 2013/2014
PWSZ Gniezno // codefly 2009 Łukasz Tomczak
Składnia pętli do … while do instrukcja while (wyrażenie); gdzie: instrukcja – instrukcja pojedyncza lub blok instrukcji wyrażenie – wyrażenie przyjmujące.
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++
Funkcje w C++ Funkcja – wydzielony fragment kodu użyty w programie (raz lub więcej razy) spełniający określone zadanie, np. obliczenie średniej ocen.
Programowanie strukturalne i obiektowe C++
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Programowanie strukturalne i obiektowe C++ Powtórzenie wiadomości z C++ Robert Nowak.
Przeładowanie funkcji. Dotychczas wiedzieliśmy, że: w danym zakresie ważności może być tylko jedna funkcja o danej nazwie. Kompilator języka C++ daje.
Paweł Starzyk Obiektowe metody projektowania systemów
Funkcje - rekurencja Zajęcia 8. Funkcje - definicja Ogólna postać funkcji w C++: typZwracany nazwaFunkcji(listaParametrówWejściowychFunkcji) { ciało funkcji.
Podstawy informatyki Funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Switch. Instrukcja switch Składnia instrukcji: switch (wyrażenie){ case wyrażenie_stałe1: ciąg instrukcji dla wariantu 1; break; case wyrażenie_stałe2:
Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty.
Podstawy informatyki Operatory rzutowania Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały.
STOS. STL (ang. Standard Template Library) jest to biblioteka zawierająca algorytmy, pojemniki, iteratory oraz inne konstrukcje w formie szablonów, gotowe.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
PODSTAWY INFORMATYKI Wykład 4.
Instrukcje wyboru.
Zapis prezentacji:

Pracę wykonali: Rafał Chmielorz Michał Sporek Jan Nowik Szablony (wzorce) Pracę wykonali: Rafał Chmielorz Michał Sporek Jan Nowik

Szablon funkcji Po co stosować szablon funkcji ? Mamy funkcje która zwraca większa z dwóch liczb int wieksza(int a , int b) {return (a > b) ? a : b ; } Teraz chcąc wywołać tą funkcję np. dla danych typu float, double … będziemy musieli napisać kolejne funkcje zmieniając jedynie parametry Stosując szablon funkcji problem znika Definicja szablonu dla naszej funkcji template<class jakis_typ>jakis_typ wieksza(jakis_typ a , jakis_typ b) Zobaczmy jak wygląda to w praktyce

# include <iostream.h> template<class jakis_typ> jakis_typ wieksza(jakis_typ a , jakis_typ b) {return (a > b) ? a : b ; } //******************************************************** main() { int a=44 , b=88 ; double x=12.4 , y=67.43; unsigned long la=98765 , lb=4567 ; cout<<"wiekszy int :"<<wieksza(a,b)<<endl; cout<<"wiekszy double :"<<wieksza(x,y)<<endl; cout<<"wiekszy long :"<<wieksza(la,lb)<<endl; } Po wykonaniu programu na ekranie zobaczymy wiekszy int : 88 wiekszy double : 67.43 wiekszy long : 98765

Przeładowanie szablonów template<class T> T wieksza(T a , T b) template<class T> T wieksza(T a , T b , int c) poprawnie template<class T> T wieksza(T a , int b) błąd Powstał konflikt Chcąc wywołać funkcję wieksza(10,45) kompilator nie wie o który szablon nam chodzi i w rezultacie zaprotestuje

Funkcje specjalizowane Mając nasz szablon template<class jakis_typ> jakis_typ wieksza(jakis_typ a , jakis_typ b) {return (a > b) ? a : b ; } wywołamy funkcję char string1[30] = {„tak”}; char string2[30] = {„Czy to jest dobrze ?”}; cout<<wieksza(string1,string2); W rezultacie funkcja wieksza zwróci wskaźnik o większej wartości a nie dłuższy string Co robić w takiej sytuacji !!! Korzystać z funkcji specjalizowanej

# include <iostream.h> # include <string.h> template<class jakis_typ> jakis_typ wieksza(jakis_typ a , jakis_typ b) {return (a > b) ? a : b ; } char *wieksza(char* a , char* b) { if(strlen(a)>strlen(b)) return a; else return b; } //*************************************************** main() { int a=44 , b=88 ; char string1[30] = {"tak"}; char string2[30] = {"To jest dobrze "}; cout<<"wiekszy int : "<<wieksza(a,b)<<endl; cout<<"wiekszy string: "<<wieksza(string1,string2); Wynik działania programu wiekszy int : 88; wiekszy string : To jest dobrze

Szablon klas Klasa do chowania zmiennych typu int class schowek { int sejf; public: void schowaj(int x) {sejf=x;} oddaj() {return sejf; } Klasa do chowania zmiennych typu char class schowek_na_chr { char sejf; void schowaj(char x) {sejf=x;}

Teraz zobaczmy na przykładzie jak można zrobić szablon klas #include<iostream.h> template<class jakis_typ>class schowek { jakis_typ sejf; public: void schowaj(jakis_typ x) {sejf=x;} oddaj() {return sejf; } } //********************************* main() {schowek<int> czerwony ; schowek<char> znakowy ; czerwony.schowaj(7); int m ; m=czerwony.oddaj(); znakowy.schowaj('T'); cout<<"schowany int :"<<m; cout<<"schowany znak :"<<znakowy.oddaj(); return 0; Wynik działania: schowany int : 7 schowany znak : T

Specjalizowana klasa szablonowa #include <iostream.h> #include <string.h> template<class jakis_typ> class akmulator { jakis_typ zloze; public: akmulator() : zloze (0) {}; void przyjm(jakis_typ co) {zloze=zloze+co ;} jakis_typ rozladunek() ; }; template<class jakis_typ> jakis_typ akmulator<jakis_typ>::rozladunek() { jakis_typ pomocnik=zloze; zloze=0; return pomocnik; } //akmulator<char*> mick //blad !!! //***************** specjalizowana klasa*************************** //nastepny slajd

class akmulator<char*>//******* specjalizowana klasa******************* { char* zloze; public: akmulator<char*>(); void przyjm(char* nowy); char* rozladunek() { char*chwila=zloze; zloze=0; return chwila; } };//****************************************** akmulator<char*>::akmulator(): zloze(NULL){} //********************************************* void akmulator<char*>::przyjm(char* nowy) { if(!zloze) {zloze=new char[strlen(nowy)+1]; zloze[0]=NULL; else {char *stary=zloze; zloze=new char[strlen(stary)+strlen(nowy)+1]; strcpy(zloze,stary); delete stary; } strcat(zloze,nowy); };

main() { akmulator<float> kasa; kasa.przyjm(400.00); //styczen float przelew=50.50; kasa.przyjm(przelew); cout<<"utarg miesieczny w styczniu = "<<kasa.rozladunek()<<endl ; akmulator<char*>wysp; //Wyspianski miewa natchnienia dwa razy dziennie //rano wysp.przyjm("Przecierz już dawno się wyzbylem marzen"); char *zapisek_ranny=wysp.rozladunek(); cout<<"***Rano Wyspianski ulozyl:***\n"<<zapisek_ranny; //wieczorem wysp.przyjm("Zyje by zwalo się ze zyje"); char *zapisek_wieczorny=wysp.rozladunek(); cout<<"***Wieczorem Wyspianski ulozyl:***\n"<<zapisek_wieczorny; return 0;} Efekt działania Utarg miesieczny w styczniu = 450.5 ***Rano Wyspianski ulozyl*** Przecierz już dawno wyzbylem się marzen ***Wieczorem Wyspianski ulozyl*** Zyle by zwalosie ze zyje

Przyjaźń a szablony klas Wystąpi tu szablon klas deklarujący przyjaźń z -funkcją -klasą #include <iostream.h> #include <string.h> //class poletko; template<int stala> class poletko { int rola[stala]; poletko(){cout<<"Prywatny konstruktor";} void funpryw() { cout<<"Prywatna funkcja poletka"<<stala<<endl;} // ta klasa będzie przyjacielem wszystkich klas szablonowych tworzonych z szablonu poletko friend class rolnik; // ta funkcja będzie przyjacielem wszystkich klas szablonowych tworzonych z szablonu poletko friend void siew(); };

class rolnik {public: void rok() { cout<<"Dziala zaprzyjazniony rolnik:"<<endl; poletko<2> zielone; zielone.rola[0]=6; zielone.funpryw(); poletko<10> duze ; duze.funpryw(); } }; void siew() { cout<<"Dziala funkcja zaprzyjaznina siew\n"; poletko<1> doswiadzczalne; doswiadzczalne.funpryw(); main() { rolnik boryna; boryna.rok(); siew(); return 0;

Ekran po wykonaniu programu Dziala zaprzyjazniny rolnik: Prywatny konstruktor Prywatna funkcja poletka 2 Prywatny konstrultor Prywatna funkcja poletka 10 Dziala zaprzyjazniona funkcja siew Prywatna funkcja poletka 1