Język C++ jest wieloparadygmatowym językiem programowania. Stworzony w latach osiemdziesiątych XX wieku przez Bjarne Stroustrupa

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

Download "Język C++ jest wieloparadygmatowym językiem programowania. Stworzony w latach osiemdziesiątych XX wieku przez Bjarne Stroustrupa"

Transkrypt

1 Język C++ historia, współczesność, przyszłość Język C++ jest wieloparadygmatowym językiem programowania. Stworzony w latach osiemdziesiątych XX wieku przez Bjarne Stroustrupa C++98 ISO/IEC 14882:1998 C++03 ISO/IEC 14882:2003 C++11 ISO/IEC 14882:2011

2 C++11 dlaczego standard jest ważny? Standard to brak zależności od rodzaju kompilatora systemu operacyjnego CPU Standard odwołuje się / opisuje działanie abstrakcyjnej maszyny. Kompilator ma za zadanie zrealizować ten opis na konkretnym sprzęcie. C++98/C++03 abstrakcyjna maszyna była jednowątkowa C++11 abstrakcyjna maszyna zaprojektowana jako wielowątkowa model pamięci (organizacja pamięci i sposoby dostępu do pamięci) na niskim poziomie gwarantowane operacje atomowe w określonej kolejności

3 Główne cechy języka: C++ podstawowe cechy język kompilowalny, ogólnego przeznaczenia, określany jako język średniego poziomu dokument opisujący standard C++11 ma 1338 stron silna (statyczna) kontrola typów podczas kompilacji: pewna forma weryfikacji poprawności kodu, pozwalająca na wczesne wykrycie błędów lub niezamierzonego działania język swobodnego formatu, rozmieszczenie znaków na stronie nie ma znaczenia, ale każda instrukcja musi być zakończona średnikiem ; C++ nie wspiera własności specyficznych dla danej platformy lub niebędących własnościami ogólnego przeznaczenia

4 C++ style programowania C++ nie narzuca żadnego stylu, daje programiście możliwość wyboru. programowanie proceduralne: organizowanie kodu w postaci procedur, wykonujących ściśle określone operacje, dane nie powiązane z procedurami, jako parametry wywołania procedur programowanie obiektowe: zbiór obiektów komunikujących się pomiędzy sobą w celu wykonywania zadań, obiekt to element łączący stan (dane) i zachowanie (metody) programowanie funkcjami wirtualnymi programowanie uogólnione: kod programu bez wcześniejszej znajomości typów danych, szukanie i systematyka abstrakcyjnych reprezentacji efektywnych algorytmów, struktur danych i innych elementów programowych programowanie szablonami

5 C++ literatura (1) kanon literatury International Standard (można kupić cena zaporowa) ISO/IEC 14882:2011(E) Bjarne Stroustrup Język C++ Programowanie. Teoria i praktyka z wykorzystaniem C++ (Wyd. II popr.) C++11 Final Document N3290 ( )

6 C++ literatura (2) stare ale jare (niestety, nie C++11) Bruce Eckel Thinking in C++, vol. I i II (po angielsku on-line) Jerzy Grębosz Symfonia C++ Standard (C++03) Pasja C++ (niestety stare)

7 C++ literatura (3) Siddhartha Rao C++. Dla każdego. Wydanie VII Nicholas A. Solter, Scott J. Kleper C++ Zaawansowane programowanie Stephen Prata Język C++. Szkoła programowania. Wydanie VI Wydanie III po angielsku

8 C++ literatura (4) Anthony Williams Język C++ i przetwarzanie współbieżne w akcji D. Ryan Stephens C++ Receptury (O Reilly) Nicolai M. Josuttis C++. Biblioteka standardowa. Podręcznik programisty David Vandevoorde, Nicolai M. Josuttis C++ szablony. Vademecum profesjonalisty Wydanie II po angielsku Aktualizacja w roku 2015

9 C++ literatura (5) Scott Meyers Herb Sutter C++ 50 efektywnych sposobów na udoskonalenie Twoich programów Język C++ bardziej efektywny STL w praktyce: 50 sposobów efektywnego wykorzystania KURSY DOSTĘPNE ON-LINE Karol Xion Kuczmarski Kurs C++ (Megatutorial) Sektor van Skijlen C++ bez cholesterolu Piotr Białas, Wojciech Palacz Zaawansowane C++ pl.wikibooks.org/wiki/c++ niekompletny jeszcze Frank B. Brokken C++ Annotations Ver. 9.8.x Wyjątkowy język C++ 47 łamigłówek Wyjątkowy język C++ 40 nowych łamigłówek Niezwykły styl języka C++ 40 nowych łamigłówek Język C++ Standardy kodowania 101 zasad (współautor: Andrei Alexandrescu)

10 Używanie gcc zamiast g++ Twój edytor i kompilator GCC (GNU Compiler Collection) kompiluje różne języki (C, C++, Objective-C, Objective-C++, Java, Fortran, Ada). gcc rozpoznaje kod źródłowy C++ po rozszerzeniach:.c,.cc,.cpp,.cpp,.c++,.cp,.cxx gcc nie konsoliduje skompilowanego kodu z biblioteką standardową c++ jeśli użyjesz gcc to będziesz musiał podać ręcznie ścieżkę do plików nagłówkowych oraz do biblioteki standardowej! Nie utrudniajmy sobie życia i używajmy g++ W przypadku Dev-C++ chodzi o zapisanie pliku źródłowego z rozszerzeniem.cpp

11 Kompilator i konsolidator: gcc.gnu.org (g++) Kompilator g++ tłumaczy kod źródłowy na język assembler lub rozkazy komputera Konsolidator g++ (linker) dopasowuje odwołania symboli do ich definicji Najnowsze wersje wspierają standard C++11 (wersja 4.9.1), a także C++14 Program zarządzający bibliotekami ar, ranlib (archiver, librarian) biblioteki statyczne.a (oraz pliki obiektowe.o) wymagane do skonsolidowania pliku wykonywalnego podczas linkowania biblioteki dynamiczne.so zawierają kod maszynowy ładowany do pamięci po uruchomieniu wykorzystującego je programu, muszą więc być dostępne podczas uruchamiania programu Warto zapoznać się z narzędziem make

