Nowoczesny C++ Rafał Wasilewski 1
|
|
- Mateusz Piątkowski
- 7 lat temu
- Przeglądów:
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 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ółowoIMIĘ 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ółowoProgramowanie 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ółowoPARADYGMATY 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ółowoSzablony 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ółowoProgramowanie 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ółowoLab 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ółowoC++ - 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ółowo1. 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ółowoProgramowanie 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ółowoTechniki 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ółowoWykł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ółowoInformacje 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ółowoWykł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ółowoTEMAT : 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ółowoC++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ółowoPodstawy 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ółowoPROE 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ółowoProgramowanie 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ółowopublic: // 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ółowoObszar 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ółowoWskaź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ółowoProgramowanie, 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ółowoInformatyka 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ółowoWykł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ółowoC++ - 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ółowoPROE 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ółowoInstytut 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ółowoProgramowanie 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ółowoW2 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ółowoPodstawy 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ółowoObiekt 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ółowoZASADY 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ółowoZaawansowane 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ółowoKonstruktor 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ółowoZaawansowane 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ółowoSTL: 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ółowoC++ - 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ółowoStrona 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ółowoWskaź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ółowoPodstawy 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ółowoKonstruktory. 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ółowoKlasy 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ółowoProgramowanie 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ółowoC++ - 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ółowoAutomatyczne 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ółowoJava: 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ółowoPodczas 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ółowoAutomatyczne 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ółowoJeś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ółowo6 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ółowoJava - 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ółowoAutomatyczne 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ółowoJę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ółowo2. 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ółowoSzablony 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ółowoTypy 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ółowoC++ - 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ółowoC++ 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ółowoRozdział 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ółowo1. 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ółowoStandard 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ółowoDziedziczenie 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ółowoZaawansowane 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ółowoKlasa 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ółowoWskaź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ółowoC++ - 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ółowoWyliczanie 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ółowoWykł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ółowoWykł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ółowoDariusz 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ółowoPROE 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ółowoWskaź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ółowoMateriał 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ółowoC++ - 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ółowoInstrukcja 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ółowoFunkcje 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ółowoProgramowanie 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ółowoSzablony 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ółowoJę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ółowoDYNAMICZNE 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ółowoProgramowanie 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ółowoWstę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ółowoProgramowanie 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ółowoJAVA. 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ółowoPodstawy 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ółowoStruktura 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ółowoMETODY 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ółowoWprowadzenie 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ółowoZaawansowane 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ółowoZaawansowane 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ółowoProgramowanie 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ółowoProgramowanie 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ółowoProgramowanie 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ółowoWykł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ółowoProgramowanie 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ółowoWstę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ółowoLaboratorium 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ółowoKurs 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ółowoZaawansowane 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