Nowoczesny C++ Rafał Wasilewski 1

Wielkość: px
Rozpocząć pokaz od strony:

Download "Nowoczesny C++ Rafał Wasilewski 1"

Transkrypt

1 Nowoczesny C++ Rafał Wasilewski 1 1 Wydział Inżynierii Mechanicznej i Informatyki Kierunek informatyka, Rok III Politechnika Częstochowska {wasilewski.rafael@gmail.com 1 Wstęp Streszczenie Tematem pracy jest przedstawienie wybranych elementów języka c++, które weszły do standardu języka C++11. Język c++ jest niewątpliwie jednym z najpopularniejszym z języków obiektowych. Ciągły rozwój tego języka przyczynia się do jego popularyzacji, a standaryzacja dostarcza mechanizmów pozwalających wykorzystywać jednolite wzorce. Standard C++11 rozszerza język c++ o obsługę wielowątkowości oraz jednolite inicjowanie za pomocą list inicjacyjnych, a wprowadzenie semantyki przeniesienia wpływa na wydajność programów. Obecnie język C++ jest jednym z najważniejszym a zarazem najczęściej stosowanych języków programowania na świecie. Wpływ na ten stan ma fakt, iż jest on bardzo elastyczny. Wykorzystywany jest do tworzenia różnego rodzaju programów, gier, aplikacji naukowych oraz sterowników urządzeń. C++ jest językiem szybkim, wydajnym oraz przenośnym. Wartości te zostały odziedziczone z języka C. Dzięki metodyce programowania obiektowego zapanowanie nad złożonością kodu programu jest prostsze. Stosowanie szablonów w języku C++ daje możliwość wykorzystania metodologii programowania uogólnionego. Połączenie tych trzech aspektów sprawia, że C++ jest bardzo silnym językiem programowania. Komitet standaryzacyjny języka C++ w roku 2011 opublikował nowy standard, wprowadzając wiele zmian w języku oraz bibliotece. Zmiany wprowadzone w standardzie oznaczonym jako C++11 lub C++x0 mają na celu ułatwienie pracy oraz zwiększenie efektywności programistów. Aby móc korzystać z nowego standardu należy dodać do kompilatora parametr -std=c++0x. 1

2 2 Semantyka przeniesienia i referencje r-wartościowe Standard C++11 wprowadza nowy typ referencyjny &&. Jest to referencja do obiektów r-wartości. Obiekty r-wartości to obiekty tymczasowe, literały stałych, funkcje zwracające wartość a nie referencję, wyrażenia typu: x + y, mogące występować po prawej stronie operatora przypisania, a jednocześnie takie do których nie da się użyć operatora pobrania adresu. np.: int x = 852; int& y = 951; // nie zostanie skompilowane, 951 nie jest l-wartością. int&& z = 475; // zostanie skompilowane, 475 jest r-wartością int&& w = x; // nie zostanie skompilowane const int& g= 357; // ok void print(string const& napis); print( Witaj świecie ); Przykład ten jest odstępstwem wprowadzonym przed zaimplementowaniem mechanizmów referencji do r-wartości. Umożliwia on przekazanie zmiennej tymczasowej do funkcji oczekującej referencji. Ponieważ jest to typ referencji do stałej, nie ma możliwości zmiany jego wartości. Obiekty typu && mogą być akceptowane jako wartość nie-stała, umożliwiając funkcjom ich modyfikację. Stosowanie techniki przeciążenia funkcji do określenia czy parametr jest l-wartością czy r-wartością jest podstawą semantyki przenoszenia danych (ang. move semantic). Semantyka przeniesienia nie przenosi obiektu a jedynie jego referencję. Wykorzystanie semantyki przeniesienia wymusza użycie mechanizmu informującego kompilator kiedy należy zrobić pełną głęboką kopię obiektu, a kiedy jest to niepotrzebne. Do tego celu służą r-wartościowe referencje. Klasyczny konstruktor kopiujący wykonuję kopię obiektu, a jako parametr zwraca referencję do l-wartości (const&). vector<string> napisvector; // kod tworzący wektor łańcuchów znakowych, po 1000 znaków każdy vector<string> svectorcopy(svector); Nowy standard C++11 wprowadza drugi nowy typ konstruktora kopiującego, nazywany konstruktorem przenoszącym (ang. move constructor). Przeprowadza on operacje na r-wartościowej referencji, mogącej odwoływać się do argumentów r-wartościowych. vector<string>maiuscula(const vector<string>& wektornapis){ vector<string> tmp; // tu kod składujący w tmp zawartość z wektornapis pisaną wielkimi literami return tmp; vector<string> svectoropy2(maiuscula(svector)); // r-wartość Mechanizm konstruktora kopiującego dokonuje oczywiście głębokiej kopii obiektu. Natomiast w konstruktorze przenoszącym mechanizm ten został zoptymalizowany jedynie do przeniesienia zawartości obiektu do innego obiektu. Wcześniejszy przykład doskonale obrazuje działanie konstruktora przenoszącego. Jak widać, przenosi on jedynie referencję do obiektu r-wartości zamiast dokonywać 2

3 zbędnego kopiowania znaków do nowego miejsca, tylko po to, aby za chwilę zwolnić oryginalny kontener. Aby modyfikacja obiektu źródłowego była możliwa, r-wartościowa referencja przekazana przez parametr nie może być typu stałego. class Przyklad{ int ileelementow; // liczba elementów char* wdane; // wskaźnik do danych public:... Przyklad(const Przyklad & p); // zwyczajny konstruktor kopiujący Przyklad( Przyklad && p); // konstruktor przenoszenia... ; Przyklad::Przyklad(Przyklad&& objekt): ileelementow(objekt.ileelementow ){ wdane = objekt.wdane ; // przechwycenie adresu objekt.pc = nullptr; //stary obiekt otrzymuje nic w zamian objekt.ileelementow = 0 ; W powyższym przykładzie konstruktor przenoszący wskaźnikowi wdane przypisuje adres wskaźnika objekt.wdane. W tym momencie wdane jak i objekt.wdane wskazują na te same dane. Stwarza to potencjalne zagrożenie dla programu w momencie wywołania destruktorów, gdyż program nie powinien więcej niż raz dla tego samego obszaru pamięci wywołać operatora delete[]. By się przed tym uchronić wskaźnik do danych w obiekcie źródłowym objekt.wdane jest zerowany za pomocą nullptr, dzięki czemu unika się niedozwolonej dealokacji pamięci. Wywołanie operatora zwalniającego pamięć dla wskaźnika pokazującego na NULL jest dozwolone. Wykorzystanie konstruktora przenoszącego zapobiega wielu nadmiarowym operacjom alokacji pamięci przez obiekt. Zdarza się, że kompilator dokonuje własnej optymalizacji kodu. Ważne jest, aby program wykonał się w taki sposób, w jaki została zaimplementowana jego logika. Przykładem takiego kompilatora jest g++ który potrafi dokonać takiej optymalizacji nawet jeżeli konstruktor przenoszący nie jest zdefiniowany. Semantyka przeniesienia jest dozwolona dzięki zastosowaniu r-wartościowych referencji, lecz jej nie gwarantuje. Aby poinformować kompilator o przypadku stosowania semantyki przeniesienia, niezbędne jest adekwatne użycie referencji r-wartościowych: Przyklad test2 = test1; Przyklad test4 (test1 +test3) ; // pasuje do Przyklad::Przyklad(const Przyklad &) // pasuje do Przyklad::Przyklad( Przyklad &&) Reasumując: inicjalizacja obiektów l-wartościami odbywa się za pomocą konstruktora kopiującego, natomiast inicjalizacja obiektów r-wartościowych odbywa się za przy użyciu konstruktora przypisania. Konstruktory te mogą mieć zdefiniowaną całkowicie różną implementację. W podobny sposób powinno się rozważać operacje przypisania. Mechanizm operatora przypisania w wersji przenoszącej w pierwszej kolejności czyści dane obiektu docelowego, po to aby móc przypisać do niego dane z obiektu źródłowego. Problem spowodowany wskazywaniem kilku wskaźników na jeden obiekt, został rozwiązany poprzez wyzerowanie adresu źródłowego wskaźnika do danych. 3

4 Przykłady implementacji operatora przypisania wykorzystującego kopiowanie oraz operatora przypisania stosującego przenoszenie dla klasy Przyklad: Przyklad & Przyklad::operator=(const Przyklad &obj) { if (this == &obj) return *this; delete [] wdane; ileelementow = obj.ileelementow ; wdane = new char [ileelementow ]; for (int i = 0 ; i < n ; ++i) wdane[i] = obj.wdane [i]; return *this; //przypisanie kopiujące Przyklad & Przyklad::operator=( Przyklad && obj) // przypisanie przenoszące { if ( this == &obj) return * this; delete [] wdane; ileelementow = obj.ileelementow ; wdane = obj. wdane; obj. ileelementow = 0; obj. wdane = nullptr; return *this; Chcąc zastosować konstruktor przenoszący bądź operator przypisania przenoszącego dla obiektów l-wartościowych trzeba dokonać ich konwersji na r-wartość. Konwersja ta jest możliwa za pomocą operatora rzutowania static_cast<decltype(arg)&&>(arg) na typ Przyklad&&. Nowy standard C++11 dostarcza łatwy sposób prowadzący do przeniesienia obiektu. Jest to funkcja std::move() zwracająca r-wartościową referencje do obiektu. Przeniesienie odbędzie się pod warunkiem, że obiekt posiada zdefiniowany operator przeniesienia. Deklaracje funkcji move(), forward(), move_if_noexcept(), declval() umożliwiających generowanie referencji do r-wartości znajdują się w pliku nagłówkowym <utility>. Semantyka przeniesienia z referencjami r-wartościowymi jest zaimplementowana w bibliotece STL. Konstruktory przenoszące jak i operatory przypisania przenoszącego znajdują się we wszystkich klasach STL. 3 Nowości w Klasach Standard C++11 wzbogaca grupę specjalnych metod klas o wcześniej wspomniany konstruktor przenoszący oraz operator przypisania przenoszącego. Dodatkowo zwiększa kontrolę nad metodami klasy- teraz jawnie można specjalizować, czy dana metoda specjalna ma pozostać domyślną czy też zostanie zaimplementowana. Jeżeli dla danej klasy nie zdefiniowano żadnego konstruktora, kompilator syntetyzuje konstruktor domyślny. Jeżeli w klasie zdefiniujemy dowolny konstruktor to kompilator już nie utworzy żadnego innego domyślnego konstruktora czy też operatora przypisania. C++11 umożliwia zadeklarowanie metody klasy w sposób jawny jako domyślną metodę. Służy do tego modyfikator =default umieszczony od deklaracji metody. Możemy również zabronić kompilatorowi syntetyzowania danych metod oraz ich użycia. Pomocy w tym celu jest modyfikator =delete, dzięki niemu metoda będzie 4

5 zadeklarowana jako usunięta. Przed standardem C++11 taki cel osiągało się deklarując metody danej klasy jako funkcje prywatne. Niemniej stosowanie modyfikatora delete jest bardziej czytelne i łatwiejsze. Definicja klasy w C++11 posiada tylko sześć specjalnych metod które mogą być syntetyzowane przez kompilator. Kompilator natomiast może usuwać dowolną metodę w klasie, co może być wykorzystane do zablokowania konwersji pojedynczych metod. class JakasKlasa { ; JakasKlasa obj1; obj1.foo (5); void foo( double ); void foo( int ) = delete; Powyższy przykład pokazuje wywołanie metody foo( ) odpowiadającej wywołaniu metody foo dla typu int. Kompilator znajdzie dopasowanie, oraz odkryje, że metoda foo(int) posiada w swojej definicji modyfikator delete. Wywołanie funkcji usuniętej spowoduje błąd podczas kompilacji. Obrazuje to bardzo ważną cechę metod usuniętych: są one traktowane jako istniejące przez kompilator w momencie dopasowania, natomiast podczas prób wykorzystania są traktowane przeciwnie, jako nieistniejące. C++11 wprowadza mechanizm delegowania konstruktorów. Jego zadaniem jest przede wszystkim zmniejszenie ilości miejsc w których można popełnić trywialne błędy związane z powielaniem kodu. Delegowanie pozwala tworzyć nowe definicje konstruktorów stosując już istniejący konstruktor. Innymi słowy oddelegowuje część zadań danego konstruktora do innego konstruktora. Class DelKonst { int idx; double db; std::string str; public: DelKonst (int idxx, double dbb, std::string strr): idx(idxx), db(dbb), str(strr){ /* */ DelKonst ( ): DelKonst(0, 0.01, Oh ){ /* */ DelKonst (int idxx): DelKonst( idxx, 0.01, Oh ){ /* */ DelKonst (int kk idxx double dbb): DelKonst(idxx, dbb, Oh ){ /* */ 4 Automatyczna deklaracja typów w C++11 Ogromnym udogodnieniem wprowadzonym do języka w standardzie C++11 jest dedukowanie typu zmiennej w oparciu o typ jaki posiada wartość inicjalizująca. Posłużyło do tego słowo kluczowe auto znane z języka C, niemniej wykorzystywane sporadycznie przez programistów. Teraz kompilator przydziela inicjalizowanej zmiennej ten sam typ jaki posiada wartość inicjalizująca. Pozwala to omijać długie i żmudne deklaracje typów. Wystarczy posłużyć się słowem kluczowym auto. auto aintiger = 659; // aintiger jest typu int auto aldouble = 2.7e13L // aldouble jest typu long double 5

6 Przydatność dedukcji typów jeszcze bardziej zyskuje na znaczeniu podczas pracy z typami złożonymi, między innymi takimi jak w standardowej bibliotece szablonów. std::vector<double>punkty; std::vector<double>::iterator punktywektor = punkty.begin(); // lub auto punktywektor = punkty.begin(); // C++11 analogiczny efekt 5 Jednolita inicjalizacja Od momentu wprowadzenia standardu C++11 możliwe jest stosowanie inicjalizacji wykorzystujących notację klamrową wraz z listą wartości inicjalizujących również dla typów zdefiniowanych przez programistę. Uprzednio możliwe było to tylko dla typów wbudowanych. Możliwe jest stosowanie listy inicjalizującej w wyrażeniach używających operatora new. int * tablicaintow = new int [5] {0,1,9,3,4; // C++11 W miejsce listy argumentów konstruktora dla obiektów klas z powodzeniem można zamiennie wykorzystywać listę w klamrach. Slupek slup1 (4, 11.3); // po staremu Slupek slup2 {8, 92.3; lub Slupek slup3 = {8, // C++11 Do standardu C++11 dodano również szablon klas std::initializer_list służący jako parametr konstruktora. Inicjator listy pozwala przekazać zbiór wartości zapisany poprzez argument funkcji, metody bądź konstruktora. Wymagane jest, aby wszystkie elementy posiadały ten sam typ bądź dało się je niejawnie przekonwertować do jednakowego typu. Wszystkie kontenery ze standardowej biblioteki szablonów mają konstruktory przyjmujące argumenty będące szablonem klasy std::initializer_list. Std::vector<int> wektortablicowy {4,3,2; Deklaracja klasy std::initializer_list znajduje się w pliku nagłówkowym <initializer_list>. Klasa ta zawiera metody umożliwiające określenie początku: begin() oraz końca: end() listy. Operandami typu std::initialize_list można posługiwać się w konstruktorach, metodach klas oraz zwykłych funkcjach double sumator (){std::initialize_list<double> ilist { double sum = 0 ; for (auto idx = ilist.begin(); idx!= ilist.end(); idx++ ) sum += *idx; return sum; int main() {... double jakaszmienna = sumator({4.6, 5.2, 3.8);... 6

7 6 Inteligentne wskaźniki Inteligentne wskaźniki (ang. smart pointers) poza standardowym zachowaniem jakie mają zwykłe wskaźniki, dostarczają dodatkowych możliwości. Język C++11 oferuje trzy nowe klasy inteligentnych wskaźników - unique_ptr, shared_ptr oraz week_ptr. Są one bardzo pomocne podczas pracy z dynamicznymi przydziałami pamięci. Inteligentne wskaźniki auto_ptr, shared_ptr, unique_ptr definiują obiekty zbliżone do wskaźników otrzymanych za pomocą operatora new. Dzięki temu, że inteligentne wskaźniki są obiektami klas, ich definicje zawierają destruktory. Podczas usuwania obiektów inteligentnych wskaźników, ich destruktor za pomocą instrukcji delete zwalnia pamięć. Z tego powodu, jeżeli przypiszemy do takiego wskaźnika adres poprzez instrukcję new, nie musimy się już martwić o zwolnienie pamięci, ponieważ jeżeli nie zrobimy tego sami, zrobi to za nas destruktor w momencie usuwania obiektu inteligentnego wskaźnika. Inteligentne wskaźniki do języka C++11 zaczerpnięte zostały z biblioteki Boost. Klasy inteligentnych wskaźników zadeklarowane są w pliku nagłówkowym <memory>. Unique_ptr (unikalny) jest unikalnym wskaźnikiem na obiekt. W momencie usunięcia wskaźnika obiekt zostanie zniszczony. unique_ptr<string>p3(new string ( auto )); vector<unique_ptr<int>> vp(size); Shared_ptr (współdzielony) jest wskaźnikiem współdzielonym przez wiele wskaźników tego typu. Klasa zawiera zmienną zliczającą wskaźniki wskazujące na obiekt. W momencie gdy ostatni współdzielony wskaźnik zostanie zniszczony, obiekt na który wskazywał również ulegnie zniszczeniu. Week_ptr( słaby) wskazuje na obiekty wskazywane poprzez współdzielone wskaźniki, jednak nie utrzymuje ich przy życiu. W momencie zniszczenia wskaźnika współdzielonego, obiekt na który wskazywał również zostanie zniszczony. Wskaźniki słabe jeżeli wskazywały na taki obiekt zaczną wskazywać na nullptr. 7 Wielowątkowość Niewątpliwie największa nowością w standardzie C++11 jest możliwość wykorzystania wielowątkowości. Wcześniej było to możliwe, lecz wymagało stosowania zewnętrznych bibliotek. Utworzenie nowego wątku jest naprawdę proste: void do_some_work(); std::thread my_thread(do_some_work); W C++11 biblioteka standardowa została wzbogacona o nowy model pamięci przystosowany do przetwarzania wielowątkowego. Dodano klasy zarządzające wątkami, synchronizacją współbieżnych operacji oraz ochroną danych współdzielonych przez wątki. Wprowadzono również niskopoziomowe operacje atomowe będące podstawą synchronizacji wątków. Standard C++11 wspiera współbieżność poprzez mechanizmy zdefiniowane w plikach nagłówkowych wchodzących w skład biblioteki standardowej. Plik <thread> wspiera tworzenie i uruchamianie wątków. Ochrona przed wzajemnym wykluczaniem 7

8 zdefiniowana jest w pliku nagłówkowym <mutex>, monitory i zmienne warunkowe będące podstawą synchronizacji wątków znajdują się w nagłówkowym pliku <condition_variable>. Operacje wysokopoziomowe, takie jak funkcje przyszłości umożliwiają szablony klas std::future<>, std::shared_future<> z pliku nagłówkowego <future>. W C++11 użycie słowa thread_local definiującego nowy model pamięci, wspiera realizację operacji wielowątkowych. Therad_local definiuje użycie zmiennych jako statyczne względem ustalonego wątku. Ich czas życia jest uzależniony do czasu życia wątku. 8 Podsumowanie W powyższej pracy zostały omówione wybrane elementy wprowadzone wraz ze standardem C++11. Ukierunkowany jest on na usprawnienie pracy programistów poprzez uproszczenie nauki języka oraz zwiększenie możliwości jego zastosowania. Efektywność wykorzystania języka C++ wzrosła poprzez wykorzystanie semantyki r-wartości oraz inteligentnych wskaźników, które pomagają w zarządzaniu obszarami pamięci przydzielonymi dynamicznie. Jedną z istotniejszych zmian jest wprowadzenie do standardowej biblioteki elementów wspierających przetwarzanie współbieżne. W niniejszej pracy omówione zostały kluczowe elementy standardu C++11, jednak na uwagę zasługuje również między innymi obsługa wyrażeń regularnych oraz wyrażenia lambda. Aktualnie nie wszystkie kompilatory wspierają pełną listę dodanych funkcjonalności nowego standardu. Sytuacja ta poprawia się wraz z rozwojem i wydawaniem nowych wersji kompilatorów. Podsumowując standard C++11 znacząco zwiększa przejrzystość i elastyczność języka C++ oraz upraszcza jego elementy. Bibliografia [1] A. Williams, Język C++ i przetwarzanie współbieżne w akcji, Helion [2] S. Prata, Język C++ Szkoła programowania Wydanie VI, Helion [3] C++11 FAQ 8

Programowanie obiektowe w C++ Wykład 12

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)

Bardziej szczegółowo

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

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

Bardziej szczegółowo

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

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Przydzielanie pamięci Poniżej przedstawiono w C++ dwie klasy obrazujące sposób rezerwacji pamięci. class Osoba char imie[30];

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

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

Bardziej szczegółowo

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula Programowanie i struktury danych Wykład 4 Dr Piotr ybula Typ wska ź nikowy int* pointer; //wskaźnik do zmiennych typu int pozwala na dostęp do dowolnego miejsca pamięci (zmienne

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

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

Bardziej szczegółowo

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ść 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

Bardziej szczegółowo

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,

Bardziej szczegółowo

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 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

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost; Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

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ą

Bardziej szczegółowo

C++11. C++ 11 wybrane elementy. C++11: referencje do rvalue C++ 11: C++11: referencje do rvalue. C++11: referencje do rvalue. Referencje do rvalue

C++11. C++ 11 wybrane elementy. C++11: referencje do rvalue C++ 11: C++11: referencje do rvalue. C++11: referencje do rvalue. Referencje do rvalue C++ 11 wybrane elementy C++11 Lista rozszerzeń C++11 obecnych w VC2013: 1. Referencje do rvalue, 2. Jednolite inicjowanie i delegowanie konstruktorów, 3. Konstruktory delegujące 4. Jednolita inicjalizacja

Bardziej szczegółowo

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

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

Bardziej szczegółowo

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

Wskaźniki. Informatyka

Wskaźniki. Informatyka Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą

Bardziej szczegółowo

Programowanie, część I

Programowanie, część I 11 marca 2010 Kontakt Wstęp Informacje organizacyjne Materiał na ćwiczenia Plan wykładu http://www.fuw.edu.pl/~rwys/prog rwys@fuw.edu.pl tel. 22 55 32 263 Materiał na ćwiczenia Informacje organizacyjne

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Wykład 1: Wskaźniki i zmienne dynamiczne

Wykład 1: Wskaźniki i zmienne dynamiczne Programowanie obiektowe Wykład 1: Wskaźniki i zmienne dynamiczne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Podstawy programowania w C++ Wskaźniki 2 dr Artur Bartoszewski - Programowanie

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale

Bardziej szczegółowo

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

Bardziej szczegółowo

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Instytut Mechaniki i Inżynierii Obliczeniowej  Wydział Mechaniczny Technologiczny Politechnika Śląska Instytut Mechaniki i Inżynierii Obliczeniowej www.imio.polsl.pl fb.com/imiopolsl @imiopolsl Wydział Mechaniczny Technologiczny Politechnika Śląska Języki programowania z programowaniem obiektowym Laboratorium

Bardziej szczegółowo

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc Rok akademicki 2016/2017, Wykład nr 4 2/45 Plan wykładu nr 4 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017

Bardziej szczegółowo

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

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;

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski

Bardziej szczegółowo

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

ZASADY PROGRAMOWANIA KOMPUTERÓW POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.

Bardziej szczegółowo

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

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

Konstruktor kopiujacy

Konstruktor kopiujacy Konstruktor kopiujacy Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Klasy w C++

Zaawansowane programowanie w języku C++ Klasy w C++ Zaawansowane programowanie w języku C++ Klasy w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń

Bardziej szczegółowo

STL: Lekcja 1&2. Filozofia STL

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.

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY Inicjalizacja obiektu KONSTRUKTORY Inicjalizacja Przyczyną wielu błędów w programach jest nieprawidłowe zainicjalizowanie zmiennych na początku działania programu. Obiekt zawiera z reguły szereg pól ich

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami: Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C #import "Fraction.h" #import @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; } if ( self ) { [self setnumerator: n anddenominator:

Bardziej szczegółowo

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg Programowanie obiektowe Materiały przygotował: mgr inż. Wojciech Frohmberg Konstruktor Konstruktor w językach zorientowanych obiektowo pełni podwójną rolę: przydziela pamięć na obiekt, zdefiniowany klasą

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów

Bardziej szczegółowo

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę. Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji

Bardziej szczegółowo

6 Niektóre nowe cechy standardu C++11

6 Niektóre nowe cechy standardu C++11 6 Niektóre nowe cechy standardu C++11 Na podstawie: Nicolai M. Josuttis: The C++ Standard Library A Tutorial and Reference, Second Edition, Addison-Wesley 6.1 nullptr Dotychczas używano 0 lub NULL do wskazania,

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Języki programowania obiektowego Nieobiektowe elementy języka C++

Języki programowania obiektowego Nieobiektowe elementy języka C++ Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Przetwarzanie tablic znaków Łańcuchy znakowe jako tablice znaków

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Szablony funkcji i szablony klas

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

Bardziej szczegółowo

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory. Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory. Konstruktory Konstruktory w językach obiektowych są to specjalne metody wywoływane podczas tworzenia nowego obiektu i służące do

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

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? 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

Bardziej szczegółowo

Standard C++0x (C++1x?) Marcin Świderski

Standard C++0x (C++1x?) Marcin Świderski Standard C++0x (C++1x?) Marcin Świderski sfider@students.mimuw.edu.pl O czym będzie mowa? Wytyczne komitetu standaryzacyjnego Rozszerzenia języka Rozszerzenia języka szablony Rozszerzenia biblioteki standardowej

Bardziej szczegółowo

Dziedziczenie jednobazowe, poliformizm

Dziedziczenie jednobazowe, poliformizm Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie jednobazowe 2. Polimorfizm część pierwsza 3. Polimorfizm część druga Zofia Kruczkiewicz, ETE8305_6 1 Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

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

Bardziej szczegółowo

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami

Bardziej szczegółowo

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:

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: 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: typ nw; /* definicja zmiennej nw typu typ */ typ *w_nw; /* definicja

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz:

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz: Prawa dostępu do składowych klasy PRAWA PRZYJACIÓŁ KLASY 91 Dostęp z zewnątrz: double limit; ; water_temp T; T.limit = 100; Dostęp z wewnątrz: double set_temp(double nt) { if (nt0) ; water_temp

Bardziej szczegółowo

Wyliczanie wyrażenia obiekty tymczasowe

Wyliczanie wyrażenia obiekty tymczasowe Wyliczanie wyrażenia obiekty tymczasowe Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

Bardziej szczegółowo

Wykład 3 Składnia języka C# (cz. 2)

Wykład 3 Składnia języka C# (cz. 2) Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest

Bardziej szczegółowo

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

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki zaprojektowany jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych jest to język pozwalający na programowanie zarówno proceduralne

Bardziej szczegółowo

PROE wykład 9 C++11, rzutowanie, optymalizacja. dr inż. Jacek Naruniec

PROE wykład 9 C++11, rzutowanie, optymalizacja. dr inż. Jacek Naruniec PROE wykład 9 C++11, rzutowanie, optymalizacja dr inż. Jacek Naruniec Rzutowanie Różne typy rzutowania są szczególnie istotne przy dziedziczeniu. Załóżmy sobie prostą hierarchię klas: A B C Rzutowanie

Bardziej szczegółowo

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to

Bardziej szczegółowo

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 4 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w

Bardziej szczegółowo

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM POLIMORFIZM Podstawowe pytanie, które nieustannie ma towarzyszyć autorowi programowi: czy gdyby nagle okazało się, że jest więcej... (danych na wejściu, typów danych, czynności, które program ma wykonać,

Bardziej szczegółowo

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji Politechnika Białostocka Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej Instrukcja do pracowni specjalistycznej z przedmiotu Obiektowe programowanie aplikacji Kod przedmiotu: TS1C410201

Bardziej szczegółowo

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

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).

Bardziej szczegółowo

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 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

Bardziej szczegółowo

Szablony funkcji i klas (templates)

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

Bardziej szczegółowo

Języki i techniki programowania Ćwiczenia 2

Języki i techniki programowania Ćwiczenia 2 Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++...

Bardziej szczegółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

DYNAMICZNE PRZYDZIELANIE PAMIECI DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 10 I 2012 1 Zabronienie kopiowania Czasami nie ma sensu, żeby obiekty pewnego typu były kopiowane z innych obiektów.

Bardziej szczegółowo

Wstęp do programowania obiektowego. Wykład 2

Wstęp do programowania obiektowego. Wykład 2 Wstęp do programowania obiektowego Wykład 2 1 CECHY I KONCEPCJA PROGRAMOWANIA OBIEKTOWEGO 2 Cechy programowania obiektowego Dla wielu problemów podejście obiektowe jest zgodne z rzeczywistością (łatwe

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d. Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 7 Przegląd typów strukturalnych - klasy i obiekty - c.d. Klasa - powtórzenie

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

Bardziej szczegółowo

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. Struktura programu Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. W ostatnich latach najbardziej używanym stylem oprogramowania

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Wprowadzenie w dziedziczenie Klasa D dziedziczy klasę B: B klasa bazowa D klasa pochodna Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Najpierw jest tworzona klasa bazowa,

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

Zaawansowane programowanie w języku C++ Przeciążanie operatorów Zaawansowane programowanie w języku C++ Przeciążanie operatorów Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe Zaawansowane programowanie w języku C++ Programowanie obiektowe Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

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 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

Bardziej szczegółowo

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać

Bardziej szczegółowo

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

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.: Program przedmiotu Programowanie Obiektowe (język C++) Wykład 1. Definiowanie prostych klas. Przykłady. Przypomnienie: typy referencyjne, domyślne wartości argumentów, przeciąŝanie funkcji. Konstruktory,

Bardziej szczegółowo

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

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Wirtualne destruktory class A int* a; A(int _a) a = new int(_a);} virtual ~A() delete a;} class B: public A double* b;

Bardziej szczegółowo

Wstęp do Programowania 2

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:

Bardziej szczegółowo

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h] 1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie

Bardziej szczegółowo

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Wykład 7 - sprytne wskaźniki. 20 kwietnia 2007 Potrzeba współdzielenia kodu źródłowego Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania największego elementu) Szablony mechanizm

Bardziej szczegółowo