12 Kompilator wsparcie nowego standardu Kompilowanie kodu według nowego standardu Wsparcie kompilatora dla standardu C++11 (C++14) wymaga dodatkowej opcji (flagi): g++ -std=c++11 g++ -std=c++1y Przykładowo (linux): Program jest w katalogu /usr/bin Pliki nagłówkowe w katalogu /usr/include/c++/4.8 Biblioteki w katalogu /usr/lib/gcc/i486-linux-gnu/4.8 Na pracowni komputerowej kompilator g jest dostępny tylko w nowych instalacjach (Dev-C )

13 Kompilowanie i linkowanie (konsolidacja) Prosty program o nazwie myprog z pliku prog1.cc g++ -std=c++11 -o myprog prog1.cc // to samo: g++ -std=c++11 prog1.cc -o myprog Plik obiektowy (bez konsolidacji do programu) g++ -std=c++11 -c -o prog1.o prog1.cc Konsolidacja do programu wykonalnego g++ -std=c++11 -o myprog prog1.o Uruchomienie programu (linux)./myprog gdzie. (kropka) oznacza pełną nazwę ścieżki, chyba że ścieżka do katalogu z programem jest w zmiennej PATH

14 Kompilatory kilka uwag Można mieć zainstalowane kilka wersji g++ oraz biblioteki standardowej. Napisz: g++ i postukaj tab (pokażą się wszystkie programy zaczynające się na g++) Zwykle g++ to link symboliczny do jednej z wersji. Sprawdzenie wersji: g++ -v // lub: g++ --version Inne kompilatory warte uwagi: clang ver. 3.5, Intel C++ ver. 14, Microsoft Visual Studio C Kompilowanie plików nagłówkowych niektóre kompilatory pozwalają na prekompilowanie plików nagłówkowych, w dużych projektach znacznie może to przyspieszyć proces kompilacji g++ kompilując plik.h tworzy plik z rozszerzeniem.h.gch prekompilowany plik jeśli znaleziony, może być brany jako pierwszy przed plikiem.h student robi to zwykle przez pomyłkę, niepotrzebnie umieszczając na liście plików źródłowych do kompilowania również pliki.h (może to prowadzić do zaskakujących problemów w stylu edytuję plik.h i nic się nie dzieje )

15 Pierwszy program Program wymaga napisania funkcji: auto main() -> int { } lub int main() { } W kodzie tylko jedna funkcja main. Uwaga: dawniej (przed rokiem 1998) dopuszczano postać funkcji zwracającej void (tzn. nic ), teraz musi zwracać int. Paradoksalnie, jest to jedyna funkcja, w której (skoro coś zwraca) nie trzeba pisać instrukcji return. Można (ale nie trzeba) jawnie napisać: int main() { return 0; }

16 Pierwszy program: średnik Uważaj na średnik są miejsca, w których średnik jest konieczny, a są, w których jest zbędny lub nieprawidłowy. int fun3() { return 2; } ; Nie stawiaj średnika za nawiasem kończącym definicję funkcji jest niepotrzebny! #include mojplik.h ; #define FLAGA ; Nie stawiaj średnika na końcu dyrektywy preprocesora to jest błąd! class Klasa { } ; Średnik konieczny jest na końcu definicji klasy! for (int i=0; i<10; ++i); // tutaj instrukcja, którą może ktoś // zamierzał wykonać 10 razy Przykład kompilującego się kodu, w którym przez pomyłkę mamy niezamierzone działanie

17 Pierwszy program który coś robi #include <iostream> using namespace std; int main() { cout << "I am Jan B. " << "za zycia napisalem ponad " << 100 << " ksiazek!\n"; cout << "A Ty ile napisales: "; int liczba; cin >> liczba; if (liczba < 100) cout << "\n Tak malo!"; return 0; // return EXIT_SUCCESS } #include <iostream.h> // NIE UŻYWAĆ czasem implementowane tak: #include <iostream> using namespace std; w nowych kompilatorach ostrzeżenia, a nawet może się nie skompilować Można też wybrać konkretne using std::cout; using std::cin; Albo podczas wywołania pisać std::cout oraz std::cin itd. Biblioteki z C: #include <cstdlib> #include <cstdio> #include <cassert>

18 Zajrzyjmy w głąb <iostream> #include <ostream> #include <istream> extern istream cin; extern ostream cout; extern ostream cerr; extern ostream clog; Deklaracje obiektów odpowiadających za pracę na strumieniu wejście / wyjście. Obiekty konstruowane przed main() Hierarchia klas odpowiedzialnych za pracę na strumieniach cin obiekt odpowiedzialny za obsługę standardowego strumienia wejściowego (zwykle powiązanego z klawiaturą), wywołanie powoduje opróżnienie buforu cout cout obiekt odpowiedzialny za strumień wyjściowy (zwykle powiązany z monitorem) cerr obiekt standardowego strumienia komunikatów o błędach, powiązany przez system z monitorem, strumień niebuforowany clog obiekt wyprowadzany standardowo tak jak cerr, strumień buforowany

19 Operatory, manipulatory, znaki specjalne operator<< oraz operator>> są to operatory przesunięcia bitowego, jednak dla obiektów strumienia są przeciążone i stają się operatorami wejścia/wyjścia Co lepiej na końcu: std::endl czy \n? MANIPULATORY ( tak naprawdę funkcje) endl dodaje do buforu znak \n oraz wykonuje flush opróżnienie buforu ends wkłada znak kończący łańcuch znakowy, czyli symbol zerowy \0 flush opróżnia bufor ws czyta i ignoruje białe znaki Kod dla guru (przykład): ostream& ostream::operator<< ( ostream& (*op) (ostream&) ) { return (*op) (*this); } std::ostream& std::endl (std::ostream& s) { s.put('\n'); } s.flush(); return s; Można tak: std::cout << std::endl; lub tak: std::endl ( std::cout ); ZNAKI SPECJALNE (stałe znakowe) \n nowa linia \r powrót do początku linii \t pozioma tabulacja \a alarm dźwiękowy \0 symbol zerowy (koniec łańcucha) MNIEJ UŻYWANE \v pionowa tabulacja \b powrót o jedną pozycję \f nowa strona (drukarka) \? znak zapytania KONIECZNE W ŁAŃCUCHU ZNAKOWYM \\ lewy ukośnik \ apostrof \ cudzysłów

20 Deklaracja co to jest? Deklaracja to wprowadzenie w danej jednostce translacji (pliku) nazwy (lub nazw), albo redeklaracja nazw wprowadzonych poprzednimi deklaracjami. Deklaracje generalnie określają jak mają być rozumiane dane nazwy. Deklaracja może być też definicją, chyba że (i wtedy są to tylko deklaracje): deklarujemy funkcję bez definiowania jej ciała void fun( double d, short n, int ); nie ma definicji (ciała) funkcji, czyli części ujętej w nawiasy { } to jest to tylko deklaracja deklaracja poprzedzona jest specyfikatorem extern, w znaczeniu obiektu zdefiniowanego w innym pliku extern double d; deklarujemy, że w innym pliku będzie zdefiniowana zmienna typu double o nazwie d. UWAGA: jeśli użyjemy specyfikatora extern oraz inicjalizujemy zmienną, np. extern double d = 3.14; to oznacza to już definicję a nie deklarację! deklaracja z użyciem extern jako sposób konsolidacji (linkowania) kodu extern C int fun ( float ); extern C { /* tutaj lista deklaracj */ } gdy chcemy zlinkować z kodem z innego języka, musimy zadeklarować nazwy obiektów tam zdefiniowanych

21 Deklaracje (2) deklarujemy statyczną składową w definicji klasy class Foo { static int n; }; deklarujemy nazwę klasy (bez jej definiowania): deklarujemy (silny) typ wyliczeniowy (C++11) enum class EColor; enum struct EShape : char; Deklaracjami nazywamy również: deklarację z użyciem typedef zmienna statyczna w definicji klasy to dopiero jej deklaracja jak się później dowiemy, taką zmienną definiuje się dopiero poza ciałem klasy typedef int Calkowity, *PtrCalkowity; Calkowity n1; PtrCalkowity ptr1; deklarację użycia using lub dyrektywę using using std::cout; using namespace std; class Foo; klasa wyliczeniowa (albo silny typ wyliczeniowy ) pozwala na uprzednią deklarację wraz ze specyfikacją typy danych wyliczeniowych (typ musi być całkowity) n1 jest typu int, zaś ptr1 jest typu wskaźnik do int deklaracja użycia czegoś dyrektywa użycia którejś przestrzeni nazw

22 Definicje reguła jednej definicji (One Definition Rule) Jedna definicja żadna jednostka translacji (plik) nie może zawierać więcej niż jednej definicji jakiejkolwiek zmiennej, funkcji, klasy, typu wyliczeniowego lub szablonu. Definicja może się znajdować w programie, zewnętrznej bibliotece (standardowej, użytkownika). Definicja klasy konieczna jest w danym pliku, gdy typ klasy używany jest w sposób wymagający znajomości kompletnej definicji. One ring to rule them all, one ring to find them, One ring to bring them all and in the darkness bind them. class Foo; struct Foo* ptr1; Foo *ptr2; w tych przypadkach nie ma konieczności znajomości definicji klasy, wystarczy deklaracja jej nazwy Czasami definicja może się powtórzyć w różnych plikach. Dotyczy to klasy, typu wyliczeniowego, funkcji inline (extern inline), szablonu klasy, statycznej zmiennej oraz metody składowej w szablonie klasy, niestatycznego szablonu funkcji, specjalizacji szablonu (C ) wszystko to pod pewnymi warunkami! (zasadniczo jest to powtórzenie tego samego kodu z ew. dopisanymi wartościami domyślnymi funkcji)

23 Organizacja kodu (header guard) DEKLARACJE zmienny, funkcji nie-inline lub DEFINICJE funkcji inline DEFINICJE klas, DEFINICJE szablonów plik nagłówkowy (.h ) Cytat z Megatutorial-u Karola Kuczmarskiego (Państwa niewiele starszego kolegi ) Dyrektywa #include jest głupia jak cały preprocesor. Wielokrotne włączenie tego samego nagłówka (#include) wielokrotna definicja pogwałcenie reguły ODR błąd! Aby temu zapobiec, w plikach nagłówkowych zawsze korzystamy z dyrektyw preprocesora (blokada, tzw. header guard) #ifndef FIGURA_H #define FIGURA_H // tutaj cała zawartość pliku #endif // FIGURA_H DEFINICJE zmiennych, funkcji, metod klas plik źródłowy (.cc ) Nie korzystamy z dyrektywy #pragma once pierwotnie działała tylko w niektórych kompilatorach, np. Visual C++ pragma nie jest polecana przez twórców gcc jako dyrektywa z definicji zależna od implementacji, choć działa w g++ od ver. 3.4

24 Pułapki myślenia o blokadach header guard (czyli zestaw #ifndef #define #endif) nie chroni przed problemem podczas konsolidacji plików, jeśli w pliku nagłówkowym, włączonym do tych różnych plików, zdefiniowaliśmy coś, co pogwałci ODR. Skompiluje się, ale linker zgłosi multiple definition header guard chroni jeden dany plik źródłowy przed wielokrotnym włączeniem (i kompilacją) tego samego pliku nagłówkowego, wielokrotne włączenie może nastąpić również nie wprost, przez inne włączane pliki plik h1.h plik h2.h plik test.cc plik main.cc #ifndef H1_H #define H1_H void fun() { } #endif #ifndef H2_H #define H2_H #include h1.h // coś jeszcze #endif #include h2.h void fun2() { fun(); } #include h1.h #include h2.h int main() { fun(); } g++ main.cc test.cc o prog /tmp/cccopu18.o: In function `fun()': test.cc:(.text+0x0): multiple definition of `fun()' /tmp/ccgypjjh.o:main.cc:(.text+0x0): first defined here collect2: ld returned 1 exit status

25 Namespace przestrzeń nazw Namespace przestrzeń nazw obszar posiadający swoją nazwę lub bez nazwy, służący do deklaracji. Nazwy zdeklarowane wewnątrz namespace są zamknięte odwołanie do nich możliwe jest poprzez nazwę przestrzeni nazw lub odpowiednią deklarację / dyrektywę użycia. Namespaces służą unikaniu kolizji nazewniczych. Definicja namespace może być rozbita na wiele części i może się znajdować nawet w różnych plikach zatem sami możemy nawet coś dodać do danej przestrzeni nazw nawet tej zdefiniowanej w jakiejś zewnętrznej bibliotece. inline opcjonalnie namespace nazwa opcjonalnie { /* zawartość */ } inline nowość w C++11 w celu wspierania różnych wersji danej biblioteki, czyli ewolucji kodu, ze wskazaniem na bieżącą (np. najnowszą) wersję Cała biblioteka standardowa jest zamknięta w przestrzeni o nazwie std Konieczna zatem jest dyrektywa użycia: using namespace std; ale nigdy w pliku nagłówkowym! W plikach nagłówkowych raczej piszemy std::obiekt, ewentualnie stosujemy deklarację użycia, np. using std::cout

26 Namespace reguły istnienia, tworzenia, użycia Namespace tym samym tylko w przestrzeni globalnej albo (zagnieżdżone) wewnątrz innej przestrzeni namespace nie można zagnieździć (definiować) wewnątrz definicji funkcji (również main) ani nie można zdefiniować wewnątrz klasy using deklaracja/dyrektywa użycia czegoś z przestrzeni nazw void f(); namespace A { void g(); namespace X { } using ::f; // globalne f using A::g; // g z A } void h() { X::f(); // woła ::f X::g(); // woła A::g } namespace A { int i; } namespace A1 { using A::i; using A::i; // tu ok, można powtórzyć } void f() { using A::i; using A::i; // a tu błąd! }

27 Namespace użycie, zagnieżdżenia namespace A { void f(int); } using A::f; // f jest synonimem A::f; // czyli A::f(int) namespace A { void f(char); } void foo() { f( a ); // woła f(int) } // pomimo że f(char) istnieje void bar() { using A::f; // f jest synonimem A::f; // zarówno A::f(int) i A::f(char) f( a ); // woła f(char) } Można dodawać kolejną zawartość przestrzeni nazw (nawet w kolejnych plikach) ale musi być to zrobione w tym samym zasięgu znaczeniowym. Bezpośrednią nadrzędną przestrzenią nazw dla danej deklaracji jest ta przestrzeń, w której deklaracja po raz pierwszy się pojawia. Później definicja (danej deklaracji) może być w innym zakresie, ale z precyzyjną specyfikacją co do pierwotnego wystąpienia deklaracji. namespace A { namespace B { void f(); class C { void m(); }; } void B::f() { extern void h(); // to jest deklaracja A::B::h } void B::C::m() { // definicja metody m() } } Jeśli w dwóch różnych przestrzeniach te same nazwy konflikt w momencie użycia

28 Typy danych oraz specyfikatory Podstawowe typy wbudowane: char, int, float, double wchar_t rozszerzony typ znakowy (wielkość zależna od implementacji) char16_t i char32_t do reprezentacji znaków standardu Unicode Specyfikatory (rozszerzają lub zawężają, ze znakiem lub bez znaku) short long, signed unsigned short int (inaczej: short), int, long int (inaczej: long), long long int (inaczej: long long) oficjalnie w C++11 ze wzg. na zgodność z C99 float, double, long double Typ bool true odpowiednik wartości całkowitej 1 (dwa stany logiczne: true, false to są stałe) false - odpowiednik wartości całkowitej 0 nie nadawać stanu logicznego za pomocą operacji arytmetycznej (+ lub -) niejawna konwersja typów operatory: &&! < > <= >= ==!= komendy sterujące: if, for, while, do,? : kompilator przekształca int w bool

29 typedef, using typedef synonim typu istniejącego (nie żadna nowa definicja), najczęściej używany do uproszczenia zapisu (wiele razy w bibliotece standardowej) np. typedef basic_fstream<char> fstream; // w nagłówku fstream typedef basic_string<char> string; // w nagłówku string using może być użyte zamiennie jako typedef typedef std::vector<int>::iterator It; using It = std::vector<int>::iterator; // te dwie linie robią to samo typedef const char* (*Fptr)( double ); using Fptr = const char* (*) (double); // wskaźnik do funkcji, też to samo co wyżej

30 Zasięg zmiennych, przesłanianie przykład int a = 1; // zmienna globalna zakomentowanie globalnej zmiennej i próba namespace mojeklocki { int a = 7; int b = 8; } odwołania się do niej spowoduje błąd kompilacji namespace { int c = 99; // int a = 3; spowodowałoby kolizję ze zmienną globalną } int main() { int a = 2; { int a = 3, c = 100; for (int i=0; i<10; ++i); // nic nie robi, bo uwaga - gdzie kończy się instrukcja cout << "a lokalne = "<< a <<endl; // 3 using namespace mojeklocki; cout << "a lokalne = "<< a <<endl; // 3 cout << "a z mojeklocki = "<< mojeklocki::a <<endl; // 7 cout << "b z mojeklocki = "<< b <<endl; // 8 int b = 12; cout << "b lokalne = "<< b <<endl; // 12 cout << "a nielokalne = "<< ::a <<endl; // 1 cout << "c z nienazwanej przestrzeni " << ::c << endl; // 99, to też jest zmienna globalna } cout << "a lokalne = "<< a <<endl; // 2 }

31 Rodzaje obiektów i ich cechy (static global) Obiekt globalny istnieje przez cały czas wykonania programu domyślnie łączony zewnętrznie deklaracja extern można użyć w innych plikach źródłowych deklaracją static zasięg można ograniczyć do pliku wystąpienia definicji (bez kolizji nazw) lepszy sposób na łączenie wewnętrzne użycie nienazwanej przestrzeni nazw (namespace) jeśli const, to zachowuje się jak static (chyba że extern const) domyślnie inicjowany wartością zera Statyczny obiekt lokalny istnieje przez cały czas wykonania programu deklaracja z modyfikatorem static wartość takiego obiektu przetrwa między kolejnymi wywołaniami funkcji zasięg ograniczony jest do bieżącego kontekstu w klasie jeden egzemplarz dla wszystkich obiektów klasy domyślnie inicjowany wartością zera pamięć statyczna

32 Obiekty globalne i statyczne (globalne) przykłady // w przestrzeni nazw lub przestrzeni globalnej int i; // domyślnie łączenie zewnętrzne const int ci = 0; // domyślnie globalny const jest static (łączony wewnętrznie) extern const int eci; // jawna deklaracja łączenia zewnętrznego static int si; // jawnie static // podobnie funkcje uwaga nie ma globalnych funkcji stałych (const) int foo(); // domyślnie łączenie zewnętrzne static int bar(); // jawna deklaracja static // nienazwana przestrzeń nazw jako polecany sposób na ograniczenie zakresu // widzialności nazw do danej jednostki translacji namespace { int i; // mimo łączenia zewnętrznego niedostępne // w innych jednostkach translacji class niewidoczna_dla_innych { }; }

33 Rodzaje obiektów i ich cechy (stack, heap) Obiekt automatyczny obiekt lokalny przydział pamięci następuje automatycznie w chwili wywołania funkcji czas trwania obiektu kończy się wraz z zakończeniem bloku, w którym został zaalokowany zasięg ograniczony jest do bieżącego kontekstu należy uważać na wskaźniki i referencje do obiektów lokalnych obiekt domyślnie nie jest inicjowany Obiekt z czasem trwania określanym przez programistę obiekt z pamięcią przydzielaną dynamicznie (operator new) czas życia do usunięcia operatorem delete obiekt bez nazwy identyfikowany pośrednio przez wskaźnik zawieszony wskaźnik - wskazujący na nieobsługiwany obszar pamięci (wskaźnik zwisający) wyciek pamięci - obszar pamięci przydzielany dynamicznie na który nie wskazuje żaden wskaźnik stos sterta

34 Stałe (const) a preprocesor za pomocą preprocesora #define PI od miejsca zdefiniowana do końca pliku modyfikator const const float pi = ; zasięg taki jak zasięg zmiennej, typ musi być określony, stała musi być zainicjalizowana stałej zdefiniowanej za pomocą preprocesora nie można śledzić bo polega na zamianie jednego symbolu na np. podaną wartość, zdecydowanie definiujmy stałe jako zmienne danego typu preprocesor można czasem użyć jako sprytnej makrodefinicji, np. wypisywania kontrolnego zmiennych (za Bruce Eckelem): #define PRINT (STR, VAR) cout << STR = << VAR << endl #define PR (x) cout << #x = << x << \n wtedy gdzieś w kodzie: PRINT( wartosc, a );

35 auto dedukcja typu (C++11) auto dawniej oznaczało tylko zmienną lokalną (automatyczną) dedukcji typu w oparciu o typ inicjalizatora lub typu zwracanego przez funkcję auto i = 7; // typ int auto x = wyrażenie // x będzie typu zwracanego przez wyrażenie dedukcja odbywa się tak jak w szablonach, z wyjątkiem rozpoznawania listy { a, b, c }, którą auto widzi jako std::initializer_list<t> (gdzie T to typ a, b, c) template<class T> int whatever(t t) { T x; // równoważne do auto x poza szablonem };

36 auto zastosowania ( C++11 ) przykłady auto a = 7; // a jest typu int const auto *ptr = &a, b = 5; // ptr typu const int*, b typu const int static auto d = 3.14; // d typu double auto x = { 1, 2, 3 }; // x typu std::initializer_list<int> działa również z operatorem new new auto(1); // alokowanym typem jest int auto z = new auto( a ); // alokowanym typem jest char, z jest typu char* szczególnie wygodne do dedukcji typów iteratorów for( auto i = m.begin(); i!= m.end(); ++i ) // niech m jest typu map<int,string> const auto& y = m; // y jest typu const std::map<int, std::string>& niestety, wewnątrz wyrażeń lambda auto nie działa

37 auto zastosowania ( C++11 ) zmienne zadeklarowane za pomocą auto są nadal wielkościami statycznymi, stąd niemożliwe jest: void fun( auto arg ) { } // źle: autodedukcja typu argumentu niemożliwa class Foo { auto m = 1; // źle: autodedukcja typu zwykłej składowej klasy niemożliwa // bo np. auto m = f(); wprowadzałoby spory problem w szukaniu // właściwej interpretacji tego czym jest f() }; auto tablica[5]; // źle: autodedukcja typu z którego zbudowana jest tablica możliwe jest class Foo { static const auto n = 0; // static tak }; uwaga auto s = hello world ; // jest typu const char* auto& s = hello world ; // jest typu referencja do const char[12] czyli tablicy

38 auto nowe metody w kontenerach, nowa pętla for ( C++11 ) W kontekście auto przydatne są nowe metody kontenerów: zwracają jawnie stałe iteratory: cbegin(), cend(), crbegin(), crend() auto ci = m.cbegin(); // ci typu std::map<int, std::string>::const_iterator Nowa składnia dla pętli for (tzw. range-based loop) vector<int> v { 1,2,3,4,5 }; for ( int i : v ) cout << i << endl; // i bezpośrednio każdym elementem wektora for ( auto i : v ) cout << i << endl; // to samo co powyżej for ( int& i : v ) cout << ++i; // może być też referencją i zmieniać zawartość! for ( auto& i : v ) cout << ++i; // to samo co powyżej for (const int i : v ) jakasmetoda( i ); // const/volatile też możliwe Można przebiegać po tablicach, kontenerach oraz dowolnych typach wyposażonych w iteratory, zwracane przez begin() i end() short tablica[5]; for ( auto& t : tablica ) { t = -t; } std::unordered_multiset<std::shared_ptr< T >> obj; for ( const auto& r : obj ) cout << r; // wypisuje wskaźnik // pytanie: czemu powyższe przez referencję? w C++11 nie ma problemu zagnieżdżonych nawiasów szablonów, nie trzeba rozdzielać spacją

39 auto referencje, modyfikatory ( C++11 ) Dla zmiennych nie zadeklarowanych wprost jako referencje, modyfikatory const/volatile na najwyższym poziomie są ignorowane: const vector<int> w; auto v1 = w; // v1 typu vector<int>, const zignorowane auto& v2 = w; // v2 typu const vector<int>& - ale jeśli przez referencję, to ok Tablice i nazwy funkcji redukują się do wskaźników: double tablica[5]; auto t1 = tablica; // t1 typu double* - to się nazywa array decay to pointer auto& t2 = tablica; // t2 typu double(&)[5] właściwy typ tylko jeśli przez referencję Jeżeli const/volatile nie na najwyższym poziomie, to zostają: auto i = 10; map<int, string> m; const auto *pi = &i; // pi jest typu const int* const auto& pm = m; // pm typu const map<int, string>& Za pomocą auto można deklarować więcej zmiennych w linii: auto zmienna = s, *ptr_zmienna = &s; // dedukcja typu inicjalizatora ten sam typ auto i = 3, d = 3.14; // błąd rożne typy inicjalizatorów

40 Operatory zwracają wartości na podstawie argumentów (argumentu) 18 poziomów ważności nie uczyć się wszystkiego! raczej używać nawiasów ( ) do czytelnego oddzielenia; niektóre zapamiętać operatory =, ++, -- dodatkowo zmieniają wartość argumentu (skutek uboczny, ang. side effect) operator przypisania = kopiuje p-wartość do l-wartości operatory matematyczne +, -, *, /, % można połączyć z operatorem przypisania +=, -=, *=, /=, %= zatem np. b %= 4; równoważne jest b = b % 4; operator % (modulo) tylko z liczbami typu całkowitego operatory relacji <, >, <=, >=, ==,!= zwracają wartość logiczną operatory logiczne && (iloczyn), (suma) operatory bitowe & (koniunkcja), (alternatywa), ^ (różnica symetryczna), ~ (bitowy operator negacji)

41 Operatory ciąg dalszy operatory przesunięć <<, >> jeśli po lewej liczba ze znakiem, to przesunięcie >> nie musi być operacja logiczną można łączyć z operatorem przypisania <<=, >>= bity przesunięte poza granicę są tracone operatory jednoargumentowe! (negacji logicznej), -, + operatory adresu &, wyłuskania *, -> i rzutowania rzutowanie: float a = 3.14; int b = (int)a; albo int b = int(a); operatory alokacji i usuwania: new, delete operator trójargumentowy? : co się stanie: int a = --b? b : (b = -10); // jeśli b=1, to a=-10 operator, zwraca wartość ostatniego z wyrażeń operator sizeof

42 Operatory tabela ważności Level Operator Description Grouping 1 :: scope Left-to-right 2 () []. -> dynamic_cast static_cast reinterpret_cast const_cast typeid postfix Left-to-right ~! sizeof new delete unary (prefix) 3 * & indirection and reference (pointers) Right-to-left + - unary sign operator 4 (type) type casting Right-to-left 5.* ->* pointer-to-member Left-to-right 6 * / % multiplicative Left-to-right additive Left-to-right 8 << >> shift Left-to-right 9 < > <= >= relational Left-to-right 10 ==!= equality Left-to-right 11 & bitwise AND Left-to-right 12 ^ bitwise XOR Left-to-right 13 bitwise OR Left-to-right 14 && logical AND Left-to-right 15 logical OR Left-to-right 16?: conditional Right-to-left 17 = *= /= %= += -= >>= <<= &= ^= = assignment Right-to-left 18, comma Left-to-right

43 Operatory rzutowanie static_cast (konwersje niejawne, zawężające, zmieniające typ podczas kompilowania) int b = static_cast<int>(a); void *vp; int *num = static_cast<int*>(vp); const_cast (od typów z modyfikatowem const lub volatile do takich samych typów bez modyfikatora lub w drugą stronę) reinterpret_cast (pełna odpowiedzialność użytkownika, bez kontroli) dynamic_cast (rzutowanie "w dół" od abstrakcyjnego typu ogólnego do typu pochodnego zajdzie gdy operacja taka ma sens podczas wykonywania programu)

44 Typy złożone w c++ (litania) Poprzez złożone typy w języku c++ rozumie się: tablice obiektów danego typu funkcje, mające parametry danego typu, a zwracające void lub referencje lub obiekty danego typu wskaźniki do void lub obiektów, lub funkcji danego typu (włączając w to statyczne składniki klasy) referencje do obiektów lub funkcji (tzw. referencje lewej wartości i referencje prawej wartości) klasy, zawierające obiekty różnych typów oraz metody składowe, wraz z odpowiednimi ograniczeniami dostępu unie, które są rodzajem klasy, mogącej zawierać obiekt różnych typów, w różnych chwilach czasu typy wyliczeniowe, zawierające listę nazwanych stałych wartości wskaźniki do niestatycznych składowych klasy

Język C++ jest wieloparadygmatowym językiem programowania. Stworzony w latach osiemdziesiątych XX wieku przez Bjarne Stroustrupa

Język C++ jest wieloparadygmatowym językiem programowania. Stworzony w latach osiemdziesiątych XX wieku przez Bjarne Stroustrupa Język C++ historia, współczesność, przyszłość Język C++ jest wieloparadygmatowym językiem programowania. Stworzony w latach osiemdziesiątych XX wieku przez Bjarne Stroustrupa C++98 ISO/IEC 14882:1998 C++03

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

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

Operatory na rzecz typu TString

Operatory na rzecz typu TString Operatory na rzecz typu TString Dopiszmy w definicji klasy operator[], dzięki któremu potraktujemy obiekt jak tablicę class TString { public: char& operator[]( size_t n ); const char& operator[]( size_t

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

Język C++ Różnice między C a C++

Język C++ Różnice między C a C++ Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci

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

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi 1. Napisz wskaźnik do funkcji fun tak zdeklarowanej: T* fun( int, double const& ) const; definicja wskaźnika musi być precyzyjna, inaczej

Bardziej szczegółowo

Projektowanie klas c.d. Projektowanie klas przykład

Projektowanie klas c.d. Projektowanie klas przykład Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

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

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje. Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using

Bardziej szczegółowo

I - Microsoft Visual Studio C++

I - Microsoft Visual Studio C++ I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i

Bardziej szczegółowo

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor

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

Język C++ wykład VIII

Język C++ wykład VIII Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,

Bardziej szczegółowo

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ IMIĘ i NAZWISKO: przykładowe odpowiedzi NR: 0 EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ 1. Napisz precyzyjnie co to jest ptr jeśli: const * const Foo ptr; ptr to stały wskaźnik do stałego obiektu typu Foo

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

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

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest

Bardziej szczegółowo

Język C zajęcia nr 11. Funkcje

Język C zajęcia nr 11. Funkcje Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji

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

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

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

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

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i

Bardziej szczegółowo

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Wyrażenia 2 Wyrażenia w języku C są bardziej elastyczne niż wyrażenia w jakimkolwiek innym języku

Bardziej szczegółowo

Java Język programowania

Java Język programowania Java Język programowania Język Java Bazuje i jest zbliżony do C/C++ Porosty zbiór typów danych (podział na typy prymitywne i obiektowe) Zarządzanie pamięcią i Garbage Collection Zintegrowana synchronizacja

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

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

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Część 1. Teoria Wyjaśnij pojęcia, podaj przykład: klasa obiekt konstruktor destruktor kapsułkowanie (hermetyzacja) wskaźnik this

Bardziej szczegółowo

Programowanie strukturalne i obiektowe

Programowanie strukturalne i obiektowe Programowanie strukturalne i obiektowe Język C część I Opracował: Grzegorz Flesik Literatura: A. Majczak, Programowanie strukturalne i obiektowe, Helion, Gliwice 2010 P. Domka, M. Łokińska, Programowanie

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Pojęcie struktury i klasy. Konstruktor i destruktor. Spotkanie 08 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Spotkanie 08 Klasy: definicja a deklaracja klasy dane składowe

Bardziej szczegółowo

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java Cechy C++ Język ogólnego przeznaczenia Można programować obiektowo i strukturalnie Bardzo wysoka wydajność kodu wynikowego

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

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

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Temat 1: Podstawowe pojęcia: program, kompilacja, kod Temat 1: Podstawowe pojęcia: program, kompilacja, kod wynikowy. Przykłady najprostszych programów. Definiowanie zmiennych. Typy proste. Operatory: arytmetyczne, przypisania, inkrementacji, dekrementacji,

Bardziej szczegółowo

Języki i metodyka programowania. Wprowadzenie do języka C

Języki i metodyka programowania. Wprowadzenie do języka C Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

Bardziej szczegółowo

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

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

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 1

Programowanie obiektowe w C++ Wykład 1 Programowanie obiektowe w C++ Wykład 1 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) POwCPP 1 / 24 Literatura Prata Stephen, Szkoła programowania. Język C++. Wydawnictwo Helion,

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

2 Przygotował: mgr inż. Maciej Lasota

2 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania

Bardziej szczegółowo

Nowe słowa kluczowe. Komentarze. Wskaźniki typu void. class, delete, new, friend,... /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza)

Nowe słowa kluczowe. Komentarze. Wskaźniki typu void. class, delete, new, friend,... /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza) Różnice między C i C++ (Rozszerzenia C++) Nowe słowa kluczowe class, delete, new, friend,... Komentarze /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza) Wskaźniki typu void W C wskaźniki

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

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

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

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

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include

Bardziej szczegółowo

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 1 - sprawy organizacyjne i wprowadzenie. dr inż. Robert Nowak - p. 1/27 Cel i zakres przedmiotu Umiejętność programowania to umiejętność rozwiazania problemów

Bardziej szczegółowo

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

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

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

PARADYGMATY PROGRAMOWANIA Wykład 3

PARADYGMATY PROGRAMOWANIA Wykład 3 PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

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

Podstawy Programowania Podstawowa składnia języka C++ Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include

Bardziej szczegółowo

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga! Programowanie I O czym będziemy mówili Podstawy programowania w językach proceduralnym ANSI C obiektowym Java Uwaga! podobieństwa w podstawowej strukturze składniowej (zmienne, operatory, instrukcje sterujące...)

Bardziej szczegółowo

10. Programowanie obiektowe w PHP5

10. Programowanie obiektowe w PHP5 Ogólnie definicja klasy wygląda jak w C++. Oczywiście elementy składowe klasy są zmiennymi PHP, stąd nieśmiertelne $. Warto zauważyć, że mogą one mieć wartość HHH mgr inż. Grzegorz Kraszewski TECHNOLOGIE

Bardziej szczegółowo

Język C++ Programowanie obiektowe

Język C++ Programowanie obiektowe Język C++ Programowanie obiektowe Cechy programowania obiektowego abstrakcyjne typy danych hermetyczność obiektów (kapsułkowanie) dziedziczenie polimorfizm Programowanie proceduralne vs. programowanie

Bardziej szczegółowo

Laboratorium 1 - Programowanie proceduralne i obiektowe

Laboratorium 1 - Programowanie proceduralne i obiektowe Laboratorium 1 - Programowanie proceduralne i obiektowe mgr inż. Kajetan Kurus 4 marca 2014 1 Podstawy teoretyczne 1. Programowanie proceduralne (powtórzenie z poprzedniego semestru) (a) Czym się charakteryzuje?

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

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

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak Katedra Elektrotechniki Teoretycznej i Informatyki wykład 12 - sem.iii M. Czyżak Język C - preprocesor Preprocesor C i C++ (cpp) jest programem, który przetwarza tekst programu przed przekazaniem go kompilatorowi.

Bardziej szczegółowo

Język C - podstawowe informacje

Język C - podstawowe informacje Język C - podstawowe informacje Michał Rad AGH Laboratorium Maszyn Elektrycznych 2014-12-05 Outline Program w języku C Funkcje Składnia Instrukcje sterujace Na koniec... Po kolei napisać program (zwykły

Bardziej szczegółowo

KURS C/C++ WYKŁAD 6. Wskaźniki

KURS C/C++ WYKŁAD 6. Wskaźniki Wskaźniki KURS C/C++ WYKŁAD 6 Każda zmienna ma unikalny adres wskazujący początkowy obszar pamięci zajmowany przez tą zmienną. Ilość pamięci zajmowanej przez zmienną zależy od typu zmiennej. Adres można

Bardziej szczegółowo

Wyjątki (exceptions)

Wyjątki (exceptions) Instrukcja laboratoryjna nr 6 Programowanie w języku C 2 (C++ poziom zaawansowany) Wyjątki (exceptions) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp Wyjątki (ang.

Bardziej szczegółowo

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia Zmienna: [] [ '[' ']' ] ['=' ]; Zmienna to fragment pamięci o określonym

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH Akademia Rolnicza im. Augusta Cieszkowskiego w Poznaniu - Instytut Inżynierii Rolniczej - ALGORYTMY I STRUKTURY DANYCH Prowadzący: dr inż. Radosław J. Kozłowski email: rjk@au.poznan.pl www: http://www.au.poznan.pl/~rjk

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

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

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 1 Literatura Literatura podstawowa: Prata Stephen. Szkoła programowania. Język C++. Wydanie V. Helion,

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 3 - polimorfizm. dr inż. Robert Nowak - p. 1/14 Powtórzenie Powtórzenie: klasy autonomiczne: konstruktor, konstruktor kopiujacy, operator przypisania, destruktor

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 30.10.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 30.10.2006 85 / 112 Zgodność typów Rozważmy klasy class A { //... }; class

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

Pakiety i interfejsy. Tomasz Borzyszkowski

Pakiety i interfejsy. Tomasz Borzyszkowski Pakiety i interfejsy Tomasz Borzyszkowski Pakiety podstawy W dotychczasowych przykładach nazwy klas musiały pochodzić z jednej przestrzeni nazw, tj. być niepowtarzalne tak, by nie doprowadzić do kolizji

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 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... 04 X 2011 Wszelkie uwagi, poprawki, braki czy sugestie najlepiej wysyłać na maila. 1. wprowadzenie do Linuksa: kompilacja

Bardziej szczegółowo

Pytania sprawdzające wiedzę z programowania C++

Pytania sprawdzające wiedzę z programowania C++ Pytania sprawdzające wiedzę z programowania C++ Wstęp 1. Zaprezentuj mechanikę tworzenia programu napisanego w języku C++. 2. Co to jest kompilacja? 3. Co to jest konsolidacja? 4. Co to jest kod wykonywalny?

Bardziej szczegółowo

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

Programowanie 2. Język C++. Wykład 1. 1.1 Wstęp... 1 1.2 Obiekty stałe... 3 1.3 Obiekty statyczne... 4 1.4 Wskaźniki... 5 1.5 Referencje... 8 1.6 Wskaźniki do wskaźników... 11 1.7 Definiowanie własnych typów danych, polecenie typedef... 17

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Biblioteka standardowa

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

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ INE 2022 JĘZYKI PROGRAMOWANIA 1 INE 0050 WSTĘP DO PROGRAMOWANIA Programowanie w języku C++ ( wykł. dr Marek Piasecki ) Literatura: do wykładu dowolny podręcznik do języka C++ na laboratoriach Borland C++

Bardziej szczegółowo

Imię i nazwisko: PYTANIA I ODPOWIEDZI Nr 0 EGZAMIN Język C++ 27 czerwca 2011

Imię i nazwisko: PYTANIA I ODPOWIEDZI Nr 0 EGZAMIN Język C++ 27 czerwca 2011 Imię i nazwisko: PYTANIA I ODPOWIEDZI Nr 0 EGZAMIN Język C++ 27 czerwca 2011 1. Mamy obiekt w, który jest typu std::vector. Posortuj obiekt w według kryterium większy niż to znaczy, napisz linijkę

Bardziej szczegółowo

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Jak napisać program obliczający pola powierzchni różnych figur płaskich? Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy

Bardziej szczegółowo

dr inż. Jarosław Forenc

dr inż. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2011/2012 Pracownia nr 9 (20.01.2012) dr inż. Jarosław Forenc Rok

Bardziej szczegółowo

Wykład 1

Wykład 1 Wstęp do programowania 1 Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 1 Wprowadzenie Cel wykładów z programowania proceduralnego Wykład jest poświęcony językowi C i jego

Bardziej szczegółowo

Definiowanie własnych klas

Definiowanie własnych klas Programowanie obiektowe Definiowanie własnych klas Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Definiowanie własnych klas Autor:

Bardziej szczegółowo

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe Wykład 15 Wprowadzenie do języka na bazie a Literatura Podobieństwa i różnice Literatura B.W.Kernighan, D.M.Ritchie Język ANSI Kompilatory Elementarne różnice Turbo Delphi FP Kylix GNU (gcc) GNU ++ (g++)

Bardziej szczegółowo

PROGRAMOWANIE w C prolog

PROGRAMOWANIE w C prolog PROGRAMOWANIE w C prolog dr inż. Jarosław Stańczyk Uniwersytet Przyrodniczy we Wrocławiu Wydział Biologii i Hodowli Zwierząt Katedra Genetyki 1 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014

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

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

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy: Kurs C++ częśd II Podstawowa obsługa konsoli + zmienne. Autor: Dawid Chróścielski. Wprowadzanie i wyprowadzanie danych z/do konsoli. Jak wyprowadzad dane dowiedzieliśmy się już wcześniej (metoda cout z

Bardziej szczegółowo

Podstawy Programowania

Podstawy Programowania Podstawy Programowania dr Elżbieta Gawrońska gawronska@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 1 / 15 Plan wykładu 1 Biblioteka

Bardziej szczegółowo

Część I Programowanie niskiego poziomu w języku C 19

Część I Programowanie niskiego poziomu w języku C 19 Spis treści Przedmowa 13 Wstęp 15 Część I Programowanie niskiego poziomu w języku C 19 Wprowadzenie 21 1 Typy 23 1.1 Fundamentalne typy danych...................... 23 1.2 Typy pochodne.............................

Bardziej szczegółowo

Wprowadzenie do programowania w języku C

Wprowadzenie do programowania w języku C Wprowadzenie do programowania w języku C Część trzecia Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów

Bardziej szczegółowo

Podstawy Programowania

Podstawy Programowania Podstawy Programowania dr Elżbieta Gawrońska gawronska@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 14 1 / 9 Plan wykładu 1 Sesja egzaminacyjna

Bardziej szczegółowo

C++ - [4-7] Polimorfizm

C++ - [4-7] Polimorfizm Slajd 1 z 14 C++ - [4-7] Polimorfizm Nysa 2004-2013. Autor: Wojciech Galiński. wersja dnia 20 maja 2013 r. Slajd 2 z 14 Polimorfizm i klasa polimorficzna POLIMORFIZM (cytat z Wikipedii) (wielopostaciowość)

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

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Turbo Pascal jest językiem wysokiego poziomu, czyli nie jest rozumiany bezpośrednio dla komputera, ale jednocześnie jest wygodny dla programisty,

Bardziej szczegółowo

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18 Literatura Języki i paradygmaty programowania Wykład 2 1. C. S. Horstman, G. Cornell, core Java 2 Podstawy, Helion 2003

Bardziej szczegółowo

Organizacja kursu, paradygmaty, ogólnie o C i C++

Organizacja kursu, paradygmaty, ogólnie o C i C++ Organizacja kursu, paradygmaty, ogólnie o C i C++ Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechniki Wrocławskiej Kurs: Copyright c 2015 Bogdan

Bardziej szczegółowo