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 siminski@us.edu.pl 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ęść druga Obiekty i klasy 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

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

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

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

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

class Student Deklaracja klasy Osoba: Deklaracja klasy Student: Osoba Student Będziemy mieli 2 klasy: Osoba, dla której zapamiętamy dane takie jak: imie, nazwisko i wiek Oraz klasę Student, w której będziemy też dodatkowo pamiętać kierunek studiów. Deklaracja klasy

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 Obiektowego

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

Bardziej szczegółowo

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Przeciążanie operatorów Słowo

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wstęp do programowania. Wykład 1

Wstęp do programowania. Wykład 1 Wstęp do programowania Wykład 1 1 / 49 Literatura Larry Ullman, Andreas Signer. Programowanie w języku C++. Walter Savitch, Kenrick Mock. Absolute C++. Jerzy Grębosz. Symfonia C++. Standard. Stephen Prata.

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

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

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

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

Bardziej szczegółowo

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Wykład 8: klasy cz. 4

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

Bardziej szczegółowo

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

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

Mechanizm dziedziczenia

Mechanizm dziedziczenia Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia

Bardziej szczegółowo

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE

Bardziej szczegółowo

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania Wykład: 5 Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania w C++ Instrukcje sterujące 2 dr Artur Bartoszewski

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 Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++ Podstawy Informatyki Inżynieria Ciepła, I rok Wykład 10 Kurs C++ Historia Lata 70-te XX w język C (do pisania systemów operacyjnych) "The C programming language" B. Kernighan, D. Ritchie pierwszy standard

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 współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

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

Bardziej szczegółowo

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

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

Materiały do zajęć VII

Materiały do zajęć VII Spis treści I. Klasy Materiały do zajęć VII II. III. Konstruktor Właściwości i indeksatory Klasy Programowanie obiektowe wiadomości wstępne Paradygmat programowania obiektowego Abstrakcja Hermetyzacja

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Wstęp do programowania

Wstęp do programowania wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

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

Bardziej szczegółowo

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium: Zakres laboratorium: definiowanie struktur terminologia obiektowa definiowanie klas funkcje składowe klas programy złożone z wielu plików zadania laboratoryjne Laboratorium nr 12 Temat: Struktury, klasy.

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

Język C++ zajęcia nr 2

Język C++ zajęcia nr 2 Język C++ zajęcia nr 2 Inicjalizacja Definiowanie obiektu może być połączone z nadaniem mu wartości początkowej za pomocą inicjalizatora, który umieszczany jest po deklaratorze obiektu. W języku C++ inicjalizator

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część dziewiąta 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 nie zastąpi

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Programowanie w C++ Wykład 9 Katarzyna Grzelak 14 maja 2018 K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus

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

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

Wstęp do informatyki- wykład 11 Funkcje

Wstęp do informatyki- wykład 11 Funkcje 1 Wstęp do informatyki- wykład 11 Funkcje Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy Grębosz, Opus magnum

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

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

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory

Bardziej szczegółowo

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

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.: Program przedmiotu Programowanie (język C++) Wykład 1. Język C a C++. Definiowanie prostych klas. Typy referencyjne. Domyślne wartości argumentów. PrzeciąŜanie funkcji. Konstruktory, destruktory. Definiowanie

Bardziej szczegółowo

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

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++ Podstawy programowania Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++ 1 dr Artur Bartoszewski - Podstawy programowania, sem. 1- WYKŁAD Część I Wstęp do struktur danych: Tablice 2

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

Wstęp do programowania obiektowego. Wykład 2

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

Bardziej szczegółowo

Wstęp do informatyki- wykład 9 Funkcje

Wstęp do informatyki- wykład 9 Funkcje 1 Wstęp do informatyki- wykład 9 Funkcje Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy Grębosz, Opus magnum

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

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

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

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

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

Do czego służą klasy?

Do czego służą klasy? KLASY Dorota Pylak 2 Do czego służą klasy? W programowaniu obiektowym posługujemy się obiektami. Obiekty charakteryzują się: cechami (inaczej - atrybutami lub stanami) operacjami, które na nich można wykonywać

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

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski. - - uzupełnienie notatek: dr Jerzy Białkowski - - 1-2 - - - 1 #include 2 #include 3 # include 4 using namespace std ; 5 6 class Punkt { 7 8 private : 9 double

Bardziej szczegółowo

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50. Programowanie (język C++) referencje Wykład 2. Referencje (1) Referencja (odnośnik) jest zmienną identyfikującą inną zmienną. Wykonanie operacji na referencji ma taki sam skutek, jak wykonanie tejŝe operacji

Bardziej szczegółowo

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

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego

Bardziej szczegółowo

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Podstawy algorytmiki i programowania - wykład 4 C-struktury 1 Podstawy algorytmiki i programowania - wykład 4 C-struktury Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy

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

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.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,

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

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów Funkcje. Spotkanie 5 Dr inż. Dariusz JĘDRZEJCZYK Tworzenie i używanie funkcji Przekazywanie argumentów do funkcji Domyślne wartości argumentów Przeładowanie nazw funkcji Dzielenie programu na kilka plików

Bardziej szczegółowo

Zad. 5: Układ równań liniowych liczb zespolonych

Zad. 5: Układ równań liniowych liczb zespolonych Zad. 5: Układ równań liniowych liczb zespolonych 1 Cel ćwiczenia Wykształcenie zdolności abstrahowania operacji arytmetycznych od konkretnych typów. Unaocznienie problemów związanych z programowaniem uogólnionym

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

Przekazywanie argumentów wskaźniki

Przekazywanie argumentów wskaźniki Przekazywanie argumentów wskaźniki klasyczne wywołanie wyliczenie i zwrotne przekazanie tylko jednej wielkości moŝliwość uŝycia zmiennych globalnych niebezpieczeństwa z tym związane wyjście wywołanie funkcji

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

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

Wykład 9: Polimorfizm i klasy wirtualne

Wykład 9: Polimorfizm i klasy wirtualne Programowanie obiektowe Wykład 9: i klasy wirtualne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Programowanie obiektowe i metody wirtualne 2 W programowaniu obiektowym polimorfizm

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część jedenasta Przetwarzanie plików amorficznych Konwencja języka C Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy 2.4 Dziedziczenie Poprzednie dwa rozdziały które dotyczyły zagadnienia automatów komórkowych na przykładach programów w C++. Mogłyby one sugerować że niekoniecznie trzeba programować obiektowo aby napisać

Bardziej szczegółowo

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński Języki programowania Część druga Przetwarzanie tablic znaków Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Podstawy programowania w C++

Podstawy programowania w C++ Podstawy programowania w C++ Strumienie wejścia cin>> i wyjścia cout

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Laboratorium 1 Wprowadzenie, środowisko programistyczne, pierwsze programy 1 CEL ZAJĘĆ LABORATORYJNYCH: Wprowadzenie do programowania w języku C++ oraz

Bardziej szczegółowo

Podstawy programowania

Podstawy programowania Podstawy programowania Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy i obiekty Programowanie i obiekty uzupełnienie notatek: dr Jerzy Białkowski i obiekty 1 2 3 4 i obiekty Obiektowość języka C++ Na tym wykładzie poznamy: ˆ Klasa (w języku C++ rozszerzenie struktury, typ

Bardziej szczegółowo

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński Języki programowania Część siódma Przetwarzanie plików amorficznych Konwencja języka C Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie

Bardziej szczegółowo

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

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

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 5 1 SPECYFIKATOR const Specyfikator (przydomek) const: Umieszczenie przed nazwą zmiennej specyfikatora const w jej definicji informuje kompilator,

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 8 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Podprogramy Czasami wygodnie jest wyodrębnić jakiś fragment programu jako pewną odrębną całość umożliwiają to podprogramy.

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

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo