STL: implementowanie algorytmów. STL: implementowanie algorytmów. STL: implementowanie algorytmów. STL: implementowanie algorytmów
|
|
- Danuta Jarosz
- 6 lat temu
- Przeglądów:
Transkrypt
1 Algorytm przeszukiwania wszerz Przeszukiwanie grafu odwiedzenie wszystkich jego wierzchołków w kolejności jak na rysunku obok: Reprezentacja grafu w programie Wierzchołki są identyfikowane przez liczby całkowite. Dla każdego z wierzchołków przechowujemy listy numerów wierzchołków, z którymi jest połączony krawędzią: vector< vector<int> > Algorytm przeszukiwania wszerz Ogólna zasada działania algorytmu: Do przeszukiwania wszerz stosowana jest kolejka FIFO o nazwie Q. 1. Najpierw do Q trafia pierwszy wierzchołek z listy W 2. Następnie jest on wyjmowany z kolejki, po czym trafiają do niej wszystkie węzły sąsiadujące z węzłem początkowym. 3. Następnie ponownie pobieramy kolejny węzeł z kolejki Q i wkładamy do kolejki wszystkie jego wierzchołki sąsiednie (jeszcze nieodwiedzone). Proces jest kontynuowany póki kolejka nie jest pusta Algorytm przeszukiwania wszerz Deklaracje zmiennych: typedef vector<int> vi; typedef vector<vi> vvi; int N; // liczba wierzchołków vvi W; // graf 133 Algorytm przeszukiwania wszerz bool check_graph_connected_bfs() int start_vertex = 0; vi V(N, false); // flagi określające, czy wierzchołek został odwiedzony queue<int> Q; // kolejka FIFO Q.push(start_vertex); // pierwszy węzeł grafu trafia do kolejki V[start_vertex] = true; while(!q.empty()) int i = Q.front(); Q.pop(); // zdejmij element z kolejki for(vi::iterator it = W[i].begin(); it!= W[i].end(); it++) if(!v[*it]) V[*it] = true; Q.push(*it); // dodaj na koniec kolejki return (find(v.begin(), V.end(), 0) == V.end()); UKSW, WMP. SNS, Warszawa 134 Statystyka Moment centralny r-tego stopnia (r-tego rzędu) gdzie: r=1,2,.. - rząd, stopień momentu, poszczególne obserwacje, średnia, n liczba obserwacji. Moment centralny drugiego rzędu - wariancja = 1 Statystyka template<int N, class T> T nthpower(t x) T ret = x; for (int i=1; i < N; ++i) ret *= x; return ret; template<class T, int N> struct SumDiffNthPower T mean_; SumDiffNthPower(T x) : mean_(x) T operator()(t sum, T current) return sum + nthpower<n>(current - mean_);
2 Statystyka template<class T, int N, class Iter_T> T nthmoment(iter_t first, Iter_T last, T mean) size_t cnt = distance(first, last); return accumulate(first, last,t(),sumdiffnthpower<t,n>(mean))/cnt; template<class T, class Iter_T> T computevariance(iter_t first, Iter_T last, T mean) return nthmoment<t, 2, Iter_T>(first, last, mean); void main() // tutaj utworzenie kontenera z danymi size_t cnt = distance(first, last); double sum = accumulate(first, last, 0.0); double mean = sum / cnt; double var = computevariance(first, last, mean); C++: STL Obiekty funkcyjne: funktory, predykaty, adaptory 137 Wprowadzenie Przy okazji prezentacji algorytmów pojawiły się na różnych slajdach gotowe funktory z biblioteki <functional>: std::transform (V.begin(), V.end(), W.begin(), V.begin(), std::plus<int>()); std::cout << std::accumulate (numbers, numbers+3, init, std::minus<int>()); std::cout << std::inner_product(series1,series1+3,series2,init, std::minus<int>(),std::divides<int>()); std::adjacent_difference (val, val+7, result, std::multiplies<int>()); Funktory arytmetyczne plus<typ> wynik = arg1 + arg2 minus<typ> wynik = arg1 - arg2 multiplies<typ> wynik = arg1 * arg2 divides<typ> wynik = arg1 / arg2 modulus<typ> wynik = arg1 % arg2 negate<typ> wynik = - arg argumenty i wynik są tego samego (podanego w deklaracji) typu działają pod warunkiem, że dla typu, dla którego funktor jest konkretyzowany, zdefiniowany jest odpowiedni operator arytmetyczny Predykaty Przy okazji algorytmu sort zaprezentowany został też funktor greater: c1.sort( greater<int>( ) ); argumenty (jeden lub dwa) tego samego (podanego w deklaracji) typu, wynik typu bool, działa pod warunkiem, że dla typu, dla którego funktor jest konkretyzowany, zdefiniowany jest odpowiedni operator relacyjny lub logiczny, Funktory o takich cechach nazywane są predykatami. Predykaty porównania: equal_to<typ> wynik = arg1 == arg2 not_equal_to<typ> wynik = arg1!= arg2 less<typ> wynik = arg1 < arg2 greater<typ> wynik = arg1 > arg2 less_equal<typ> wynik = arg1 <= arg2 greater_equal<typ> wynik = arg1 >= arg
3 Predykaty operacje logiczne: logical_or<typ> wynik = arg1 arg2 logical_and<typ> wynik = arg1 && arg2 logical_not<typ> wynik =! arg Adaptory funktorów Zdarza się, że potrzebujemy funktora, którego nie ma w bibliotece functional, ale jest podobny, który w znacznej części implementuje potrzebną funkcję. Do wykonania brakującej modyfikacji w działaniu można wykorzystać wtedy jeden z gotowych adaptorów. Typy adaptorów: 1. wiążące zmieniają funktor dwuargumentowy w jednoargumentowy, 2. negujące stosowane do predykatów, tworzą predykat obliczający negację pierwotnego, 3. adaptory zwykłych funkcji i metod Adaptory wiążące zmieniają funktor dwuargumentowy w jednoargumentowy bind1st(fun,val) - wiąże pierwszy argument z wartością val bind2nd(fun,val) - wiąże drugi argument z wartością val Przykłady: #1: skalowanie współrzędnych punktu P i zapisanie ich w R: R = P*s: transform(p.begin(), P.end(), R.begin(), bind2nd(multiplies<double>(), s)); Adaptory negujące stosowane do predykatów, tworzą predykat obliczający negację pierwotnego not1(fun) - neguje wynik funktora jednoargumentowy not2(fun) - neguje wynik funktora dwuargumentowy Przykład: Policzenie liczb parzystych w kolekcji v: liczba = count_if(v.begin(),v.end(), not1(bind2nd(modulus<int>(),2))); #2: aby znaleźć w kolekcji elementy o wartości v<7 : bind2nd(less<int>(),7) Adaptory zwykłych funkcji i metod tworzą funktor na podstawie: ptr_fun(fun) - zwykłej funkcji lub metody statycznej mem_fun_ref(fun) - metody (niestatycznej) obiektu mem_fun(fun) - metody obiektu dostępnego przez wskaźnik istnieją jedynie adaptory metod i funkcji jednoargumentowych i dwuargumentowych ponieważ tylko takie są używane w bibliotece STL, jawna zamiana metod na funktory jest niezbędna ponieważ wywołanie metody jest składniowo inne niż zwykłej funkcji (czyli inne niż funktora), jawna zamiana zwykłej funkcji na funktor jest niezbędna aby możliwe było zastosowanie adaptorów wiążących i negujących. 147 Przykład: Mamy funkcję, która dla elementu zwraca informacje, czy należy on do pewnej klasy, czy nie (wartość true lub false). Należy policzyć elementy, które nie należą do tej klasy. bool parzysta(int a) return!(a&1); void main() int tab[] = 2, 5, 4, 9, 12, 3, 8 vector<int> v(tab,tab+sizeof(tab)/sizeof(int)); vector<int>::iterator it; //int liczba = count_if(v.begin(),v.end(),not1(parzysta)); // Źle! int liczba = count_if(v.begin(),v.end(),not1(ptr_fun(parzysta))); 148 3
4 Przykład: Należy policzyć długości słów przechowywanych w wektorze. Przykład: Należy policzyć długości słów przechowywanych w wektorze. vector<string> numbers; // wektor słów vector<string*> numbers; // wektor słów numbers.push_back("raz"); numbers.push_back("dwa"); numbers.push_back("trzy"); numbers.push_back("cztery"); numbers.push_back("raz"); numbers.push_back("dwa"); numbers.push_back("trzy"); numbers.push_back("cztery"); vector <int> lengths (numbers.size()); // wektor długości słów vector <int> lengths (numbers.size()); // wektor długości słów transform (numbers.begin(), numbers.end(), lengths.begin(), mem_fun_ref(&string::length)); transform (numbers.begin(), numbers.end(), lengths.begin(), mem_fun(&string::length)); Adaptory podsumowanie: 1. bind1st(fun,val)(arg) fun(val,arg) 2. bind2nd(fun,val)(arg) fun(arg,val) 3. not1(fun)(arg)!fun(arg) 4. not2(fun)(arg1,arg2)!fun(arg1,arg2) 5. ptr_fun(fun)(arg) fun(arg) 6. ptr_fun(fun)(arg1,arg2) fun(arg1,arg2) 7. mem_fun(fun)(arg) arg->fun() 8. mem_fun(fun)(arg1,arg2) arg1->fun(arg2) 9. mem_fun_ref(fun)(arg) arg.fun() 10. mem_fun_ref(fun)(arg1,arg2) arg1.fun(arg2) Adaptory podsumowanie adaptory funktorów są szablonami funkcji, których argumentami są inne funkcje lub funktory funktory standardowe są szablonami klas, dlatego przy ich użyciu musimy podać parametry szablonu (dla adaptorów jako szablonów funkcji nie musimy) adaptory funktorów rzadko wywołujemy jawnie, zwykle przekazujemy jako parametr do algorytmów, dlatego wywołania z dwoma parami nawiasów praktycznie się nie zdarzają (poza samym kodem biblioteki STL) Tworzenie własnych funktorów definiowane jako publiczne klasy (struktury) pochodne od struktur 1. unary_function jednoargumentowe 2. binary_function dwuargumentowe #include <functional> template <class Arg, class Result> struct unary_function typedef Arg argument_type; typedef Result result_type; template <class Arg1, class Arg2, class Result> struct binary_function typedef Arg1 first_argument_type; typedef Arg2 second_argument_type; typedef Result result_type; Tworzenie własnych funktorów przykład 1 jednoargumentowy, dziedziczy po unary_function template<class TYPE> struct modulo2 : public unary_function<type, void> void operator() (TYPE& x) x = x%2;
5 #include <iostream> #include <algorithm> #include <vector> template<class TYPE> struct modulo2 : public unary_function<type, void> void operator() (TYPE& x) x = x%2; int main(int argc, char *argv[]) int myints[] = 1, 2, 3, 4, 5, 6, 7, 8 vector<int> v(myints,myints+8); cout << "before: "; copy( v.begin(), v.end(), ostream_iterator<int>( cout, " " ) ); cout << endl; for_each( v.begin(), v.end(), modulo2<int>() ); cout << "after : "; copy( v.begin(), v.end(), ostream_iterator<int>( cout, " " ) ); cout << endl; return 0; 155 Tworzenie własnych funktorów przykład 2 jednoargumentowy, dziedziczy po unary_function, przyjmuje w argumentach szablonu informacje potrzebne do poprawnego działania, przyjmijmy, że jest zapisany w pliku Przedzial.h template <class T,T dol, T gora> struct Przedzial: unary_function<t,bool> bool operator()(t x) const return x>=dol && x<=gora; 156 Tworzenie własnych funktorów przykład 2 #include <iostream> #include <vector> #include <algorithm> #include "przedzial.h" using namespace std; void main() int tab[] = 2, 5, 4, 9, 12, 3, 8 vector<int> v(tab,tab+sizeof(tab)/sizeof(int)); int c; c=count_if(v.begin(),v.end(),przedzial<int,5,9>()); cout << c << endl ; Tworzenie własnych funktorów przykład 3 jednoargumentowy, dziedziczy po unary_function, Przyjmuje w konstruktorze i przechowuje w polach informacje potrzebne do poprawnego działania, przyjmijmy, że jest zapisany w pliku Przedzial.h template <class T> class Przedzial: public unary_function<t,bool> T dol, gora; Przedzial(T d, T g) : dol(d), gora(g) bool operator()(t x) const return x>=dol && x<=gora; Tworzenie własnych funktorów przykład 3 #include <iostream> #include <vector> #include <algorithm> #include "przedzial.h" using namespace std; void main() int tab[] = 2, 5, 4, 9, 12, 3, 8 vector<int> v(tab,tab+sizeof(tab)/sizeof(int)); int c; c=count_if(v.begin(),v.end(),przedzial<int>(5,9)); cout << c << endl ; Tworzenie własnych funktorów dziedziczenie funktorów po unary_function i binary_function nie dodaje im żadnej nowej funkcjonalności, jedynym zadaniem dziedziczenia jest nadanie uniwersalnych etykiet (za pomocą typedef) typom danych, jakie są przekazywane do funktora; informacja ta jest wykorzystywana w kodzie biblioteki functional
6 Tworzenie własnych funktorów Przyjmijmy, że mamy funkcję i nie chcemy z niej korzystać poprzez ptr_fun, ale zrobić z niej funktor. Zasada tworzenia funktora z funkcji jest identyczna dla unary_function i binary_function : Krok 1 (początek: Zamieniamy dwuargumentową funkcję na funktor): Przyjmijmy, że mamy funkcję dwuargumentową, która przyjmuje dwie wartości typu string i int i zwraca bool. class MyOtherFunction bool operator() (const string& str, int val) const /* Do something, return a bool. */ Tworzenie własnych funktorów Ponieważ funkcja jest dwuargumentowa, sięgamy do szablonu binary_function, którego nagłówek wygląda następująco: template <typename Param1Type, typename Param2Type, typename ResultType> class binary_function; Krok 2 (ostatni): dodajemy dziedziczenie po binary_function class MyOtherFunction: public binary_function<string, int, bool> bool operator() (const string& str, int val) const /* Do something, return a bool. */ Fabryka obiektów C++: Fabryka obiektów Klasa, której obiekty pośrednicza przy tworzeniu innych obiektów. Pomagają tworzyć obiekty, jeżeli informacja o typie odnosi się do konkretnego typu, znanego w momencie kompilacji, ale forma jest nieodpowiednia dla kompilatora. Fabryka ukrywa przed użytkownikiem mechanizm zamiany identyfikatora na literał dostarczany do operatora new, upraszczając tworzenie obiektów. 164 Klasa bazowa Figure dostarcza identyfikatorów dla klas konkretnych: class Figure enum Type SQUARE, CIRLCE, TRIANGLE virtual void write(ostream& os) const = 0; virtual void read(istream& is) = 0; 165 Klasa pochodna nadpisuje metody wirtualne służące do zapisania obiektu do pliku oraz odczytania z pliku: class Square : public Figure void write(ostream& os) const os << SQUARE; /* zapis pól */ void read(istream& is) /* odczyt pól */ 166 6
7 Podczas odczytu danych z pliku musimy polegać na informacji dostarczanej w trakcie działania, tj. na identyfikatorze obiektu zapisanym w pliku (zapis do pliku zaczyna się od podania identyfikatora, dopiero potem są zapisywane zawartości pól obiektu) Taki identyfikator to nie jest argument dla new. Potrzebny mechanizm, który tworzy obiekty na podstawie identyfikatora.. Figure* createobj(figure::type type) switch (type) case Figure::SQUARE: return new Square(); case Figure::CIRCLE: return new Circle(); case Figure::TRIANGLE: return new Triangle(); default: return NULL; Za pomocą tej funkcji oraz metody read można dostarczyć funkcję, która pozwala odczytywać obiekty ze strumienia: Figure* create(ifstream& is) Figure::Type type; unsigned int t = 0; if(is >> t) // odczyt wartości typu int type = static_cast<figure::type>(t); // rzutowanie t na Type Figure* obj = createobj(type); obj->read(is); return obj; else return NULL;..i to już, wszystko? 169 To rozwiązanie ma wady: kiedy dodamy nowy typ danych, musimy też zmodyfikować funkcję createobj Brakuje kontroli poprawności wiązania identyfikatora z typem. Zestaw identyfikatorów jest zasobem wspólnym dla całej hierarchii, przy modyfikacji zbioru klas musi też podlegać modyfikacji. Potrzeba czegoś więcej Fabryka skalowalna obiektów przykład: Fabryka najpierw rejestruje pary: identyfikatory typu i przypisane im funkcje tworzące. Następnie jest gotowa do tworzenia obiektów na podstawie identyfikatora typu. class FigFactory typedef Figure* (*CreateFig)(); // nowy typ: wskaźnik na funkcję tworzącą void registerfig(int id, CreateFig fun); // rejestruje nowy typ Figure* create(int id); // tworzy obiekt na podstawie identyfikatora private: typedef map<int, CreateFig> Creators; // nowy typ: kontener mapa par Creators creators_; // pole: kontener do przechowywania par Fabryka skalowalna obiektów przykład: void FigFactory::registerFig(int id, CreateFig fun) creators_.insert(map<int,createfig>::value_type(id, fun)); // typedef pair<const Key, Type> value_type; Figure* FigFactory::create(int id) //tworzy obiekt danego typu Creators::const_iterator i = creators_.find(id); if(i!= creators_.end() ) //jeżeli znalazł odpowiedni wpis return (i->second)(); //woła metodę fabryczną return 0L; //zwraca pusty wskaźnik, gdy nieznany identyfikator
8 Fabryka skalowalna obiektów przykład: Autor klasy konkretnej musi też dostarczyć funkcję tworzącą obiekt danej klasy. Funkcja ta ma sygnaturę zdefiniowaną w fabryce i jest dostarczana do fabryki podczas rejestracji typu. Figure* CreateSquare() return new Square(); Figure* CreateCircle() return new Circle(); Figure* CreateTriangle() return new Triangle(); 173 Jeszcze raz tworzymy funkcję, która pozwala odczytywać obiekty ze strumienia: Figure* create(ifstream& is, FigFactory& factory) unsigned int t = 0; if(is >> t) Figure* obj = factory.create(t); obj->read(is); return obj; else return NULL; 174..i to już, wszystko? Trzeba jeszcze pamiętać, aby na początku programu stworzyć fabrykę i zarejestrować odpowiednie typy int main() FigFactory factory; factory.registerfig(figure::square, CreateSquare); factory.registerfig(figure::circle, CreateCircle); factory.registerfig(figure::triangle, CreateTriangle); /*.. */ To wszystko. Chociaż, może nie Fabryka obiektów i wzorzec prototypu: wzorzec prototypu pozwala na tworzenie kopii obiektu, jeżeli mamy dostępny wskaźnik lub referencję do klasy bazowej. Wykorzystuje mechanizm funkcji wirtualnych przenosi odpowiedzialność za tworzenie obiektów do klas konkretnych. Klasa bazowa definiuje tylko czysto wirtualną metodę. 176 Fabryka obiektów i wzorzec prototypu: Dodajemy czysto wirtualną metodę clone do klasy bazowej: class Figure enum Type SQUARE, CIRCLE, TRIANGLE virtual void write(ostream& os) const = 0; virtual void read(istream& is) = 0; virtual Figure* clone() const = 0; 177 Fabryka obiektów i wzorzec prototypu: Implementujemy metodę clone w klasach konkretnych: class Square : public Figure void write(ostream& os) const os << SQUARE; /* zapis pól */ void read(istream& is) /* odczyt pól */ Figure* clone() const return new Square(*this); Teraz zadaniem fabryki jest przechowywać obiekty wzorcowe, a nie funkcje fabryczne. Można w niej umieścić np. po kilka obiektów tego samego typu, ale w różnym stanie
9 Fabryka obiektów i wzorzec prototypu: class FigFactory2 typedef map<int,figure*> Prototypes; Prototypes prototypes_; void registerfig(int id, Figure* f) prototypes_.insert(map<int,figure*>::value_type(id, f)); Figure* create(int id) Prototypes::const_iterator i = prototypes_.find(id); if(i!= prototypes_.end() ) //jeżeli znalazł odpowiedni wpis return (i->second)->clone(); //woła metodę clone return 0L; //zwraca pusty wskaźnik, gdy nieznany identyfikator Teraz to już naprawdę wszystko o fabrykach obiektów
STL: implementowanie algorytmów C++: STL. STL: implementowanie algorytmów. STL: implementowanie algorytmów. STL: implementowanie algorytmów
Algorytm przeszukiwania w głąb Przeszukiwanie grafu odwiedzenie wszystkich jego wierzchołków w kolejności jak na rysunku obok: C++: STL Implementowanie własnych algorytmów Reprezentacja grafu w programie
STL: kontenery C++: STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. Fabryka obiektów. Fabryka obiektów. Fabryka obiektów przykład:
Fabryka obiektów C++: Fabryka obiektów Klasa, której obiekty pośrednicza przy tworzeniu innych obiektów. Pomagają tworzyć obiekty, jeżeli informacja o typie odnosi się do konkretnego typu, znanego w momencie
STL: kontenery C++: STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. Fabryka obiektów. Fabryka obiektów
Fabryka obiektów C++: Fabryka obiektów Klasa, której obiekty pośrednicza przy tworzeniu innych obiektów. Pomagają tworzyć obiekty, jeżeli informacja o typie odnosi się do konkretnego typu, znanego w momencie
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
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)
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji
KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
obiekty funkcyjne - funktory
#include #include #include #include #include #include #include #include #include #include using namespace
Część 4 życie programu
1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część
KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
Szablony funkcji i szablony klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument
Zaawansowane programowanie w C++ (PCP)
Zaawansowane programowanie w C++ (PCP) Wykład 6 - szablony. dr inż. Robert Nowak - p. 1/15 Kolekcje i algorytmy» Deklaracja szablonu y Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania
Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016
Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,
STL: kontenery. Typy kontenerów STL. STL: kontenery. STL: kontenery. STL: kontenery. Typy kontenerów STL. deque (double-ended queue) list
Kontenery sekwencyjne: deque (kolejka dwustronna) deque (double-ended queue) implementacja kontenera zoptymalizowana pod kątem efektywności operacji dołączania i usuwania elementów z sekwencji na obu jej
Programowanie i struktury danych
Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne
Szablony klas, zastosowanie szablonów w programach
Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do
Paradygmaty programowania
Paradygmaty programowania Programowanie generyczne w C++ Dr inż. Andrzej Grosser Cz estochowa, 2016 2 Spis treści 1. Zadanie 3 5 1.1. Wprowadzenie.................................. 5 1.2. Obiekty funkcyjne................................
Mechanizm dziedziczenia
Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia
C++ Przeładowanie operatorów i wzorce w klasach
C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje
Projektowanie klas c.d. Projektowanie klas przykład
Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej
Wprowadzenie do szablonów szablony funkcji
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Wprowadzenie do szablonów szablony funkcji
Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do
PARADYGMATY PROGRAMOWANIA Wykład 4
PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej
STL: Lekcja 1&2. Filozofia STL
STL: Lekcja 1&2 Tematy: Filozofia STL Po co nam STL? Podstawowa zawartość STL Co warto znać zanim zaczniemy pracę z STL?: wskaźniki Praca na tekstach: klasa String Vector: nowy wymiar standardowych tablic.
Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {
Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie
I - Microsoft Visual Studio C++
I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i
Składnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory
STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące
1. partition 2. stable_partition 3. sort 4. stable_sort 5. partial_sort 6. partial_sort_copy 7. nth_element 8. lower_bound 9. upper_bound 10.equal_range 11.binary_search 12.merge 13.inplace_merge 14.includes
Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);
Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod
Programowanie obiektowe w C++ Wykład 12
Programowanie obiektowe w C++ Wykład 12 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) 1 / 22 Zakresowe pętle for double tab[5] {1.12,2.23,3.33,4.12,5.22 for(double x: tab)
Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.
M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Szablony funkcji i klas (templates)
Instrukcja laboratoryjna nr 3 Programowanie w języku C 2 (C++ poziom zaawansowany) Szablony funkcji i klas (templates) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp
Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this
Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE
W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :
Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;
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
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i
EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi
EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi 1. Napisz wskaźnik do funkcji fun tak zdeklarowanej: T* fun( int, double const& ) const; definicja wskaźnika musi być precyzyjna, inaczej
Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 2 Programowanie strukturalne dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Pętla while #include using namespace std; int main ()
Składnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Przeciążanie operatorów Słowo
Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016
Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac
TEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 14 Katarzyna Grzelak 3 czerwca 2019 K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów
STL: kontenery. STL: kontenery. STL: kontenery. Typy kontenerów STL. STL: kontenery. STL: kontenery. multimap. Kontener map: przykład zadanie:
Kontener map: przykład zadanie: Jak policzyć liczby różnych słów występujących w tekście? Rozwiązanie: Potrzebny jest kontener, który będzie zawierał listę różnych słów (tj. listę bez powtórzeń), która
Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33
Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe
Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {
Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod
Szablony. Szablony funkcji
Szablony Szablony sa mechanizmem ponownego wykorzystania kodu (reuse) W przypadku funkcji ponownie wykorzystany jest algorytm W przypadku klas ponownie wykorzystane sa wszystkie skladowe Deklaracja szablonu
Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1
Typy złożone Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy podstawowe Typy całkowite: char short int long Typy zmiennopozycyjne float double Modyfikatory : unsigned, signed Typ wskaźnikowy
Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.
Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice
C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów
Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów
Metody Metody, parametry, zwracanie wartości
Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca
STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery
Kontenery sekwencyjne: list (lista dwukierunkowa) jest przystosowany do szybkiego wstawiania elementów w dowolne miejsce sekwencji, nie nadaje się do efektywnej realizacji operacji swobodnego dostępu,
Technologie cyfrowe semestr letni 2018/2019
Technologie cyfrowe semestr letni 2018/2019 Tomasz Kazimierczuk Wykład 8 (15.04.2019) Kompilacja Kompilacja programu (kodu): proces tłumaczenia kodu napisanego w wybranym języku na kod maszynowy, zrozumiały
C++ - [4-7] Polimorfizm
Slajd 1 z 14 C++ - [4-7] Polimorfizm Nysa 2004-2013. Autor: Wojciech Galiński. wersja dnia 20 maja 2013 r. Slajd 2 z 14 Polimorfizm i klasa polimorficzna POLIMORFIZM (cytat z Wikipedii) (wielopostaciowość)
Rzutowanie i konwersje
Rzutowanie i konwersje Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania
Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016
Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa
Wydajność użycia funktorów z biblioteką STL języka C++
Wydajność użycia funktorów z biblioteką STL języka C++ Irek Szcześniak, Maciek Sobczak 1 października 2005 roku Streszczenie Artykuł dotyczy wydajności użycia funktorów z biblioteką STL (Standard Template
2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne
Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie
Wstęp do Programowania 2
Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:
public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje
Zbudujemy klasę Definicję klasy zapiszmy w pliku tstring.h #ifndef TSTRING_H #define TSTRING_H #include // w pliku nagłówkowym NIE // otwieramy przestrzeni std // interfejs private: // implementacja
Programowanie obiektowe
Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;
Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43
Programowanie w C++ Wykład 6 Katarzyna Grzelak 1 kwietnia 2019 K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
C++ wprowadzanie zmiennych
C++ wprowadzanie zmiennych Każda zmienna musi być zadeklarowana, należy określić jej nazwę (identyfikator) oraz typ. Opis_typu lista zmiennych Dla każdej zmiennej rezerwowany jest fragment pamięci o określonym
Programowanie Komponentowe Zarządzanie obiektami: kontenery
Programowanie Komponentowe Zarządzanie obiektami: kontenery dr inż. Ireneusz Szcześniak jesień 2016 roku Kontenery Kontener w C++ to generyczna struktura danych. Przechowuje elementy jednego dowolnego
TEMAT : KLASY POLIMORFIZM
TEMAT : KLASY POLIMORFIZM 1. Wprowadzenie do polimorfizmu i funkcji wirtualnych w języku C++ Język C++ zakłada, że w pewnych przypadkach uzasadnione jest tworzenie klas, których reprezentanci w programie
Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30
Programowanie w C++ Wykład 9 Katarzyna Grzelak 14 maja 2018 K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus
Programowanie 2. Język C++. Wykład 9.
9.1 Ukrywanie metod, metody nadpisane... 1 9.2 Metody wirtualne, wirtualny destruktor... 2 9.3 Metody czysto wirtualne... 6 9.4 Klasy abstrakcyjne... 7 9.5 Wielodziedziczenie... 9 9.1 Ukrywanie metod,
Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019
Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości
Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Dziedziczenie Przestrzenie nazw Na podstawie: A.
Zaawansowane programowanie w języku C++ Biblioteka standardowa
Zaawansowane programowanie w języku C++ Biblioteka standardowa Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka
8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.
8. Wektory Przykłady 8.1. Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. Uwaga! Kod poniżej. To zadanie można rozwiązać przy użyciu wiedzy
Operatory na rzecz typu TString
Operatory na rzecz typu TString Dopiszmy w definicji klasy operator[], dzięki któremu potraktujemy obiekt jak tablicę class TString { public: char& operator[]( size_t n ); const char& operator[]( size_t
Podstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.
C++ - DZIEDZICZENIE Do najważniejszych cech języka C++ należy możliwość wielokrotnego wykorzystywania kodu Prymitywnym, ale skutecznym sposobem jest kompozycja: deklarowanie obiektów wewnątrz innych klas,
Zaawansowane programowanie w C++ (PCP)
Wykład 9 - powtórzenie. 11 maja 2007 Powtórzenie materiału obiekty automatyczne, statyczne, tymczasowe, dynamiczne dziedziczenie, agregacja polimorfizm, funkcje wirtualne wzorce projektowe (strukturalne,
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja
STL Standardt Template Library (wprowadzenie)
STL Standardt Template Library (wprowadzenie) Biblioteka standardowych szablonów na dzień dzisiejszy stanowi jedną z najpotężniejszych możliwości języka C++ Zawiera szablony klas ogólnego przeznaczenia
Technologie programowania Wykład 4. Szablony funkcji Notes. Szablony funkcji Notes. Szablony funkcji Notes. Notes. Przemek Błaśkiewicz.
Technologie programowania Wykład 4 Przemek Błaśkiewicz 9 maja 2017 1 / 54 Szablony funkcji Często w programach zachodzi potrzeba użycia funkcji, które co do mechanizmu działaja tak samo, ale różnia się
Technologie cyfrowe semestr letni 2018/2019
Technologie cyfrowe semestr letni 2018/2019 Tomasz Kazimierczuk Wykład 7 (08.04.2019) Wikipedia Programowanie komputerów proces projektowania, tworzenia, testowania i utrzymywania kodu źródłowego programów
Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )
Jzyk C++ cz 3 Jarosław Gramacki Instytut Informatyki i Elektroniki # $$%%& ' ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )!" 2 # $$%%& ' ( $%%/,))3 ( %* 2 / 4 ( ( *' *''*,
Algorytmy i Struktury Danych. Anna Paszyńska
Algorytmy i Struktury Danych Anna Paszyńska Tablica dynamiczna szablon Array Zbiory Zbiory template class Container {public: virtual ~Container() { }; virtual int Count() const = 0;
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie
Definicja szablonu klasy. Korzystanie z szablonu. Specjalizacja metody szablonu.
class Wektor private: Typ x; Typ y; Wektor(Typ a, Typ b) :x(a), y(b) ; Wektor A(2, 5); Wektor B(2.7, 9.7); Wektor C('A', 'B'); 1 Definicja szablonu klasy. Korzystanie z szablonu. class
Listy powiązane zorientowane obiektowo
Listy powiązane zorientowane obiektowo Aby zilustrować potęgę polimorfizmu, przeanalizujmy zorientowaną obiektowo listę powiązaną. Jak zapewne wiesz, lista powiązana jest strukturą danych, zaprojektowaną
Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 12 Katarzyna Grzelak 28 maja 2018 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Klasy cd K.Grzelak (Wykład 12) Programowanie w C++ 2 / 27 Klasy - powtórzenie Klasy typy definiowane
Stos liczb całkowitych
Stos liczb całkowitych class StosInt int* tab; unsigned size ; StosInt(unsigned s=10) tab=new int[size=s];top=0; ~StosInt()delete[] tab; void push(int i)tab[top++]=i; int pop(void) return tab[--top]; int
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
M. Trzebiński C++ 1/16 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IFJ PAN 6lipca2015 Uruchomienie maszyny w CC1 M. Trzebiński C++ 2/16
Do czego służą klasy?
KLASY Dorota Pylak 2 Do czego służą klasy? W programowaniu obiektowym posługujemy się obiektami. Obiekty charakteryzują się: cechami (inaczej - atrybutami lub stanami) operacjami, które na nich można wykonywać
EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++
IMIĘ i NAZWISKO: przykładowe odpowiedzi NR: 0 EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ 1. Napisz precyzyjnie co to jest ptr jeśli: const * const Foo ptr; ptr to stały wskaźnik do stałego obiektu typu Foo
Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)
Języki i Paradygmaty Programowania Laboratorium 1 Obiekty i klasy C++ Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać) UWAGA! Umiejętność tworzenia
Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne
Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne Przeciążenie funkcji polega na użyciu funkcji z tą samą nazwą, które mają różne listy argumentów(różne typy, różna ilość lub to i inne).
C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE
WSKAŹNIKI KLASOWE Wskaźniki klasowe Każdy obiekt zajmuje fragment pamięci i wszystkie obiekty tego samego typu zajmują fragmenty pamięci tej samej długości początek miejsca w pamięci zajmowanego przez
Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 5 Algorytmy i wskaźniki dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Plan Zapis i odczyt z plików tekstowych O tablicach ciąg dalszy Referencje
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Przeciążanie operatorów Funkcje zaprzyjaźnione Na
Programowanie obiektowe
Programowanie obiektowe 10.04.2017 W slajdach są materiały zapożyczone z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.ppt Przykład wykorzystania obiektu Obiekt X jest instancją klasy Y Obiekt
Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30
Programowanie w C++ Wykład 11 Katarzyna Grzelak 13 maja 2019 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Klasy cd K.Grzelak (Wykład 11) Programowanie w C++ 2 / 30 Klasy - powtórzenie Klasy typy definiowane
Programowanie obiektowe
Wykład 2 28 lutego 2019 Plan wykładu 1 2 3 4 5 Plan wykładu 1 2 3 4 5 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie; standardy ISO i ECMA; podobny składniowo do C++; Język C Krótka
Mechanizm dziedziczenia
Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia
Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest
Kurs programowania. Wykład 9. Wojciech Macyna
Wykład 9 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista czy
Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)
1 Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną) Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion,