Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Podobne dokumenty
Programowanie i struktury danych

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Szablony funkcji i szablony klas

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

STL: Lekcja 1&2. Filozofia STL

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Wprowadzenie do szablonów szablony funkcji

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Wprowadzenie do szablonów szablony funkcji

Język C++ wykład VIII

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Wzorce funkcji (szablony)

Wstęp do Programowania 2

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Szablony klas, zastosowanie szablonów w programach

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Paradygmaty programowania

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Wprowadzenie do szablonów klas

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

PARADYGMATY PROGRAMOWANIA Wykład 3

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

DYNAMICZNE PRZYDZIELANIE PAMIECI

Wstęp do programowania

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Szablon klasy std::vector

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Programowanie Obiektowew języku C++ Zadania L4

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Szablony. Szablony funkcji

Szablony funkcji i klas (templates)

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wstęp do programowania

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Operacje wejścia/wyjścia (odsłona druga) - pliki

Stos liczb całkowitych

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

dr inż. Jarosław Forenc

Podstawy programowania skrót z wykładów:

Mechanizm dziedziczenia

Plik klasy. h deklaracje klas

Część 4 życie programu

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Wstęp do Programowania 2

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

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Programowanie komputerowe. Zajęcia 4

Programowanie w języku C++

Programowanie 2. Język C++. Wykład 3.

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

C++ Przeładowanie operatorów i wzorce w klasach

Programowanie w języku C++

Jak Windows zarządza pamięcią?

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Szablon klasy std::list

Projektowanie klas c.d. Projektowanie klas przykład

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Operatory na rzecz typu TString

Podstawy Programowania Obiektowego

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

dr inż. Jarosław Forenc

Programowanie - wykład 4

Techniki Programowania wskaźniki

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Program 14. #include <iostream> #include <ctime> using namespace std;

Programowanie Procedurale

I - Microsoft Visual Studio C++

#include "stdafx.h" #include <iostream> #include "windows.h" using namespace std;

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

C++ wprowadzanie zmiennych

Podstawy Programowania Podstawowa składnia języka C++

Programowanie obiektowe. Wykład 5. C++: szablony

1,3,4,2,3,4,0,1,4,5,0. Wówczas największa suma trzech kolejnych liczb (zaznaczone na czerwono) wynosi:

Listy powiązane zorientowane obiektowo

Struktury Struktura polami struct struct struct struct

Algorytmy i Struktury Danych. Anna Paszyńska

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

Transkrypt:

Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki

int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b) { return (a > b? a : b); double getmax (double a, double b) { return (a > b? a : b); 2

3

#include <iostream> using namespace std; template <class T> T getmax (T a, T b) { T result; result = (a > b)? a : b; return (result); int main () { int i = 5, j = 6, k; long l = 10, m = 5, n; k = GetMax<int>(i, j); n = GetMax<long>(l, m); cout << k << endl; cout << n << endl; return 0; 4

template <class identifier> function_declaration; template <typename identifier> function_declaration; Kompilator generuje funkcję wzorcową na podstawie typów argumentów wejściowych tej funkcji: int main () { int i = 5, j = 6, k; long l = 10, m = 5, n; k = GetMax(i, j); n = GetMax(l, m); cout << k << endl; cout << n << endl; return 0; 5

Można również definiować wzorce wykorzystujące więcej niż jeden typ: template <class T, class U> T GetMin (T a, U b) { return (a < b? a : b); int i,j; long l; i = GetMin<int, long> (j, l); i = GetMin (j, l); Uwaga: w liście parametrów szablonu każdy typ występuje tylko raz Uwaga: nie mogą istnieć dwa lub więcej szablony funkcji różniące się między sobą jedynie typem wyznaczanej wartości 6

Nazwa wzorca klasy musi być unikalna w całym programie Wzorzec klasy musi być zdefiniowany w zakresie globalnym Nie można zagnieżdżać definicji wzorców template <class T> class nazwa_klasy{ T zmienna1, zmienna2; nazwa_klasy (...); //konstruktor ~nazwa_klasy (...); //destruktor T metoda1(...); void metoda2(t zmienna3);... ; 7

Wzorzec klasy o nazwie tablica umożliwiający przechowywanie tablicy liczb dowolnego typu. Rozmiar tablicy jest podawany w momencie tworzenia obiektu tej klasy. Każda tablica przechowuje również swój zadany rozmiar. template <class typ> class tablica{ typ* dane; int rozmiar; public: tablica(int p_rozmiar) : rozmiar(p_rozmiar){ dane = new typ [p_rozmiar]; ; ~tablica(){ delete [] dane; ; void wyswietl(){ for (int i=0; i<rozmiar; i++) cout<<"dane["<<i<<"]="<<*(dane+i)<<endl; ; ; 8

template <class typ> class tablica{ typ* dane; int rozmiar; public: tablica(int p_rozmiar); void wyswietl(); ; template <class typ> void tablica<typ>::wyswietl(){ for(int i=0; i<rozmiar; i++){ cout<<"dane["<<i<<"]= "; cout <<*(dane+i)<<endl; ; template <class typ> tablica<typ>::tablica(int p_rozmiar){ rozmiar = p_rozmiar; dane = new typ [p_rozmiar]; ; 9

template <class T> class mycontainer { T element; public: mycontainer (T arg) { element = arg; T increase () { return ++element; ; template <> class mycontainer <char> { char element; public: mycontainer (char arg) { element = arg; char uppercase () { if ((element >= 'a') && (element <= 'z')) element += 'A' - 'a'; return element; ; 10

int main () { mycontainer <int> myint (7); mycontainer <char> mychar ('j'); cout << myint.increase() << endl; cout << mychar.uppercase() << endl; return 0; Ogólna składnia: template <typy niespecjalizowane> class mycontainer <specjalizacje typów/wartości> {... ; 11

#include <iostream> using namespace std; template <class T, int N> class mysequence { T memblock [N]; public: void setmember (int x, T value); T getmember (int x); ; int main () { mysequence<int, 5> myints; mysequence<double, 5> myfloats; myints.setmember (0, 100); myfloats.setmember (3, 3.1416); cout << myints.getmember(0); cout << myfloats.getmember(3); return 0; template <class T, int N> void mysequence<t,n>::setmember (int x, T value) { memblock[x] = value; template <class T, int N> T mysequence<t,n>::getmember (int x){ return memblock[x]; 12

Biblioteka STL zawiera przydatną klasę vector, która działa jak samo rozszerzalna tablica. Poniżej przedstawiono podstawowe operacje, które można wykonać na obiektach tej klasy. Operacja unsigned int size(); push_back(type element); bool empty(); void clear(); type at(int n); = == [] Opis Zwraca liczbę elementów znajdujących się w wektorze Dodaje element na koniec wektora Zwraca true jeśli wektor jest pusty Usuwa wszystkie elementy z wektora Zwraca element na n-tej pozycji wektora (sprawdzanie zakresu) Zamienia zawartość wektora na zawartość przypisywanego wektora Wynik porównania dwóch wektorów element po elemencie Bezpośredni dostęp do dowolnej pozycji wektora. Działanie podobne do tego znanego z tablic. Brak sprawdzania zakresu! 13

#include <iostream> #include <vector> using namespace std; int main() { vector <int> example; example.push_back(3); example.push_back(10); example.push_back(33); //Wektor typu int //Dodaje 3 do wektora //Dodaje 10 na koniec wektora //Dodaje 33 na koniec wektora for (int x=0; x<example.size(); x++) { cout << example[x] << " "; //Zwraca: 3 10 33 if(!example.empty()) example.clear(); //Opróżnia wektorvector vector <int> another_vector; //Tworzy nowy wektor typu int another_vector.push_back(10); example.push_back(10); if(example == another_vector) //Sprawdzanie operatora == example.push_back(20); for (int y = 0; y < example.size(); y++) { cout << example[y] << " "; //Zwraca 10 20 return 0; 14

http://www.cplusplus.com/doc/tutorial/templates/ http://www.cprogramming.com/tutorial/stl/vector.html 15