Podstawy i języki programowania

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

Download "Podstawy i języki programowania"

Transkrypt

1 Materiały dydaktyczne Podstawy i języki programowania Część trzecia Wprowadzenie do programowania w języku C++ Temat opracowania Łagodny start Autor Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego uczestnictwa w wykładzie. Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne. Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione.

2 Bjarne Stroustrup twórca języka C++ Wprowadzenie do programowania w C++ historia języka Bjarne Stroustrup twórca języka C++, autor książek: Język programowania C++ (ang. The C++ Programing Language), trzy edycje + edycja specjalna; Projektowanie i ewolucja C++ (ang. The Design and Evolution of C++). Urodzony w 1950 w Aarhus (Dania), skończył studia w swym rodzinnym mieście, doktorat obronił na Uniwersytecie w Cambridge. Od 1979 roku związany z centrum badawczym firmy Bell. Aktualnie pracuje jako profesor w Texas A&M University, utrzymując jednocześnie swoje związki z firmą AT&T jako członek zespołu badawczego laboratorium tej firmy. Jak powstał język C++? 1979 Bjarnie Sroustrup, pracujący w Centrum Badań Komputerowych Laboratorium firmy Bell (ang. Computing Science Research Center of Bell Labs) prowadzi badania symulacyjne związane z sieciami komputerowymi. Język Simula, idealny do symulacji pod względem funkcjonalnym jest za mało efektywny. Stroustrup potrzebuje nowego, obiektowego języka programowania łączącego funkcjonalność języka Simula z efektywnością języka C Bjarne Stroustrup projektuje język programowania łączący w sobie cechy języków Simuai i C. Język zostaje nazwany C z klasami (ang. C with Classes). Wersja ta nie zawiera jeszcze znanych aktualnie z C++ rozbudowanych mechanizmów obiektowych Rick Mascitti proponuje nazwę C++ dla nowego języka. Nazwa sugeruje ewolucyjna naturę C++ w stosunku do języka C. Nowy język nie został nazwany D, ponieważ stanowi on rozszerzenie C a nie próbę stworzenia nowego jakościowo języka programowania. Copyright Roman Simiński 2

3 1985 Wprowadzenie do programowania w C++ historia języka Język C++ zostaje zaprezentowany publicznie z możliwością wykorzystania poza Laboratorium Bell. Powstaje pierwszy komercyjny kompilator C++ : cfront. Jest to tak na prawdę translator, tłumaczący kod w języku C++ na kod w języku C, kompilowany następnie zwykłym kompilatorem języka C Michael Tiemann (firma Cygnus Support) implementuje pierwszy prawdziwy kompilator C++, zwany G++. Publikacja pierwszej specyfikacji C++ w postaci książki The Annoutated C++ Reference Manual autorstwa Stroustrupa i Ellisa, znanej jako ARM. Rozpoczyna się proces standaryzacji języka. Po co standard? Oficjalny standard określa precyzyjnie interpretację każdej konstrukcji. Bez tego twórcy kompilatorów pozwalają sobie na własne, różne interpretacje tych samych konstrukcji językowych. Brak standardu ogranicza możliwość pisania w pełni przenośnego oprogramowania. Kto pracuje nad standardem? ANSI American National Standard Institute, ISO International Standard Organization. Konstytuuje się komitet ANSI (X3J16) do sformułowania zarysu standardu C Komitet ANSI publikuje pierwszą wersję zarysu standardu C++. Rozpoczyna się uciążliwy proces rewizji standardu wymaga on wielu poprawek Grudzień, zostaje opublikowany szkic standardu ANSI C Grudzień, oficjalna premiera pełnej wersji standardu ANSI C++. Copyright Roman Simiński 3

4 1998 Wprowadzenie do programowania w C++ historia języka Czerwiec, oficjalna aprobata dla opublikowanego standardu. Standard zostaje również zaaprobowany przez ISO. Zamrożenie prac na pięć lat okres na adaptację producentów kompilatorów i poprawę błędów. W międzyczasie... Powstaje nowy standard C C99, ANSI/ISO C++ jest zgodny z C89. Powstaje i rozwija się język Java obejmujący w standardzie możliwość programowania grafiki, wielowątkowego i sieciowego. Powstaje i rozwija się promowany przez Microsoft język C#. Ciekawostka... Skoro jest C++ to może jest C--? Jest! Autorzy projektu proponują aby kompilatory języków wysokiego poziomu tłumaczyły kod źródłowy na kod w języku C--, pozostawiając kompilatorowi C-- generowanie optymalnego kodu maszynowego. C-- jest zatem pewnego rodzaju uniwersalnym językiem assemblera, niezależnym od platformy sprzętowej. Literatura Język C++ S.B. Lippman, J. Lajoie, Podstawy języka C++,WNT, P.J. Plauger, Biblioteka standardowa C++, WNT, B. Stroustrup, Język C++, WNT, 2002 Liberty J. C++ dla każdego, Helion, Bruce Eckel, Thinking in C++ 2nd Edition, dostępne via Internet: Obiektowa analiza, projektowanie, programowanie P. Coad, E. Yourdon, Analiza obiektowa, Oficyna Wydawnicza Read Me, P. Coad, E. Yourdon, Projektowanie obiektowe, Oficyna Wydawnicza Read Me, P. Coad, J. Nicola, Programowanie obiektowe, Oficyna Wydawnicza Read Me, Copyright Roman Simiński 4

5 Od C do C++ mały krok do przodu Program obliczający średnie spalanie paliwa #include <iostream> using namespace std; int main() float dystans, paliwo; Wprowadzenie do programowania w C++ od C do C++ cout << "Obliczam ile Twoj pojazd spala paliwa na 100 km" << endl; cout << "Potrzebuje dystans przejechanych kilometrow"; cout << " i zuzycie paliwa w litrach" << endl; cout << "Dystans : " << flush; cin >> dystans; cout << "Paliwo : " << flush; cin >> paliwo; if( dystans == 0 ) cout << "Nie policze spalania dla zerowego dystansu" << endl; else cout << "Spalanie " << ( paliwo * 100 ) / dystans << " l na 100 km" << endl; return 0; Strumienie w C++ krótkie wprowadzenie Biblioteka standardowa oferuje predefiniowane obiekty obsługi strumieni programu: cin strumień reprezentujący standardowe wejście programu, odpowiada strumieniowi stdin z C. Strumień cin odczytuje dane i zapisuje je do odpowiednich zmiennych. cout strumień reprezentujący standardowe wyjście programu. Odpowiada strumieniowi stdout z C. cerr niebuforowany strumień wyjściowy błędów. Odpowiada strumieniowi stderr z C. clog buforowany strumień wyjściowy błędów. Odpowiada strumieniowi stderr z C. Aby skorzystać z strumieni cin, cout, cerr należy włączyć odpowiedni plik nagłówkowy Starsze kompilatory przed standaryzacją odwołań do plików nagłówkowych #include <iostream.h> Aktualny standard #include <iostream> using namespace std; Copyright Roman Simiński 5

6 Wprowadzenie do programowania w C++ od C do C++ Wykorzystanie strumienia cout podstawowe informacje Wyprowadzanie danych odbywa się z wykorzystaniem operatora <<, zwanego wstawiaczem (ang. inserter). Dane są wyprowadzane zgodnie z ich typem, istnieje możliwość formatowania postaci wyjściowej. #include <iostream> using namespace std; Dwa style wykorzystania strumienia cout #include <iostream> using namespace std; int main() int i = 10; float f = 5.5; char c = A ; char s[] = "Test cout"; cout << "i = "; cout << i; cout << \n ; cout << "f = "; cout << f; cout << \n ; cout << "c = "; cout << c; cout << \n ; cout << "s = "; cout << s; cout << \n ; int main() int i = 10; float f = 5.5; char c = A ; char s[] = "Test cout"; cout << "i = " << i << endl; cout << "f = " << f << endl; cout << "c = " << c << endl; cout << "s = " << s << endl; return 0; return 0; Przykład prostego formatowania #include <iostream> using namespace std; int main() int i = 12345; int j = 255; cout << ; cout.width( 10 ); cout << i << << endl; cout << ; cout.setf(ios::left); cout.width( 10 ); cout << i << << endl; cout << "Dziesietnie : " << dec << j << endl; cout << "Osemkowo : " << oct << j << endl; cout << "Szesnastkowo : " << hex << j << endl; return 0; Manipulatory flush i endl powodują opróżnienie bufora strumienia cout, endl wstawia znak nowej linii przed opróżnieniem bufora. Copyright Roman Simiński 6

7 Wprowadzenie do programowania w C++ od C do C++ Wykorzystanie strumienia cin podstawowe informacje Globalny obiekt cin umożliwia wczytywanie danych z wykorzystaniem operatora >> zwanego wydobywaczem (ang. extractor), który przeprowadza konieczne konwersje w trakcie pobierania danych. #include <iostream> using namespace std; int main() int i; float f; char s[ 80 ]; cout << "Wprowadz lb. calkowita cin >> i; : " << flush; cout << "Wprowadz lb. rzeczywista : " << flush; cin >> f; cout << "Wprowadz napis cin >> s; cout << "i = " << i << endl; cout << "f = " << f << endl; cout << "s = " << s << endl; return 0; : " << flush; Operator >> pomija białe znaki w strumieniu wejściowym char c; cin >> c; // Odczytuje z wejścia następny znak nie będący znakiem białym cin.get( c ); // Odczytuje z wejścia następny znak, być może to biały znak const int size; char s[ size ]; cin >> s; cin.getline( s, size ); Zastosowanie const int size; char c; char s[ size ]; // Odczytuje słowo do pierwszego białego znaku // Odczytuje maks. SIZE znak w do znaku nowej linii cout << "Wprowadz znak : "; c = cin.get(); cin.ignore(); // Pominięcie oczekującego Enter a cout << "Wprowadzono : " << c << endl; cout << "Wprowadz napis : "; cin.getline( s, size ); cout << "Wprowadzono : " << s << endl; Copyright Roman Simiński 7

8 Wprowadzenie do programowania w C++ od C do C++ Gra w Za dużo, za mało wersja w wykorzystaniem strumieni #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() int wczytana, wylosowana; cout << endl << "Witaj w grze w \"Za duzo, za malo\""; cout << endl << "Odgadnij wylosowana liczbe ( )" << endl; srand( 1000 ); wylosowana = rand() % ; do cout << > << flush; cin >> wczytana; if( wczytana > wylosowana ) cout << "Za duzo" << endl; else if( wczytana < wylosowana ) cout << "Za malo" << endl; else cout << "Brawo, to ta liczba!" << endl; while( wylosowana!= wczytana ); return 0; W programach w C++ można korzystać z bibliotek języka C Kompilatory przed standaryzacją odwołań do plików nagłówkowych #include <stdlib.h> #include <time.h> #include <ctype.h> Aktualny standard #include <cstdlib> #include <ctime> #include <cctype> using namespace std; Lepsza inicjalizacja generatora liczb pseudolosowych srand( ( unsigned )time( NULL ) ); Lepsze ograniczenie zakresu losowanych liczb wylosowana = int( * rand()/( RAND_MAX ) ) + 1; Program powyższy napisany został w C++ z wykorzystaniem obiektowej biblioteki we/wy. Czy ten program jest obiektowy? Copyright Roman Simiński 8

9 Wprowadzenie do programowania w C++ model obiektowy w pigułce Obiektowe podejście do projektowania systemów informatycznych OOA, OOD, OOP Analiza obiektowa, OOA Object Oriented Analysis Celem analizy obiektowej jest stworzenie modelu, w którym każdy element świata rzeczywistego odwzorowany jest odpowiednim obiektem (lub ich grupą), należącym do określonej klasy. Interakcja pomiędzy obiektami jest odbiciem procesów zachodzących w rzeczywistości. Projektowanie obiektowe, OOD Object Oriented Design Celem projektowania obiektowego jest opisanie struktury projektowanego systemu w kategoriach obiektów i klas do których należą, stosując odpowiednie notacje, odwzorowujące logiczne i fizyczne właściwości obiektów oraz opisujące ich właściwości statyczne i dynamiczne. Programowanie obiektowe, OOP Object Oriented Programming Programowanie obiektowe zakłada organizację programu jako zbioru współpracujących ze sobą obiektów, będących reprezentantami pewnych klas. Klasy te należą do hierarchii klas, opisanej zunifikowanymi sposobami odwzorowania relacji występujących pomiędzy klasami. Wynika z tego, że programowanie obiektowe: bazuje na obiektach a nie algorytmach podstawowymi blokami logicznymi programu są zatem obiekty a nie podprogramy; każdy obiekt jest reprezentantem pewnej klasy, klasa określa właściwości i możliwości każdego obiektu; klasy są ze sobą powiązane tworząc pewną hierarchię, podstawą do jej budowania relacje pomiędzy klasami, główną jest dziedziczenie właściwości klas. OOA OOD OOP Model piłeczki baseball owej Copyright Roman Simiński 9

10 Wprowadzenie do programowania w C++ model obiektowy w pigułce Z punktu widzenia analizy i projektowania obiektowego Obiekt jest reprezentantem pewnej rzeczy lub koncepcji ze świata rzeczywistego. Klasa to opis obiektu (lub obiektów) o jednolitych właściwościach i możliwościach. Z punktu widzenia programowania obiektowego Obiekt posiada trzy cechy: Tożsamość (ang. identity), pozwala na odróżnienie danego obiektu od każdego innego. Programista przypisuje obiektowi unikatową nazwę lub włącza go do identyfikowalnej kolekcji obiektów lub odwołuje się do obiektu posługując się jego adresem w pamięci. Stan (ang. state), opisuje to co obiekt w danym momencie powinien wiedzieć aby sprawnie działać. Stan obiektu w danym momencie opisany jest zestawem atrybutów i ich wartości. Atrybuty są nazwami wewnętrznych danych obiektu, opisujących jego stan. Atrybuty zwane są polami (ang. fields) lub składowymi danych (ang. data members). Wartości atrybutów mogą się zmieniać w czasie wykonania programu. Zdolność do działania (ang. behavior) opisuje operacje, które obiekt może wykonać. Operacje są realizowane poprzez wykonanie metod (ang. methods) zwanych w C++ funkcjami składowymi (ang. member functions). Metody są jak procedury lub funkcje w programowaniu proceduralnym mogą otrzymywać parametry, mogą zwracać wartości. Metody są jednak częścią obiektu i mogą być aktywowane wtedy, gdy obiekt zostanie o to poproszony. Wykonanie metod zwykle zmienia stan obiektu a więc wartości jego pól. Copyright Roman Simiński 10

11 Wprowadzenie do programowania w C++ pierwsza klasa, pierwszy obiekt Definiujemy pierwszą klasę i pierwszy obiekt Definiujemy klasę opisującą kwadrat Square #include <iostream> using namespace std; class Square public : void setside( float side ); float getside(); float area(); private: float side; ; Tworzymy obiekt mygarden i każemy mu działać: int main() Square mygarden; mygarden.setside( 100 ); cout << endl << "Powierzchnia mojego ogrodu : " << mygarden.area(); return 0; Interakcja z obiektem polega na przesyłaniu do niego komunikatów: Przes³anie komunikatu obiekt : mygarden klasy : Square mygarden.setside( 100 ) Odbiorca komunikatu Nazwa komunikatu Parametr komunikatu setside getside area 100 side side * side < Obiekt odpowiada na komunikaty aktywując odpowiednie metody. Definiujemy metody odpowiedzi na komunikaty: void Square::setSide( float side ) Square::side = side; float Square::getSide() return side; float Square::area() return side * side; // Alternatywna wersja setside void Square::setSide( float newside ) side = newside; Metody poza ciałem klasy definiujemy z wykorzystaniem operatora zakresu ::. Zapis Square:: oznacza, że występujący po nim element należy do klasy Square. Copyright Roman Simiński 11

12 Wprowadzenie do programowania w C++ pierwsza klasa, pierwszy obiekt Kontrola dostępu do pól i metod Co oznaczają słowa kluczowe public i private? mygarden.side = 100; cout << mygarden.side Dwie podstawowe sekcje: // Błąd, side jest prywatną własnościa obiektu mygarden // Błąd, side jest prywatną własnościa obiektu mygarden private elementy zadeklarowane w tej sekcji mogą być wykorzystywane wyłącznie przez metody danej klasy. Elementami tymi mogą być zarówno pola i metody. Mówi się o nich, że są prywatne. public elementy zadeklarowane w tej sekcji są dostępne również dla innych elementów programu. Mówi się o nich, że są publiczne lub stanowią interfejs klasy. Część publiczna klasy określa jakie komunikaty można przesyłać do obiektu, inaczej mówiąc, jakie może on wykonywać usługi. Dwie metody kolejności zapisu sekcji public i private class C public: // Część publiczna klasy void interfacemethod(); private: // Część prywatna klasy void privatemethod(); int internaldata; ; class C private: // Część prywatna klasy void privatemethod(); int internaldata; public: // Część publiczna klasy void interfacemethod(); Czy można deklarować pola w części publicznej można, jednak zaleca się ukrywanie danych w części prywatnej i dostęp poprzez metody. < Stosowanie publicznych pól nie jest dobra praktyką. Jak dostać się do pól prywatnych? mygarden.setside( 100 ); cout << mygarden.getside() // OK, dostęp za pomocą akcesora // OK, dostęp za pomocą modyfikatora Metody publiczne klasy można nieformalnie podzielić na; akcesory metody umożliwiające pobieranie wartości pól, akcesorem jest np. metoda getside. modyfikatory metody dokonujące modyfikacji wartości pól, modyfikatorem jest np. metoda setside. realizatory metody realizujące właściwe dla danej klasy usługi, realizatorem jest np. metoda area. Copyright Roman Simiński 12

13 Wprowadzenie do programowania w C++ pierwsza klasa, pierwszy obiekt Jakimi wartościami obiekt jest inicjowany? Co się stanie gdy nie ustalimy rozmiaru boku obiektu klasy Square? Square mygarden; // Niezainicjowany obiekt const cout << endl << "Powierzchnia mojego ogrodu : " << mygarden.area(); Jak ustalić rozmiar boku dla obiektu const? const Square doghouse; // Niezainicjowany obiekt const doghouse.setside( 1.2 ); // Błąd pr ba modyfikacji obiektu const cout << endl << "Powierzchnia budy mojego psa : " << doghouse.area(); Wprowadzamy konstruktor domyślny klasy Square class Square public : Square(); void setside( float side ); float getside() const; float area() const; private: float side; ; Square::Square() : side( 0 ) Metody ze specyfikacją const nie mogą modyfikować pól obiektu, mogą zatem być wywoływane dla obiektów const. // Alternatywna wersja konstruktora Square::Square() side = 0; Konstruktor jest specjalną funkcja aktywowaną przez kompilator automatycznie w momencie gdy obiekt jest tworzony. Dzieje się tak zanim programista będzie mógł dorwać obiekt. < Konstruktor nie ma typu rezultatu, nosi taką nazwę jak nazwa klasy i zwykle nie wywołuje się go jawnie w kodzie programu. Nazwa pola Wyra enie inicjalizuj¹ce Square::Square() : side( 0 ) Lista inicjalizuj¹ca konstruktora Square() to konstruktor bezparametrowy zwany konstruktorem domyślnym (ang. default constructor). Square a, b, c; // Aktywacja: a.square(), b.square(), c.square() Square squares[ 10 ]; // Aktywacja Square() dla ka żdego z 10-ciu elem. tablicy Copyright Roman Simiński 13

14 Problem Wprowadzenie do programowania w C++ pierwsza klasa, pierwszy obiekt const Square doghouse; // Zainicjowany obiekt const cout << endl << "Powierzchnia budy mojego psa : " << doghouse.area(); Zawsze zerowy bok zawsze zerowe pole? Jak zainicjować obiekt inną wartością niż domyślna? Wprowadzamy konstruktor parametrowy klasy Square class Square public : Square(); Square( float side ); void setside( float side ); float getside() const; float area() const; private: float side; ; Square::Square( float side ) : side( side ) Square mygarden( 100 ); const Square doghouse( 1 ); cout << endl << "Powierzchnia mojego ogrodu : " << mygarden.area(); cout << endl << "Powierzchnia budy mojego psa : " << doghouse.area(); Square( float side ) to konstruktor parametrowy zwany konstruktorem ogólnym (ang. general constructor). W języku C++ można przeciążać funkcje i operatory: Square() Square( float side ) Jedna nazwa, dwie różne funkcje różniące się parametrami int add( int a, int b ) return a + b; double add( double a, double b ) return a + b; // Alternatywne wersje konstruktora Square::Square( float side ) Square::side = side; Square::Square( float startside ) side = startside; cout << endl << "Dodawanie int :" << add( 1, 1 ) cout << endl << "Dodawanie double :" << add( 1.0, 1.0 ); Copyright Roman Simiński 14

15 Wprowadzenie do programowania w C++ pierwsza klasa, pierwszy obiekt Dla typów wbudowanych (standardowych) można tak: int j = 1; int i = j; Czy można tak samo dla obiektów? Square mygarden( 100 ); Square mywifegarden = mygarden; Ano można, ale w takiej sytuacji najlepiej zdefiniować nowy konstruktor class Square public : Square(); Square( float side ); Square( Square & othersquare ); void setside( float side ); float getside() const; float area() const; private: float side; ; Square::Square( Square & othersquare ) : side( othersquare.side ) Square( Square & othersquare ) to konstruktor kopiujący (ang. copy constructor), odpowiedzialny za skopiowanie zawartości jednego obiekty do drugiego oba tej samej klasy na etapie inicjalizacji. Można teraz tak: Square mygarden( 100 ); Square mywifegarden = mygarden; // lub mywifegarden( mygarden ); cout << endl << "Powierzchnia mojego ogrodu : " << mygarden.area(); cout << endl << "Powierzchnia ogrodu zony Ale nie można: Square mygarden( 100 ); Square mywifegarden; Operator & oznacza w C++ referencję, umieszczony w deklaracji parametru odpowiada za przekazanie parametru przez zmienną. : " << mywifegarden.area(); mywifegarden = mywifegarden; // Tutaj nie zostaje wywo łany konstruktor kopiujący Nie można: const Square doghouse( 1 ); Square cathouse = doghouse; // Błąd, niejawna referencja do obiektu const Rozwiązanie problemu z obiektem const: Square::Square( const Square & othersquare ) : side( othersquare.side ) Copyright Roman Simiński 15

16 Definicja klasy Rectangle class Rectangle public : ; Wprowadzenie do programowania w C++ konstruktory pod lupą Rectangle(); Rectangle( float width, float height ); Rectangle( const Rectangle & otherrectangle ); void setwidth( float width ) Rectangle::width = width; void setheight( float height ) Rectangle::height = height; float getwidth() const return width; float getheight() const return height; float area() const; private: float width, height; Rectangle::Rectangle() : width( 0 ), height( 0 ) Rectangle::Rectangle( float width, float height ) : width( width ), height( height ) Rectangle::Rectangle( const Rectangle & otherrectangle ) : width( otherrectangle.width ), height( otherrectangle.height ) float Rectangle::area() const return width * height; Czy można: Square s( 100 ); Rectangle r( s ); // Deklaracja zainicjowanego kwadratu s // Deklaracja prostokąta r z inicjalizacją kwadratem s Copyright Roman Simiński 16

17 Wprowadzenie do programowania w C++ konstruktory pod lupą Wprowadzamy konstruktor rzutujący klasy Rectangle Rectangle( const Square & square ) to konstruktor rzutujący (ang. cast, conversion constructor), odpowiedzialny za skopiowanie zawartości jednego obiekty do drugiego obiekty są różnych klas na etapie inicjalizacji. class Rectangle Rectangle( const Square & square ); ; Rectangle::Rectangle( const Square & square ) : width( square.getside() ), height( square.getside() ) Informacja dodatkowa parametry domyślne Parametr domyślny to wartość określona na etapie deklaracji funkcji, która zostanie automatycznie wstawiona jeżeli dana funkcja zostanie wywołana z pominięciem parametru. Dotyczy funkcji składowych jak i niezwiązanych z klasami. void fun( int i, float f = 0, char c = A ); fun( 10 ); // i == 10, f == 0, c == A fun( 20, 3.15 ); // i == 20, f == 3.15, c == A fun( 30, 22.1, Z ); // i == 30, f == 22.1, c == Z Podsumowanie informacji o konstruktorach Konstruktor domyślny default constructor A() A( arg1 = wart1, arg2 = wart2,... ) Jest bezparametrowy, lub posiada wszystkie parametry będące parametrami domyślnymi. Inicjowania obiektów, deklarowanych (bądź tworzonych) bez parametrów A obj; Konstruktor kopiujący copy constructor A( A & obj ) A( A & obj, arg1 = wart1,... ) A( const A & obj ) A( const A & obj, arg1 = wart1,... ) Jest to konstruktor, który posiada jeden parametr będący referencją obiektu tej samej klasy. Innych argumentów może nie być lub powinny być one argumentami domyślnymi. Konstruktor kopiujący jest używany wszędzie tam, gdzie deklarowany obiekt jest inicjowany wartością innego obiektu tej samej klasy. A obj1; A obj2 = obj1; A obj3( obj2 ); Copyright Roman Simiński 17

18 Wprowadzenie do programowania w C++ konstruktory pod lupą Konstruktor rzutuj¹cy conversion (cast) constructor A( B & obj ) A( B & obj, arg1 = wart1,... ) A( const B & obj ) A( const B & obj, arg1 = wart1,... ) Posiada jeden parametr będący referencją obiektu innej klasy. Innych argumentów może nie być lub powinny być one argumentami domyślnymi. Jest stosowany wszędzie tam, gdzie należy zainicjować obiekt pewnej klasy wartością obiektu innej klasy. B BObj; A AObj = BObj; < Programista może dzięki konstruktorowi rzutującemu określić w jaki sposób informacje zapisane w obiekcie klasy B mają zostać odwzorowane w obiekcie klasy A. Konstruktor ogólny (główny) general constructor A( arg1, arg2,... ) Jest to podstawowy konstruktor przeznaczony do inicjowania obiektów na etapie ich deklaracji czy też tworzenia. Argumenty określają zwykle wartości jakie mają być przypisane określonym polom obiektu. < Konstruktorów głównych może być więcej, mogą one zawierać również parametru domyślne. < Szczególnym przypadkiem jest konstruktor posiadający tylko parametry domyślne, staje się on wtedy konstruktorem domyślnym. Załóżmy istnienie konstruktora klasy A o następującej deklaracji prototypowej: A( int a, float b, char * c = NULL ) Zostanie on wykorzystany do zainicjowania poniższych obiektów: A obj1( 2, 3.4, "Ala"); A obj2( 1, 0.0 ); A obj3( 5, 5.5, "Pięć"); Dwie przykładowe wersje konstruktora ogólnego klasy Rectangle: Rectangle::Rectangle( float width, float height ) : width( width ), height( height ) Rectangle::Rectangle( float side ) : width( side ), height( side ) Copyright Roman Simiński 18

19 Klasa Rectangle raz jeszcze funkcje inline class Rectangle public : ; void setwidth( float width ) Rectangle::width = width; float getwidth() const return width; Wprowadzenie do programowania w C++ funkcje inline Funkcje zdefiniowane wewnątrz definicji klasy są traktowane niejawnie jako funkcje inline (rozwijane w miejscu wywołania). < Funkcje inline nie są wywoływane w sposób klasyczny ich kod jest umieszczany w miejscu wywołania i w rzeczywistości nie są one wywoływane. < Funkcje inline są preferowanym w C++ zamiennikiem makr definiowanych z wykorzystaniem #define. Jak zadeklarować funkcje jako inline poza zasięgiem deklaracji klasy? class Rectangle public : ; void setwidth( float width ); float getwidth() const; inline void Rectangle::setWidth( float width ) Rectangle::width = width; inline float Rectangle::getWidth() const return width; < Jeżeli funkcje inline mają być wykorzystywane modułach umożliwiających kompilacje rozłączną, definicja funkcji powinna wystąpić w miejscu jej zwyczajowej deklaracji w odpowiednim pliku nagłówkowym. Copyright Roman Simiński 19

20 Funkcje inline za i przeciw Wprowadzenie do programowania w C++ funkcje inline Kod wielokrotnie wykorzystujący pewną funkcję inline: może działać szybciej brak narzutu czasowego związanego z organizacją wywołania funkcji i powrotu z podprogramu; będzie dłuższy, zawiera bowiem rozwinięcia ciała funkcji w miejscu jej każdorazowego wywołania. Specyfikacja ze słowem kluczowym inline to tylko rekomendacja dla kompilatora niektórych funkcji nie można w pełni rozwinąć i będą one wywoływane klasycznie (np. rekurencyjne). < Mechanizm funkcji zadeklarowanych jako inline przeznaczony jest do optymalizacji małych, prostych i często wykorzystywanych funkcji. < Dobrym zastosowaniem funkcji inline jest implementacja akcesorów i modyfikatorów realizujących dostęp do prywatnych pól klasy. W porównaniu z makrami funkcje inline zapewniają kontrole typów i wychwytywanie błędów na etapie kompilacji. Copyright Roman Simiński 20

21 Wprowadzenie do programowania w C++ klasa Square w osobnym pliku Klasa Square w osobnym module programu Języki C i C++ nie oferują zdefiniowanej syntaktycznie modularyzacji. Jednak program może się składać z kompilowanych oddzielnie części zwanych właśnie modułami łączonych potem przez konsolidator (wraz z bibliotekami) w plik wykonywalny. Przyjęta konwencja budowania modułów zakłada oddzielenie części publicznej modułu od części implementacyjnej. Plik nagłówkowy klasy Square square.hpp #ifndef _SQUARE_HPP_ #define _SQUARE_HPP_ // Deklaracja klasy class Square public : Square(); Square( float side ); Square( const Square & othersquare ); void setside( float side ); float getside() const; float area() const; private: float side; ; // Definicja metod inline inline void Square::setSide( float side ) Square::side = side; inline float Square::getSide() const return side; #endif Plik implementacyjny klasy Square square.cpp #include "square.hpp" Square::Square() : side( 0 ) Square::Square( float side ) : side( side ) Square::Square( const Square & othersquare ) : side( othersquare.side ) float Square::area() const return side * side; Copyright Roman Simiński 21

22 Wprowadzenie do programowania w C++ klasa Square w osobnym pliku Plik programu wykorzystującego klasę Square testsqr.cpp #include <iostream> using namespace std; #include "square.hpp" int main() Square mygarden( 100 ); cout << endl << "Powierzchnia mojego ogrodu : " << mygarden.area(); return EXIT_SUCCESS; Koncepcja kompilacji rozłącznej Celem kompilacji rozłącznej jest minimalizacja liczby niezbędnych kompilacji, co wpływa na ograniczenie czasu kompilacji programu. Kompilacja rozłączna zarys koncepcji #include square.cpp square.hpp Kompilacja pliku square.cpp Kompilacja pliku testsqr.cpp square.o (square.obj) testsqr.o (testsqr.obj) Konsolidacja Program wykonywalny #include testsqr.cpp Pliki programu Pliki poœrednie Kompilacja rozłączna przebieg szczegółowy square.cpp Biblioteki.lib.o obj Preprocesor Kompilator Kompilacja pliku square.cpp Kompilacja pliku testsqr.cpp Preprocesor Kompilator square.o (square.obj) testsqr.o (testsqr.obj) Konsolidator Program wykonywalny square.hpp testsqr.cpp Jaka nazwa? Pliki nag³ówkowe bibliotek Pliki w³asne Pliki poœrednie Pliki bibliotek standardowych Copyright Roman Simiński 22

23 Organizacja kompilacji rozłącznej Wprowadzenie do programowania w C++ kompilacja rozłączna Manualne zarządzanie kompilacją rozłączną (na przykładzie Unixa) Kompilacja i konsolidacja pewnego programu t.cpp: $ cc t.cpp Wywołanie to spowoduje: 1. kompilacje programu, 2. wygenerowanie pliku pośredniego t.o (w przypadku braku błędu) 3. połączenie t.o z plikami bibliotek i generacja i wynikowego pliku a.out. Użycie flagi -o umożliwia określenie nazwy pliku wynikowego $ cc t.cpp o test Wymuszenie kompilacji bez łączenia (opcja -c) $ cc -c t.cpp W przypadku braku błędów powstanie plik pośredni t.o Kompilujemy oddzielnie pliki square.cpp i testsqr.cpp $ cc -c square.cpp $ cc -c testsqr.cpp Otrzymujemy pliki square.o i testsqr.o, łączymy je w program wykonywalny o nazwie tests: $ cc square.o testsqr.o -o tests W przypadku modyfikacji pliku testsqr.cpp wystarczy: $ cc -c testsqr.cpp $ cc square.o testsqr.o -o tests Jak zautomatyzować proces kompilacji rozłącznej? make program realizujący niezbędne kompilacje w oparciu o reguły zdefiniowane w pliku sterującym (domyślna nazwa Makefile). < Plik ten opisuje zależności pomiędzy modułami programu oraz określa jaki wywołania powinny zostać wykonane dla każdego z modułów. < Program make sprawdza czasy modyfikacji plików źródłowych i docelowych i przeprowadza jedynie niezbędne kompilacje. Copyright Roman Simiński 23

24 Przykładowy Makefile Wprowadzenie do programowania w C++ kompilacja rozłączna tests : square.o testsqr.o cc square.o testsqr.o o test square.o : square.cpp square.hpp cc -c square.cpp testsqr.o : testsqr.cpp square.hpp cc -c testsqr.cpp Pliki dla programu make bywają często złożone, mogą zawierać wiele różnych konstrukcji Zarządzanie kompilacją przez środowisko programistyczne Większość środowisk programistycznych oferuje możliwość budowania projektów. Projekt określa przynajmniej: pliki źródłowe i pomocnicze wchodzące w skład programu, lokalizację bibliotek, plików nagłówkowych, opcje kompilacji, typ kodu wynikowego, oraz inne, zależne od implementacji, cechy i parametry programu. Definiowanie projektu: Dev-C++ < Projekty zwykle stanowią podstawę do wygenerowania pliku dla programu make. Copyright Roman Simiński 24

25 Wprowadzenie do programowania w C++ kompilacja rozłączna Plik Makefile dla programu tests.cpp (Dev-C++) # Project: tests # Makefile created by Dev-C CPP = g++.exe CC = gcc.exe WINDRES = windres.exe RES = OBJ = square.o testsqr.o $(RES) LINKOBJ = square.o testsqr.o $(RES) LIBS = -L"C:/DEV-CPP/lib" INCS = -I"C:/DEV-CPP/include" CXXINCS = -I"C:/DEV-CPP/include/c++" -I"C:/DEV-CPP/include/c++/mingw32" - I"C:/DEV-CPP/include/c++/backward" -I"C:/DEV-CPP/include" BIN = tests.exe CXXFLAGS = $(CXXINCS) CFLAGS = $(INCS).PHONY: all all-before all-after clean clean-custom all: all-before tests.exe all-after clean: clean-custom rm -f $(OBJ) $(BIN) $(BIN): $(LINKOBJ) $(CPP) $(LINKOBJ) -o "tests.exe" $(LIBS) square.o: square.cpp $(CPP) -c square.cpp -o square.o $(CXXFLAGS) testsqr.o: testsqr.cpp $(CPP) -c testsqr.cpp -o testsqr.o $(CXXFLAGS) Definiowanie projektu: Borland C++ Builder Makefile wygenerowany przez Builder a dla powyższego projektu liczy blisko 200 linii! Copyright Roman Simiński 25

26 Wprowadzenie do programowania w C++ kompilacja rozłączna Definiowanie projektu: Borland C Ułatwienia w zarządzaniu kodem programu: Dev-C++ Ułatwienia w zarządzaniu kodem programu: Borland C++ Builder Copyright Roman Simiński 26

27 Hierarchia klas opisujących pojazdy class Pojazd ; class Samochod : public Pojazd ; class Autobus: public Samochod ; class Ciezarowka: public Samochod ; Hierarchia klas opisujących łodzie class Lodka ; class Zaglowka : public Lodka ; class Motorowka : public Lodka ; class Kuter: public Lodka ; Wprowadzenie do programowania w C++ dziedziczenie Klasa opisu amfibii dziedziczenie po dwóch przodkach class Amfibia : public Samochod, public Lodka ; Klasa opisu Jachtu problem z dziedziczenie po dwóch przodkach class Jacht: public Zaglowka, public Motorowka ; Dziedziczenie po jednym przodku dziedziczenie jednobazowe Dziedziczenie po wielu przodkach dziedziczenie wielobazowe Copyright Roman Simiński 27

28 Anatomia dziedziczenia na przykładzie class Point public : Point() : x( 0 ), y( 0 ) Point( int x, int y ) : x( x ), y( y ) void setx( int x ) Point::x = x; int getx() const return x; void sety( int y ) Point::y = y; int gety() const return y; private: int x, y; ; Wprowadzenie do programowania w C++ dziedziczenie class Point3D : public Point public : Point3D() : Point(), z( 0 ) Point3D( int x, int y, int z ) : Point( x, y ), z( z ) void setz( int z ) Point3D::z = z; int getz() const return z; private: int z; ; class Pixel : public Point public : Pixel() : Point(), color( 0 ) Pixel( int x, int y, int color ) : Point( x, y ), color( color ) void setcolor( int z ) Pixel::color = color; int getcolor() const return color; void put() const // Funkcja wyświetl. piksela z odpowiedniej bibl. graficznej, np.: putpixel( getx(), gety(), color ); private: int color; ; int main() Point p1( 10, 12 ); Point3D p2( 2, 5, 4 ); cout << endl << "Punkt 2D ma wspolrzedne" << endl; cout << "x = " << p1.getx() << endl; cout << "y = " << p1.gety() << endl; cout << endl << "Punkt 3D ma wspolrzedne" << endl; cout << "x = " << p2.getx() << endl; cout << "y = " << p2.gety() << endl; cout << "z = " << p2.getz() << endl; return 0; Copyright Roman Simiński 28

29 Dziedziczenie w trybie publicznym Wprowadzenie do programowania w C++ dziedziczenie Dziedziczenie w trybie publicznym zachowuje widoczność pól określoną w klasie bazowej. class Point3D : public Point Aktywowanie konstruktora klasy bazowej Konstruktor klasy pochodnej aktywuje konstruktor klasy bazowej umieszczony na liście inicjalizacyjnej, odbywa się to przed wywołaniem ciała konstruktora. Point3D() : Point(), z( 0 ) < W klasie pochodnej definiujemy metody do obsługi nowych pól, obsługę pól odziedziczonych realizujemy z wykorzystaniem metod odziedziczonych. Redefinicja metod i pola statyczne class ScrPixel : public Pixel public : ScrPixel() : Pixel() ScrPixel( int x, int y, int color ) : Pixel( x, y, color ) ; void setx( int x ) Point::setX( ( x >= minx && x <= maxx )? x : 0 ); void sety( int y ) Point::setY( ( y >= miny && y <= maxy )? y : 0 ); static int minx, miny, maxx, maxy; int ScrPixel::minx = 0; int ScrPixel::miny = 0; int ScrPixel::maxx = 800; int ScrPixel::maxy = 600; ScrPixel pixel; ScrPixel::maxx = screen.getmaxx(); ScrPixel::maxy = screen.getmaxy(); pixel.setx( 300 ); pixel.sety( 200 ); pixel.put(); Copyright Roman Simiński 29

30 Pola statyczne Wprowadzenie do programowania w C++ dziedziczenie Pola statyczne dla danej klasy występują tylko raz, są współdzielone przez wszystkie obiekty tej klasy. Istnieją nawet wtedy, gdy nie został utworzony żaden obiekt klasy. < Pola statyczne muszą być zdefiniowane poza klasą, nadaje się im tedy wartość początkową. int ScrPixel::minx = 0; int ScrPixel::miny = 0; int ScrPixel::maxx = 800; int ScrPixel::maxy = 600; Do pól statycznych klasy można odwoływać się bez obiektu: ScrPixel::maxx = screen.getmaxx(); < Pola statyczne stanowią wspólną, współdzieloną pamięć wszystkich obiektów danej klasy. < Wykorzystywane są do zapamiętywania informacji, które są wspólne dla wszystkich obiektów i nie muszą być pamiętane osobno w każdym z obiektów. Redefinicja metod w klasie pochodnej class Point void setx( int x ) Point::x = x; ; class ScrPixel : public Pixel void setx( int x ) Point::setX( ( x >= minx && x <= maxx )? x : 0 ); ; W klasie pochodnej można zmienić sposób działania metody odziedziczonej poprzez jej redefinicję. Do metody odziedziczonej można dalej odwoływać się stosując prefiks w postaci nazwy_ klasy_bazowej:: < Redefinicję metody w klasie pochodnej stosujemy wtedy, gdy nie odpowiada nam działanie metody odziedziczonej. Można napisać własną implementację metody, opcjonalnie posługując się również metodą odziedziczoną. Copyright Roman Simiński 30

31 Składowe chronione specyfikacja protected Wprowadzenie do programowania w C++ dziedziczenie W klasie pochodnej nie ma bezpośredniego dostępu do pól prywatnych klasy bazowej. class Pixel : public Point public : void put() const putpixel( getx(), gety(), color ); ; Przewidując, że pewna klasa będzie wykorzystywana jako klasa bazowa, można zadeklarować jej składowe (pola i metody) jako chronione protected: Składowe zadeklarowane jako protected są dostępne dla obiektów wszystkich klas pochodnych (tak jak składowe public). Składowe zadeklarowane jako protected są niedostępne dla obiektów innych, niezaprzyjaźnionych klas (tak jak składowe private). < Specyfikator protected działa jak private, z tym wyjątkiem, że obiekty klas pochodnych otrzymują dostęp do składowych protected klasy bazowej. Deklaracja pól x i y jako chronionych: class Point public : protected: int x, y; ; class Pixel : public Point public : void put() const putpixel( x, y, color ); // Dozwolone bezpośrednie odwołanie do x i y ; Point p; p.x = 10; // Błąd, składowa x jest chroniona! Copyright Roman Simiński 31

32 Metody (funkcje) wirtualne Wprowadzenie do programowania w C++ metody wirtualne Dziedziczenie klasy pochodne redefiniują metody class Robot public: Robot() void whoareyou() cout << endl << "UR : Universal robot"; void dowork() cout << endl << "UR : working"; ; class Welder : public Robot // Spawacz public: Welder() : Robot() void whoareyou() cout << endl << "WR : Welder robot"; void dowork() cout << endl << "WR : working"; ; class Varnisher : public Robot // Lakiernik public: Varnisher() : Robot() void whoareyou() cout << endl << "VR : Varnisher robot"; void dowork() cout << endl << "VR : working"; ; class Polisher : public Robot // Polernik public: Polisher() : Robot() void whoareyou() cout << endl << "PR : Polisher robot"; void dowork() cout << endl << "PR : working"; ; int main() const int numofrobots = 3; // Liczba robot w na ta śmie Welder w; // Obiekt sterujący robotem spawaczem Varnisher v; // Obiekt sterujący robotem lakiernikiem Polisher p; // Obiekt sterujący robotem polernikiem Robot * robots[ numofrobots ] = &w, &v, &p ; // Linia robot w for( int i = 0; i < numofrobots; i++ ) // Roboty przedstawcie się robots[ i ]->whoareyou(); for( int i = 0; i < numofrobots; i++ ) // Roboty do roboty! robots[ i ]->dowork(); return 0; Wyniki działania programu: Copyright Roman Simiński 32

33 Wprowadzenie do programowania w C++ metody wirtualne Wprowadzamy metody (funkcje) wirtualne słowo kluczowe virtual class Robot public: Robot() virtual void whoareyou() cout << endl << "UR : universal robot"; virtual void dowork() cout << endl << "UR : working"; ; Wyniki działania programu Inny przykład void showkindofrobot( Robot & robot ) robot.whoareyou(); int main() Welder w; Varnisher v; Polisher p; Bez metod wirtualnych Z metodami wirtualnym showkindofrobot( w ); showkindofrobot( v ); showkindofrobot( p ); Przypisanie konkretnego ciała funkcji do wywołania to wiązanie (ang. binding). W C++ występują dwa rodzaje wiązania: Wczesne wiązanie (ang. early binding) polega na przypisaniu konkretnej funkcji każdemu wywołaniu już na etapie kompilacji programu. Inna nazwa wiązanie statyczne (ang. static binding). Późne wiązanie (ang. late binding) polega na przypisaniu konkretnej funkcji każdemu wywołaniu dopiero na etapie wykonania programu, w zależności od typu obiektu. Inna nazwa dynamiczne wiązanie (ang. dynamic binding) Musi istnieć mechanizm określania typu obiektu w trakcie wykonania programu i wywoływania odpowiedniej funkcji. < Wykorzystanie słowa virtual w deklaracji funkcji powoduje, iż będzie ona wiązana dynamicznie. Copyright Roman Simiński 33

34 Wprowadzenie do programowania w C++ metody wirtualne Jak kompilator generuje kod w przypadku wiązania statycznego? void showkindofrobot( Robot & robot ) robot.whoareyou(); showkindofrobot( v ); Wi¹zanie statyczne (wczesne) : adres funkcji ustalany jest w trakcie kompilacji, na podstawie klasy obiektu wystêpuj¹cego w deklaracji Robot * robots[ 3 ]; robots[ 0 ] = &w; robots[ 1 ] = &v; robots[ 2 ] = &p; robots[ 0 ]->dowork(); robots Ilustracja wywo³ania metod (funkcji) niewirtualnych Robot Robot::whoAreYou() Robot::doWork() Obiekt : w Welder Welder::whoAreYou() Welder::doWork() Obiekt : v =robot Varnisher Varnisher::whoAreYou() Varnisher::doWork() Obiekt : p Polisher Polisher::whoAreYou() Polisher::doWork() & Segment kodu programu Robot::whoAreYou() push bp mov bp,sp push si Robot::doWork() push bp mov bp,sp push si Welder::whoAreYou() push bp mov bp,sp push si Welder::doWork() push bp mov bp,sp push si Varnisher::whoAreYou() push bp mov bp,sp push si Varnisher::doWork() push bp mov bp,sp push si Polisher::whoAreYou() push bp mov bp,sp push si Polisher::doWork() push bp mov bp,sp push si Copyright Roman Simiński 34

35 Wprowadzenie do programowania w C++ metody wirtualne Jak kompilator generuje kod w przypadku wiązania dynamicznego? void showkindofrobot( Robot & robot ) robot.whoareyou(); showkindofrobot( v ); Wi¹zanie dynamiczne (póÿne): adres funkcji ustalany jest w trakcie wykonania programu, na podstawie klasy obiektu wskazywanego jawnie lub przez referencjê robots[ 0 ] = &w; robots[ 1 ] = &v; robots[ 2 ] = &p; robots[ 0 ]->dowork(); robots Robot vptr Obiekt : w Welder vptr Obiekt : v Varnisher vptr Obiekt : p Polisher vptr Ilustracja wywo³ania metod (funkcji) wirtualnych & =robot vtab whoareyou dowork vtab whoareyou dowork vtab whoareyou dowork vtab whoareyou dowork Segment kodu programu Robot::whoAreYou() push bp mov bp,sp push si Robot::doWork() push bp mov bp,sp push si Welder::whoAreYou() push bp mov bp,sp push si Welder::doWork() push bp mov bp,sp push si Varnisher::whoAreYou() push bp mov bp,sp push si Varnisher::doWork() push bp mov bp,sp push si Polisher::whoAreYou() push bp mov bp,sp push si Polisher::doWork() push bp mov bp,sp push si Copyright Roman Simiński 35

36 Referencje w akcji Wprowadzenie do programowania w C++ funkcje operatorowe Referencja jest synonimem (alternatywną nazwą) pewnego obiektu w pamięci operacyjnej. Każda operacja wykonana na referencji będzie również wykonana na obiekcie, do którego referencja się odnosi. Zmienne referencyjne int num = 10; int & numref = num; // Inicjalizacja zmiennej referencyjnej numref = 5; cout << "num num = 0; cout << "num cout << "&num = " << num << endl << "numref = " << numref << endl; = " << num << endl << "numref = " << numref << endl; = " << &num << endl << "&numref = " << &numref << endl; Wyniki działania programu Pamiêc operacyjna num 10 numref < Referencja nie jest wskaźnikiem! < Zmienna referencyjna musi być zainicjowana, ustala się wtedy obiekt do którego referencja się odnosi i to przypisanie nie może ulec zmianie. Uwaga: int num1 = 10, num2 = 20; int numref = num1; numref = num2; // Co spowoduje to przypisanie? Czym wolno inicjować obiekty referencyjne Wartością inicjującą referencję może być l-wartość odpowiedniego typu. Wartością inicjującą referencję do obiektu stałego może być r-wartość lub l-wartość niezgodnego typu. unsigned char uc; double d1 = 1.0, d2 = 2.0; int & iref = 100; char & cref = uc; int & dref = d1 + d2; const int & iref = 100; // OK const char & cref = uc; // OK const int & dref = d1 + d2; // OK... // Błąd, to nie jest l-wartość! // Błąd, l-wartość niezgodnego typu! // Błąd, to nie jest l-wartość! Copyright Roman Simiński 36

37 Wprowadzenie do programowania w C++ funkcje operatorowe Wykorzystanie referencji przy przekazywaniu parametrów int a = 5, b = 10; swap( a, b); void swap( int x, int y ) int temp = x; x = y; y = temp; Zamień wartości tak by po wykonaniu a == 10 oraz b == 5. To nie będzie działać przekazywanie parametrów przez wartość. void swap( int * x, int * y ) int temp = *x; *x = *y; *y = temp; void swap( int & x, int & y ) int temp = x; x = y; y = temp; To będzie działać - wykorzystanie wskaźników, ale wywołanie musi mieć postać: swap( &a, &b ); To będzie działać - wykorzystanie referencji, wywołanie ma postać: swap( a, b ); Copyright Roman Simiński 37

38 Wprowadzenie do programowania w C++ funkcje operatorowe Funkcje operatorowe, operatory przeciążone Problem Należy napisać program realizujący obliczenia dla układów prądu sinusoidalnie zmiennego. Do realizacji tych obliczeń wykorzystuje się liczby zespolone do tego celu należy zbudować klasę Complex. class Complex public: // Konstruktory Complex(); Complex( double re, double im = 0 ); // Akcesory double getreal() const; double getimag() const; void setreal( double newval ); void setimag( double newval ); private: double real; // Część rzeczywista double imag; // Część urojona ; Implementacja funkcji składowych Complex::Complex() : real( 0 ), imag( 0 ) Complex::Complex( double re, double im ) : real( re ), imag( im ) double Complex::getReal() const return real; double Complex::getImag() const return imag; void Complex::setReal( double newval ) real = newval; void Complex::setImag( double newval ) imag = newval; Copyright Roman Simiński 38

39 Jak wykorzystać klase Complex? Wprowadzenie do programowania w C++ funkcje operatorowe Complex z1; // Konstruktor: z1.complex(); Complex z2( 2 ); // Konstruktor: z2.complex( 2 ); parametr domyślny! complex z3( 1, 1 ); // Konstruktor: z2.complex( 1, 1 ); // Dodawanie liczb zespolonych wersja siermiężna z1.setreal( z2.getreal() + z3.getreal() ); z1.setimag( z2.getimag() + z3.getimag() ); Czy nie można tak: // Dodawanie liczb zespolonych wersja poprawiona z1 = z2 + z3; Jak to zrobić krok pierwszy Rozszerzamy klasę Complex o przeciążony operator przypisania class Complex public: Complex & operator = ( const Complex & z ); ; Implementacja operatora przypisania Complex & Complex::operator = ( const Complex & z ) real = z.real; // Lub setreal( z.getreal() ); imag = z.imag; // Lub setimag( z.getimag() ); return *this; Jak to działa? z1 = z2; // z1.operator = ( z2 ); z3 = z1; // z3.operator = ( z1 ); z1 = z2 = z3; // z1.operator = ( z2.operator = ( z3 ) ); A co gdy jest tak? z1 = z1; // z1.operator = ( z1 ); Poprawiona wersja operatora przypisania Complex & Complex::operator = ( const Complex & z ) if( &z!= this ) real = z.real; imag = z.imag; return *this; < this w obrębie definicji każdej funkcji składowej klasy występuje wskaźnik this. Wskazuje on zawsze na obiekt, dla którego została wywołana dana funkcja składowa. W tym przykładzie przeciążanie operatora = nie jest konieczne. Copyright Roman Simiński 39

40 Jak to zrobić krok drugi Wprowadzenie do programowania w C++ funkcje operatorowe Rozszerzamy klasę Complex o przeciążony operator dodawania class Complex public: Complex operator + ( const Complex & z ); ; Implementacja operatora dodawania Complex Complex::operator + ( const Complex & z ) Complex tmp; // Obiekt tymczasowy do przechowania sumy tmp.real = real + z.real; // Lub tmp.setreal( getreal() + z.getreal() ); tmp.imag = imag + z.imag; // Lub tmp.setimag( getimag() + z.getimag() ); return tmp; Jak to działa? z1 + z2; // z1.operator + ( z2 ); Razem z operatorem = z1 = z2 + z3; // z1.operator = ( z2.operator + ( z3 ) ); Krótsza implementacja operatora dodawania Complex Complex::operator + ( const Complex & z ) return Complex( real + z.real, imag + z.imag ); Dlaczego rezultat operatora + nie jest referencją? < W C i C++ rezultatem funkcji nie powinien być wskaźnik ani referencja do zmiennych automatycznych funkcji. Te lokowane są zwykle na stosie i po zakończeniu działania funkcji przestają istnieć. Implementacja operatora odejmowania ( binarny minus ) Complex Complex::operator - ( const Complex & z ) return Complex( real - z.real, imag - z.imag ); Implementacja operatora zmiany znaku ( unarny minus ) Complex Complex::operator - () return Complex( - real, - imag ); z2 = -z1; // z2.operator = ( z1.operator - () ); z1 = z2 - z3; // z1.operator = ( z2.operator - ( z3 ) ); Copyright Roman Simiński 40

41 Przeciążanie operatorów ++ i -- z1++; ++z1; --z2; z2--; Wprowadzenie do programowania w C++ funkcje operatorowe Do wersji 3.0 języka C++ nie istniało rozróżnienie pomiędzy operatorami w wersji przedrostkowej i przyrostkowej. class Complex public: Complex & operator ++ (); Complex operator ++ ( int ); Complex & operator -- (); Complex operator -- ( int ); ; // Postać przedrostkowa // Postać przyrostkowa // Postać przedrostkowa // Postać przyrostkowa Implementacja operatorów przedrostkowych Complex & Complex::operator ++ () ++real; ++imag; return *this; Complex & Complex::operator -- () --real; --imag; return *this; Implementacja operatorów przyrostkowych Complex Complex::operator ++ ( int ) Complex copy; copy = *this; ++real; ++imag; return copy; // Zapamiętaj w copy wartość obiektu przed inkrementacją // Zwr ć kopię wartości obiektu z przed inkrementacji Complex Complex::operator -- ( int ) Complex copy( *this ); // Tu nieco kr cej -- konstruktor kopiujący --real; --imag; return copy; Wykorzystanie operatorów przedrostkowych i przyrostkowych z1 = ++z2; // zi.operator = ( z2.operator++() ); z1 = z2++; // zi.operator = ( z2.operator++( 0 ) ); Copyright Roman Simiński 41

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++ Wprowadzenie do programowanie obiektowego w języku C++ Część trzecia 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

Bardziej szczegółowo

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++ Wprowadzenie do programowanie obiektowego w języku C++ Część czwarta 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

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

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziesiąta Rekordy w C/C++ struktury Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skró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

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

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

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

Wprowadzenie do obiektowości

Wprowadzenie do obiektowości Wprowadzenie do obiektowości Obiekt jest abstrakcją pewnego konkretnego bytu ze świata rzeczywistego, reprezentujący rzecz (obiekt fizyczny), pojęcie (obiekt konceptualny) lub pewny byt programistyczny

Bardziej szczegółowo

Programowanie obiektowe w języku C++

Programowanie obiektowe w języku C++ Programowanie obiektowe w języku C++ Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Klasy i obiekty pierwsze kroki Problem Przewidywane jest napisanie obiektowej wersji programu, realizującego

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

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

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

1 Definiowanie prostych klas

1 Definiowanie prostych klas Ćwiczenie 1 1 Definiowanie prostych klas Ćwiczenie to poświęcone jest poznaniu podstawowych zagadnień związanych z definiowaniem prostych klas. Obejmuje m.in. ćwiczenia pozwalające opanować definiowanie

Bardziej szczegółowo

Języki i paradygmaty programowania

Języki i paradygmaty programowania Języki i paradygmaty programowania WYDZIAŁ ELEKTRONIKI i INFORMATYKI dr inż. Robert Arsoba Politechnika Koszalińska Wydział Elektroniki i Informatyki POLITECHNIKA KOSZALIŃSKA 2009/2010 Materiały do wykładu

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

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

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

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

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

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;

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 Dziedziczenie. 1.1 Koncepcja dziedziczenia. Ćwiczenie 3

1 Dziedziczenie. 1.1 Koncepcja dziedziczenia. Ćwiczenie 3 Ćwiczenie 3 1 Dziedziczenie Ćwiczenie to poświęcone jest poznaniu podstawowych zagadnień związanych dziedziczeniem procesem budowania nowych klas, w oparciu o klasy istniejące. Obejmuje m.in. ćwiczenia

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

Rozdział 4 KLASY, OBIEKTY, METODY

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

Bardziej szczegółowo

1 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

Podstawy programowania Podstawy programowania Część pierwsza Od języka symbolicznego do języka wysokiego poziomu Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Języki programowania obiektowego

Języki programowania obiektowego Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Struktura programu, funkcja main, pliki nagłówkowe, operacje

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie w Internecie. Java

Programowanie w Internecie. Java Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java

Bardziej szczegółowo

Programowanie obiektowe język C++

Programowanie obiektowe język C++ Programowanie obiektowe język C++ Dr inż. Sławomir Samolej D108A, tel: 865 1486, email: ssamolej@prz-rzeszow.pl WWW: ssamolej.prz-rzeszow.pl Podziękowanie: Chcę podziękować dr inż.. Grzegorzowi Hałdasiowi

Bardziej szczegółowo

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

Języki programowania obiektowego Nieobiektowe elementy języka C++ Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Instrukcje sterujące wykonaniem programu, przykłady wykorzystania

Bardziej szczegółowo

Programowanie (C++) NI 5

Programowanie (C++) NI 5 Forma kształcenia i sposób weryfikacji efektów kształcenia Efekty kształcenia WYDZIAŁ FIZYKI UwB kierunek studiów: FIZYKA specjalność: FIZYKA KOD USOS: 0900 FS1 2 PRO Karta przedmiotu Przedmiot moduł ECTS

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

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

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

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

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

Podstawy programowania - 1

Podstawy programowania - 1 Podstawy programowania - 1 doc. dr inż. Tadeusz Jeleniewski Wykład: sobota B, godz. 10.30 12.55 sala 12 Laboratorium: sobota B, godz. 13.00 15.25 sala 2 sobota B, godz. 15.30-17.55 sala 2 e-mail: tadeusz.jeleniewski@pwr.wroc.pl

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm, metody wirtualne i klasy abstrakcyjne Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,

Bardziej szczegółowo

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część trzynasta Tablice struktur, pliki struktur Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści

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

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 języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

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

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

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

Programowanie obiektowe Wykład 1. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 O mnie prowadzący wykład: Dariusz Wardowski pokój: A334 dyżur: środa, godz. 10.00 12.00 e-mail: wardd@math.uni.lodz.pl

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

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

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska im. Tadeusza Kościuszki Karta przedmiotu obowiązuje w roku akademickim 01/013 Kierunek studiów: Informatyka Forma studiów: Stacjonarne Profil:

Bardziej szczegółowo

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013 Politechnika Krakowska im. Tadeusza Kościuszki Karta przedmiotu obowiązuje studentów rozpoczynających studia w roku akademickim 01/013 Wydział Fizyki, Matematyki i Informatyki Kierunek studiów: Informatyka

Bardziej szczegółowo

Podstawy programowania obiektowego

Podstawy programowania obiektowego Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

Wstęp do Programowania, laboratorium 02 Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite

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

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

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, 2015. Wydział Matematyki Stosowanej Politechniki Śląskiej

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, 2015. Wydział Matematyki Stosowanej Politechniki Śląskiej Laboratorium 1 - Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Punkty Na laboratorium można zdobyć 60 punktów. Ocena ogólna z zajęć:

Bardziej szczegółowo

Informatyka 2. Informatyka 2. Wykład nr 1 (04.10.2008) Dane podstawowe. - Wydział Elektryczny. Politechnika Białostocka. Program wykładu (1/2)

Informatyka 2. Informatyka 2. Wykład nr 1 (04.10.2008) Dane podstawowe. - Wydział Elektryczny. Politechnika Białostocka. Program wykładu (1/2) Rok akademicki 2008/2009, Wykład nr 1 2/25 Dane podstawowe Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia (zaoczne) Rok akademicki

Bardziej szczegółowo

Abstrakcyjny typ danych

Abstrakcyjny typ danych Abstrakcyjny typ danych Abstrakcyjny Typ Danych (abstract data type-adt): zbiór wartości wraz z powiązanymi z nimi operacjami; operacje są zdefiniowane w sposób niezależny od implementacji; operacje są

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

Język programowania. Andrzej Bobyk http://www.alfabeta.lublin.pl. www.alfabeta.lublin.pl/jp/

Język programowania. Andrzej Bobyk http://www.alfabeta.lublin.pl. www.alfabeta.lublin.pl/jp/ Język programowania Andrzej Bobyk http://www.alfabeta.lublin.pl www.alfabeta.lublin.pl/jp/ Literatura K. Reisdorph: Delphi 6 dla każdego. Helion, Gliwice 2001 A. Grażyński, Z. Zarzycki: Delphi 7 dla każdego.

Bardziej szczegółowo

Podstawy informatyki (3)

Podstawy informatyki (3) Podstawy informatyki (3) wykład : 15 godz. ćwiczenia : 15 godz. Prowadzący: dr inż. Jacek Piątkowski 1 Języki programowania Języki programowania - dają możliwość zapisu algorytmów w postaci zarówno wygodnej

Bardziej szczegółowo

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz Zagadnienia 1. Delegaty wiązane, właściwości indeksowane 2. Delegaty niewiązane 3. Nowa wersja kalkulatora, delegaty

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Krzysztof Lemay, Naughton Barteczko R. Cadenhead JAVA, Java Podręcznik 2 wykłady dla kaŝdego Języka i ćwiczenia Programowania

Bardziej szczegółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

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

Bardziej szczegółowo

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++ Programowanie Wstęp p do programowania Klasa 3 Lekcja 9 PASCAL & C++ Język programowania Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany w postaci programu

Bardziej szczegółowo

#include int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); } OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;

Bardziej szczegółowo

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012 PROGRAMOWANIE NISKOPOZIOMOWE PN.06 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 Ćwiczenia laboratoryjne c Dr inż. Ignacy Pardyka (Inf.UJK) PN.06 Rok akad.

Bardziej szczegółowo

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe zastosowanie języka Java SE Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z

Bardziej szczegółowo

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego: Typy klasowe (klasy) 1. Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która definiuje programy za pomocą obiektów

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

Instrukcja laboratoryjna cz.3

Instrukcja laboratoryjna cz.3 Języki programowania na platformie.net cz.2 2015/16 Instrukcja laboratoryjna cz.3 Język C++/CLI Prowadzący: Tomasz Goluch Wersja: 2.0 I. Utworzenie projektu C++/CLI z interfejsem graficznym WPF 1 Cel:

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

Podstawy programowania (1)

Podstawy programowania (1) Podstawy programowania (1) doc. dr inż. Tadeusz Jeleniewski Konsultacje pokój 19 Poniedziałki, godz. 9:45 11:20 e-mail: tadeusz.jeleniewski@neostrada.pl Podstawy programowania (1) - wykład 1. Wprowadzenie

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

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

Klasy abstrakcyjne i interfejsy

Klasy abstrakcyjne i interfejsy Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie

Bardziej szczegółowo

Wstęp do Informatyki

Wstęp do Informatyki Wstęp do Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 11 1 / 52 Pętla for # i n c l u d e

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

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

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

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

Wykład 9 2014-06-20 09:37 PP2_W9

Wykład 9 2014-06-20 09:37 PP2_W9 Wykład 9 Przykłady programów z wykorzystaniem klas - przykład funkcji operatorowych - obiektowa implementacja listy jednokierunkowej kopiowanie obiektów - klasa "latający napis" Pozycjonowanie w plikach

Bardziej szczegółowo

Multimedia JAVA. Historia

Multimedia JAVA. Historia Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania

Bardziej szczegółowo

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH ZATWIERDZAM Prorektor ds. dydaktyki i wychowania S Y L A B U S 1 Tytuł (stopień) naukowy oraz imię i nazwisko wykładowcy: dr hab.,

Bardziej szczegółowo

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

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce. Przygotować program tworzący tablicę dwuwymiarową zawierającą zestawy 10 2, 10 4, 10 6 liczb losowych zmiennoprzecinkowych. Korzystając z funkcji bibliotecznych uporządkować zawartość każdego (a) wiersza

Bardziej szczegółowo

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 2, część 1 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa w klasie! 2 Język

Bardziej szczegółowo

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można

Bardziej szczegółowo

Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie:

Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie: Rozdział 10 Przeciążanie operatorów 10.1 Definicje Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie: operator op gdzie

Bardziej szczegółowo

Podstawy programowania w języku C i C++

Podstawy programowania w języku C i C++ Podstawy programowania w języku C i C++ Część pierwsza Łagodny start 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

Bardziej szczegółowo

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

Modelowanie i Programowanie Obiektowe

Modelowanie i Programowanie Obiektowe Modelowanie i Programowanie Obiektowe Wykład I: Wstęp 20 październik 2012 Programowanie obiektowe Metodyka wytwarzania oprogramowania Metodyka Metodyka ustandaryzowane dla wybranego obszaru podejście do

Bardziej szczegółowo

Spis treści. 1 Java T M

Spis treści. 1 Java T M Spis treści 1 Java T M 1 2 Co to jest Platforma Java T M 1 3 Przygotowanie komputera 2 4 Pierwszy program 2 5 Dokumentacja 3 6 Budowa aplikacji. Klasy. 3 7 Pola i metody 4 8 Konstruktory 5 9 Inne proste

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

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24 Wymagania proceduralnych języków wysokiego poziomu ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH modele programowe procesorów ASK MP.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad.

Bardziej szczegółowo

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster Wykład nr 3 Temat: Wskaźniki i referencje. Cytaty: Mylić się jest rzeczą ludzką, ale żeby coś naprawdę spaprać potrzeba komputera. Edward Morgan Forster Gdyby murarze budowali domy tak, jak programiści

Bardziej szczegółowo