Podstawy Programowania Obiektowego

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

Download "Podstawy Programowania Obiektowego"

Transkrypt

1 Podstawy Programowania Obiektowego. Spotkanie 07 Dr inż. Dariusz JĘDRZEJCZYK

2 Tematyka wykładu Pojęcie funkcji operatorowej Definicja funkcji operatorowej w klasie Definicja funkcji operatorowej poza klasą Argumentowość operatorów Operator przypisania = Operator wypisywania << Przykłady do samodzielnego wykonania 2

3 Definicja i trochę teorii Przeciążanie operatorów (ang. operator overloading, tłumaczone też jako przeładowanie operatorów) to rodzaj polimorfizmu występującego w niektórych językach programowania, polegający na tym, że operator może mieć różne implementacje w zależności od typów użytych argumentów (operandów). Mówiąc najkrócej w tej części zajmiemy się tym, jak sprawić by znaczki takie jak: +, - itd. pracowały dla nas i robiły to, co my im każemy. Sam znaczek + nie dodaje dwóch liczb. Kiedy on występuje w tekście programu, kompilator wywołuje specjalną funkcję, która zajmuje się dodawaniem liczb. Nazwijmy tę funkcję operatorem dodawania. Możesz sam napisać swoją funkcję operator dodawania, która będzie wywoływana wtedy, gdy koło znaczka + pojawią się argumenty wybranego przez Ciebie typu. Po prostu po raz kolejny zostanie przeładowany operator. 3

4 Definicja i trochę teorii Projektując klasę możemy zadbać o to, by pewne operacje na obiektach tej klasy wykonywane były na zasadzie przeładowania operatorów. Przeładowanie operatora dokonuje się definiując swoją własną funkcję która: Nazywa się operator@ - oznacza symbol operatora, o którego przeładowanie nam chodzi (np.: +, -, *, &, itd.) Jako co najmniej jeden z argumentów, przyjmuje obiekt danej klasy. (Musi być obiekt, nie może być wskaźnik do obiektu.) 4

5 Definicja i trochę teorii Definicja takiego operator wygląda tak: typ_zwracany operator@(argumenty) { // ciało funkcji } Do przeładowania mamy do dyspozycji bardzo wiele operatorów - wybieramy z nich te, które rzeczywiście będą nam potrzebne. Nie ma sensu przeładowywać wszystkich. 5

6 Definicja i trochę teorii Oto lista operatorów, które mogą być przeładowane: + - ~ * / % ^ &! = %= < > += -= *= /= ^= &=!= = << >> >>= <<= == <= > >= && ++ --, ->* - new delete () [] Natomiast nie mogą być przeładowane operatory:..* ::?: 6

7 Definicja i trochę teorii Kilka uwag dotyczących przeładowania operatorów: Przeładowywać można te operatory i tylko te podane na wcześniejszym slajdzie. Przeładowanie może nadać operatorowi dowolne znacznie, nie ma też ograniczeń co do wartości zwracanej przez operator (wyjątkiem są operatory new i delete) Nie można jednak zmieniać priorytetu wykonywania tych operatorów. Nie można też zmieniać argumentowości operatorów, czyli tego, czy operator jest jedno-, czy dwuargumentowy. Nie można zmienić łączności operatorów czyli tego, czy operator łączy się z argumentem z lewej, czy z prawej strony. 7

8 Definicja i trochę teorii Jeśli funkcja operatorowa jest zdefiniowana jako zwykła (globalna) funkcja, to przyjmuje tyle argumentów na ilu pracuje operator. Przynajmniej jeden z tych argumentów musi być typu zdefiniowanego przez użytkownika. Nie ma znaczenia który. Argumenty nie mogą być domniemane. jest niczym więcej jak tylko efektownym sposobem ułatwiającym notację wyrażeń, w których występują obiekty danych klas. Przeładowanie operatorów nie daje niczego takiego, co nie było możliwe do tej pory. To tylko notacja się upraszcza. 8

9 Funkcja operatorowa jako funkcja składowa Funkcja operatorowa może być zwykłą, globalną funkcją, a może być także funkcją składową klasy. Dana funkcja operatorowa może być albo funkcją globalną albo niestatyczną funkcją składową klasy, dla której pracuje. Jeśli operator definiujemy jako funkcję składową, to ma ona zawsze o jeden argument mniej niż ta sama funkcja napisana w postaci funkcji globalnej. Ten brakujący argument w wypadku funkcji składowej spowodowany jest oczywiście istnieniem wskaźnika this. 9

10 Funkcja operatorowa przyjacielem klasy? Jeśli funkcja operatorowa ma pracować tylko na publicznych składnikach klasy, to może być ona zwykłą funkcją składową, bez żadnych specjalnych uprawnień. Jeśli chcemy, by operator mógł pracować także na niepublicznych składnikach klasy wówczas klasa musi zadeklarować tę funkcję operatorową jako zaprzyjaźnioną. Przyjaźń nie jest obowiązkowa. To przecież oczywiste jeśli operator ma np.: zagwizdać na cześć obiektu danej klasy, to do tego nie jest mu potrzebny dostęp do jej prywatnych składników. 10

11 Operatory predefiniowane Jest kilka operatorów, których znaczenie jest tak oczywiste, że zostają one automatycznie generowane dla każdej klasy. Te operatory to: = - przypisanie [podstawienie] do obiektu danej klasy, & - (jednoargumentowy) pobranie adresu obiektu danej klasy,, (przecinek) - znaczenie takie jak dla typów wbudowanych, new, delete - kreacja i likwidacja obiektów w zapasie pamięci. 11

12 Argumentowość operatorów Operatory działają albo na jednym argumencie (jak np.: negacja), albo na dwóch argumentach (jak np.: dzielenie). Poza jednym wyjątkiem nie ma operatorów, które pracują na więcej niż dwóch argumentach. Jednym jedynym wyjątkiem, kiedy do operatora można przesłać większą liczbę argumentów jest operator( ). 12

13 Operatory jednoargumentowe Operatory te występują zwykle jako przedrostek, czyli stoją przed obiektem danej klasy. Oto przykłady: int i; - i! i ++i ~i &i Mogą być też jednoargumentowe operatory przyrostkowe. Stoją one za obiektem. i -- i ++ 13

14 Operatory jednoargumentowe Jeśli mamy daną klasę, to operatory jednoargumentowe typu przedrostkowego pracują na obiektach klasy K można zdefiniować jako: nieskładową (zwykłą) funkcję wywołaną z jednym argumentem (obiektem tej klasy K): typ_zwracany operator@(k){ } // ciało funkcji funkcję składową klasy K wywoływaną beż żadnych argumentów: 14

15 Operatory dwuargumentowe Operatory dwuargumentowe możemy także przeładowywać na dwa sposoby: jako funkcję składową niestatyczną wywoływaną z jednym argumentem: x.operator@(y) albo jako funkcję globalną (czyli zwykłą, nieskładową), wywoływaną z dwoma argumentami: operator@(x,y) Taka funkcja operatorowa zostaje automatycznie wywołana, gdy obok znaczka danego operatora znajdą się dwa argumenty określonego przez nas typu: y 15

16 Przeładowanie operatora dwuargumentowego Załóżmy, że chcemy przeładować operator mnożenia *. Dla odmiany weźmy klasę reprezentującą trójwymiarowy wektor. Trzeba się zastanowić co chcemy, by ten operator* z obiektem klasy wektorek dla nas robił. Niech, służy do mnożenia wektora przez liczbę rzeczywistą. Jeśli jakiś wektor mnożymy przez 2, to wszystkie jego współrzędne mają zostać podwojone.

17 Przeładowanie operatora dwuargumentowego #include <iostream.h> //*************************************************** *** class wektorek { public : float x, y, z ; // --- konstruktor wektorek(float xp = 0, float yp = 0, float zp = 0 ) : x(xp), y(yp), z(zp) { /* cialo puste */ } ; } ; //... inne funkcje skladowe

18 Przeładowanie operatora dwuargumentowego wektorek operator*(wektorek kopia, float liczba ){ wektorek rezultat ; } rezultat.x = kopia.x * liczba ; rezultat.y = kopia.y * liczba ; rezultat.z = kopia.z * liczba ; return rezultat ; //*************************************************** *** void pokaz(wektorek www) ; // deklaracja //*************************************************** *** 18

19 Przeładowanie operatora dwuargumentowego void main(){ wektorek a(1,1,1), b(-15, -100, +1), c ; } c = a * 6.66 ; pokaz(c) ; c = b * -1.0 ; pokaz(c) ; //*************************************************** *** void pokaz(wektorek www){ } cout << " \n\n\nx = " << << " y = " << << " z = " << << endl ; 19

20 Przemienność Dzięki przeładowaniu, możemy tworzyć wyrażenia: wektora = wektorb * 11.1; wektora = 11.1 * wektorb; Natomiast odwrócenie kolejności czynników iloczynu nie wchodzi w grę, czyli zapis zostanie przez kompilator odrzucony jako błędny. Funkcja operatorowa, która jest funkcją składową klasy wymaga, aby obiekt stojący po lewej stronie (znaczka) operatora był obiektem jej klasy. Operator, który jest zwykłą funkcją globalną -nie ma tego ograniczenia. 20

21 Operator przypisania = Dwuargumentowy operator przypisania klasa & klasa::operator=(klasa &) służy do przypisania jednemu obiektowi klasy klasa treści drugiego obiektu tej klasy. Jeśli nie zdefiniujemy sobie tego operatora kompilator automatycznie wygeneruje swoją wersję tego operatora polegającą na tym, że przypisanie odbędzie się metodą składnik po składniku. W rezultacie takiego przypisania będziemy mieli dwa obiekty o bliźniaczo identycznej treści. 21

22 Operator przypisania = W operatorze przypisania można wyraźnie rozróżnić dwie części, w których: obiekt likwidujemy. kreujemy obiekt jeszcze raz. Jedyna sytuacją, gdy na widok znaczka = rusza do pracy konstruktor kopiujący jest wystąpienie tego znaku w linijce definicji obiektu. Znaczek ten wtedy oznacza inicjalizacji, a nie przypisanie. Inicjalizacja zajmuje się konstruktor kopiujący, a przypisaniem operator przypisania. 22

23 Przeładowanie operatora przypisania Załóżmy, że mamy do czynienia z klasą wizytowka. Jeśli zamierzamy zbierać dane o tysiącach ludzi należy to zrobić w ten sposób, żeby rezerwować w pamięci tyle miejsca ile jest nam potrzebne do pomieszczenia konkretnego nazwiska oraz imienia. 23

24 Przeładowanie operatora przypisania #include <iostream.h> #include <string.h> //*************************************************** *** class wizytowka { public : char *nazw ; char *imie ; wizytowka(char *n, char *im) ; wizytowka(const wizytowka &wzor) ; // konstruktor kopiujacy ~wizytowka(); void pisz(char *) ; przypisania // operator // konstruktor // destruktor wizytowka & operator=(const wizytowka &wzor) ; 24

25 Przeładowanie operatora przypisania wizytowka::wizytowka(char*n, char *im){ nazw = new char[strlen(n) + 1] ; imie = new char[strlen(im) + 1] ; strcpy(nazw, n); strcpy(imie, im); cout << "Pracuje konstruktor zwykly" << endl ; } //*************************************************** *** wizytowka::wizytowka(const wizytowka &wzor){ nazw = new char[strlen(wzor.nazw) + 1] ; imie = new char[strlen(wzor.imie) + 1] ; strcpy(nazw, wzor.nazw); strcpy(imie, wzor.imie); cout << "Pracuje konstruktor kopiujacy " << endl ; } 25

26 Przeładowanie operatora przypisania wizytowka::~wizytowka(){ delete nazw ; delete imie ; } //*************************************************** *** void wizytowka::pisz(char *txt){ cout << " " << txt << ": Mamy goscia, jest to " << imie << " " << nazw << endl ; } 26

27 Przeładowanie operatora przypisania wizytowka & wizytowka::operator=(const wizytowka &wzor){ // -- czesc "destruktorowa" } delete nazw ; delete imie ; // -- czesc "konstruktorowa (konst. kopiujacy)"- nazw = new char[strlen(wzor.nazw) + 1] ; imie = new char[strlen(wzor.imie) + 1] ; strcpy(imie, wzor.imie); strcpy(nazw, wzor.nazw); cout << "Pracuje operator= (przypisania)\n" ; return *this ; 27

28 Przeładowanie operatora przypisania void main(){ } cout << "Definicje 'veneziano', i 'salzburger' \n" ; wizytowka veneziano("vivaldi", "Antonio"), salzburger("mozart", "Wolfgang A."); cout << "Definicja 'nowy' : \n" ; wizytowka nowy = veneziano ; cout << "Oto tresc w obiektach\n" ; veneziano.pisz("ven1"); salzburger.pisz("sal1"); nowy.pisz("now1"); cout << "Zabawy z przypisywaniem ---\n" ; nowy = salzburger ; nowy.pisz("now2"); nowy = veneziano ; nowy.pisz("now3"); nowy = salzburger = veneziano ; nowy.pisz("now4"); salzburger.pisz("sal4"); veneziano.pisz("ven4"); // konstruktor kopiujacy 28

29 Operator = nie generowany automatycznie Jeśli klasa ma składnik const, to operator nie będzie wygenerowany. Jest to oczywiste, bo skoro w klasie jest jakiś składnik ustawiony jako const to znaczy, że dopuszczamy jego inicjalizację, ale potem nie wolno już go zmieniać, czyli nic do niego przypisywać. Podobnie w wypadku obecności składnika będącego referencją. Jak wiemy, referencję tylko się inicjalizuje, a potem już przepadło nie można rozmyślić się i przerzucić przezwisko na inny obiekt. Jeśli klasa ma składnik będący obiektem innej klasy i w tej innej klasie operator przypisania określony jest jako private to wówczas nie będzie generowany operator przypisania dla klasy go zawierającej. Analogicznie jest w przypadku, gdy klasa ma klasę podstawową, w której operator= jest typu private. 29

30 Operatory postinkrementacji i postdekrementacji Wyróżniamy dwa różne operatory++: Gdy symbol ++ stoi przed nazwą obiektu to kompilator wybiera wersję jednoargumentową tego operatora (pre inkrementacja). Gdy symbol ++ stoi za nazwą obiektu kompilator wywołuje wersję dwuargumentową (post inkrementacja). Ważne jest tu sformułowanie: dwa różne. Bowiem ciało jednej i drugiej wersji może być całkowicie odmienne. To co dotyczy operatora postinkrementacji, dotyczy analogicznie operatora postdekrementacji. 30

31 Praktyczne rady dotyczące przeładowania Jako, że mechanizm przeładowania jest możliwością, z której można skorzystać lub nie. Chodzi o to, żeby jeśli już zdecydujemy się na przeładowanie jednego lub kilku operatorów żeby robić to mądrze, posługując się jakąś logiką. Oto kilka rad: Nie ma sensu przeładowywać wszystkich operatorów dla danej klasy. Może się bowiem okazać, że wykonałeś kawał dobrej, solidnej, nikomu nie potrzebnej roboty. Nie staraj się przeładowywać na siłę. Jeśli nazwa funkcji składowej lepiej opisuje działanie tej funkcji, niż robi to wygląd operatora, to lepiej pozostać przy funkcji. Przeładowanie powinno służyć uproszczeniu czytania, a nie produkcji łamigłówek. Cała wspaniałość przeładowania polega na zbliżeniu zapisu operacji na klasach, do prostoty zapisu operacji na typach wbudowanych. 31

32 Praktyczne rady dotyczące przeładowania Jeśli przeładowałeś operator+ oraz operator= to nie sądź, że tym samym masz automatycznie operator+= albo operator++. Są to zupełnie inne funkcje operatorowe i jeśli chcesz się nimi posługiwać wobec obiektów danej klasy, to musisz je także przeładować. Przed przystąpieniem do pracy trzeba się zastanowić, jak taka klasa wygląda z zewnątrz - to znaczy jakie wykonuje się operację na obiektach danej klasy. Kiedy już to jest jasne, można się zastanowi, które z tych funkcji wygodniej byłoby przeprowadzać za pomocą operatorów. Mimo całej dowolności treści przeładowanych funkcji operatorowych - staraj się zachować logikę pewnych zależności między operatorami. 32

33 Praktyczne rady dotyczące przeładowania Jeśli operator jest nieszkodliwy dla typu wbudowanego - to znaczy nie zmienia wartości zmiennej, na której pracuje, to staraj się, by jego odpowiednik dla klasy również niczego nie zmieniał wewnątrz obiektu. Wartość zwracana przez operator jest bardzo ważna. Dzięki temu, że operator nie tylko wykonuje działanie, ale też zwraca rezultat możliwe są wyrażenia kaskadowe a + b + c + d gdzie najpierw odbywa się jedno dodawanie, potem jego rezultat staje się składnikiem drugiego dodawania i kolejny rezultat staje się składnikiem trzeciego. 33

34 Operator jako funkcja składowa - czy globalna Skoro ten sam operator można zdefiniować jako funkcję składową albo funkcję globalną, to nasuwa się pytanie: jak lepiej zrobić? Jednoznacznej odpowiedzi nie ma. Zależy to od tego, czego oczekujemy od operatora. Ogólnie można powiedzieć, że: Jeśli operator zmienia w jakiś sposób obiekt, na którym pracuje, to powinien być zdefiniowany jako funkcja składowa jego klasy. Operatory te wtedy zwracają l wartości (np.: operatory =, ++, --). Jeśli natomiast operator sięga po obiekt po to, by pracować z nim bez modyfikowania go to wówczas raczej stosuje się operator w postaci funkcji globalnej (np.: operatory -, +, /). 34

35 Operator jako funkcja składowa - czy globalna Jeśli operator ma dopuszczać, by po jego lewej stronie stał typ wbudowany, to nie może być funkcją składową. Musi być globalną. Jeśli używamy operatora, który zdefiniowany jest jako funkcja składowa, wówczas w stosunku do jego pierwszego argumentu nie może zajść żadna niejawna konwersja (Mowa o tym argumencie, który zostaje przesłany za pomocą wskaźnika this). 35

36 Tajemnica operator << Właściwie już od początku posługujemy się zapisem, w którym występuje operator<<: cout<< Pierwszy program ; Dwuargumentowy operator<< jest, w stosunku do typu wbudowanego int, operatorem powodującym przesunięcie bitów o żądaną liczbę pozycji. Pytanie: Jak to więc jest możliwe, że taki zapis: int m = 2; cout<< m; powoduje wyprowadzenie na ekran liczby zapisanej w zmiennej typu int? 36

37 Tajemnica operator << Odpowiedź: Mamy tu do czynienia z najzwyklejszym przeładowaniem operatora<<. Zapis ten jest inaczej rozumiany tak: cout.operator<< (m); cout jest egzemplarzem obiektu klasy, która nazywa się ostream. To dla tej klasy dokonano przeładowania operatora. Przeładowanie jest możliwe, gdy jednym z argumentów jest obiekt typu zdefiniowanego przez użytkownika. Takim typem zdefiniowanym - choć bibliotecznym - jest właśnie klasa ostream. 37

38 Tajemnica operator << Jest kilka wersji przeładowania operatora<< na okoliczność pracy z różnymi typami argumentów np.: float, char*. Jeśli mamy zdefiniowaną własną klasę np.: wektor, to użycie operatora<< w ten sposób: wektor w; cout<< w; Jest niepoprawne. Aby można było wykorzystać taki zapis należy po raz kolejny przeładować operator<<. Jest on dwuargumentowy, więc argumenty będą typu ostream i wektor. 38

39 Tajemnica operator << 01. #include <iostream.h> 02. class wektor 03. { 04. public: 05. float x, y, z ; 06. wektor(float a=0, float b=0, float c=0):x(a) 07. { 08. y = b; 09. z = c; 10. } 11. }; 39

40 Tajemnica operator << 01. ostream & operator<<(ostream & ekran, wektor & w) 02. { 03. ekran << "wspolrzedne wektora : "; 04. ekran << "( ; 05. ekran << w.x; 06. ekran << ", " << w.y << ", " << w.z << ")"; 07. return ekran; 08. } 40

41 Tajemnica operator << 01. void main(void) 02. { 03. wektor w(1,2,3),v,k(-10, -20, 100); 04. cout << w; 05. cout << "\nwektor v ->" << v<< endl; 06. cout << "Wywolanie jawne \n ; 07. operator<<( cout, w); 08. } 41

42 Koniec Dziękuję za uwagę i zapraszam na 15 minut przerwy. W dalszej części ćwiczenia do samodzielnego wykonania. 42

43 Ćwiczenia do wykonania Zadanie 01 Zdefiniuj klasę LiczbaZespolona oraz stosowne funkcje, konstruktory oraz funkcje operatorowe, ponadto uzupełnij klasę LiczbaZespolona tak, aby możliwe stało się wykonywanie następującego kodu: LiczbaZespolona z1, z2(1,2), z3(z2); cout<< z1; cout<< z2; cout<< z3; int a; z1 = z2 + z3; cout<< z1; cout<< z2; cout<< z3; z1 = z1 - z3; cout<< z1; cout<< z2; cout<< z3; z3 = z1 * z2; cout<< z1; cout<< z2; cout<< z3; z1 = z2.liczbaprzeciwna(); cout<< z1; cout<< z2; z3 = liczbasprzezona(z1); cout<< z1; cout<< z3; a =!z2; cout<< a; cout<< z1; cout<< z2; cout<< z3; //modul z liczby zespolonej z2 43

44 Ćwiczenia do wykonania UWAGA: Dla liczby zespolonej z1(a,b) -> z1 = a + bi oraz z2(c,d) -> z2 = c + di gdzie: a,c -> to części rzeczywiste, b,d -> części urojone, operacje arytmetyczne przedstawiają się następująco: - dodawanie: z1 + z2 = (a+c) + (b+d)i, - odejmowanie: z1- z2 = (a-c) + (b-d)i, - mnożenie: z1*z2 = (ac-bd)+ (ad+ bc)i, - moduł z z1: z1 = pierwiastek(a^2 + b^2), - liczba przeciwna do liczby zespolonej z1: -z1 = -a - bi, - liczbą sprzężoną z liczbą z1: z1* = a - bi. 44

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

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Pojęcie konstruktora i destruktora. Spotkanie 04 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Pojęcie konstruktora Konstruktor domyślny Konstruktor sparametryzowany Konstruktor

Bardziej szczegółowo

Przeciążanie operatorów

Przeciążanie operatorów Instrukcja laboratoryjna nr 4 Programowanie w języku C 2 (C++ poziom zaawansowany) Przeciążanie operatorów dr inż. Wilk-Jakubowski Jacek mgr inż. Lasota Maciej dr inż. Kaczmarek Tomasz Wprowadzenie Oprócz

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

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

C++ Przeładowanie operatorów i wzorce w klasach C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje

Bardziej szczegółowo

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE WSKAŹNIKI KLASOWE Wskaźniki klasowe Każdy obiekt zajmuje fragment pamięci i wszystkie obiekty tego samego typu zajmują fragmenty pamięci tej samej długości początek miejsca w pamięci zajmowanego przez

Bardziej szczegółowo

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

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

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Programowanie w C++ Wykład 11 Katarzyna Grzelak 13 maja 2019 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Klasy cd K.Grzelak (Wykład 11) Programowanie w C++ 2 / 30 Klasy - powtórzenie Klasy typy definiowane

Bardziej szczegółowo

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 12 Katarzyna Grzelak 28 maja 2018 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Klasy cd K.Grzelak (Wykład 12) Programowanie w C++ 2 / 27 Klasy - powtórzenie Klasy typy definiowane

Bardziej szczegółowo

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

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

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

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

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. PROGRAMOWANIE OBIEKTOWE W C++ cz. 2 Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. Dziedziczenie Dziedziczenie jest to technika pozwalaj c na definiowanie nowej klasy przy wykorzystaniu

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Przeciążanie operatorów Funkcje zaprzyjaźnione Na

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

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

Programowanie Obiektowe i C++

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

Bardziej szczegółowo

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

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

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1 Operatory Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1 Przypomnienie: operatory Operator przypisania = przypisanie x = y x y Operatory arytmetyczne

Bardziej szczegółowo

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 14 Katarzyna Grzelak 3 czerwca 2019 K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów

Bardziej szczegółowo

Przeciążenie operatorów

Przeciążenie operatorów Przeciążenie operatorów W C++ można przeciążyć większość operatory tak, żeby wykonywali zadania, charakterystyczne dla danej klasy Po przeciążeniu odpowiednich operatorów można posługiwać się obiektami

Bardziej szczegółowo

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej

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

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

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 C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem. Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD programowania w C++ Typy c.d. 2 Typy zmiennych Instrukcja typedef -

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:

Bardziej szczegółowo

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

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Opus Magnum C++11 : programowanie w języku C++. T. 2 / Jerzy Grębosz. Gliwice, cop Spis treści

Opus Magnum C++11 : programowanie w języku C++. T. 2 / Jerzy Grębosz. Gliwice, cop Spis treści Opus Magnum C++11 : programowanie w języku C++. T. 2 / Jerzy Grębosz. Gliwice, cop. 2018 Spis treści 17 Biblioteczna klasa std::string 609 17.1 Rozwiązanie przechowywania tekstów musiało się znaleźć 609

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

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

Szablony klas, zastosowanie szablonów w programach

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

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Katedra Informatyki Stosowanej Politechniki Łódzkiej mgr inż. Tomasz Jaworski Programowanie w języku C++ Al. Politechniki 11, 90-924 Łódź ul. Stefanowskiego 18/22, 90-924 Łódź http://tjaworski.kis.p.lodz.pl

Bardziej szczegółowo

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów Rok akademicki 2016/2017, Wykład nr 5 2/40 Plan wykładu nr 5 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017

Bardziej szczegółowo

Konstruktor kopiujacy

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

Bardziej szczegółowo

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

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26 Programowanie w C++ Wykład 13 Katarzyna Grzelak 4 czerwca 2018 K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory Programowanie Obiektowo Zorientowane w języku c++ Konstruktory Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra

Bardziej szczegółowo

Informatyka 2. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Informatyka 2. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2008/2009 Wykład nr 3 (05.11.2008) Rok akademicki 2008/2009, Wykład

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Programowanie 2. Język C++. Wykład 3. 3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane

Bardziej szczegółowo

Języki i metody programowania Java. Wykład 2 (część 2)

Języki i metody programowania Java. Wykład 2 (część 2) Języki i metody programowania Java INF302W Wykład 2 (część 2) Autor Dr inż. Zofia Kruczkiewicz 1 Struktura wykładu 1. Identyfikacja danych reprezentowanych przez klasy podczas opracowania koncepcji prostego

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

W dowolnym momencie można zmienić typ wskaźnika.

W dowolnym momencie można zmienić typ wskaźnika. c++ Wskaźniki mają jeszcze jedną przydatną cechę. W dowolnym momencie można zmienić typ wskaźnika. Robi się to za pomocą operatora rzutowania. Najpierw zdefiniujemy sobie wsk_uniwersalny mogący pokazywać

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

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

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

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

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

Bardziej szczegółowo

Dziedziczenie. Ogólna postać dziedziczenia klas:

Dziedziczenie. Ogólna postać dziedziczenia klas: Dziedziczenie Ogólna postać dziedziczenia klas: class nazwa_clasy_pochodnej : specyfikator_dostępu nazwa_clasy_bazowej specyfikator_dostępu : public private protected Specyfikator dostępu definiuje, w

Bardziej szczegółowo

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt Programowanie obiektowe Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt Operator new, new[] Operator new oraz new[] służy do rezerwacji obszarów z zapasie pamięci

Bardziej szczegółowo

Lab 9 Podstawy Programowania

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

Bardziej szczegółowo

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

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32 Programowanie w C++ Wykład 12 Katarzyna Grzelak 20 maja 2019 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 2

PARADYGMATY PROGRAMOWANIA Wykład 2 PARADYGMATY PROGRAMOWANIA Wykład 2 Definiowanie klas w C++ - ciąg dalszy Lista inicjalizująca konstruktora Przeznaczenie - do inicjalizacji pól klasy z kwalifikatorem const i inicjalizacji obiektów składowych

Bardziej szczegółowo

Wyliczanie wyrażenia obiekty tymczasowe

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

Bardziej szczegółowo

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

Spis treści PROGRAMOWANIE OBIEKTOWE W JĘZYKU C++: FUNKCJE ZAPRZYJAŹNIONE Z KLASĄ, PRZEŁADOWANIE OPERATORÓW. Informatyka 2

Spis treści PROGRAMOWANIE OBIEKTOWE W JĘZYKU C++: FUNKCJE ZAPRZYJAŹNIONE Z KLASĄ, PRZEŁADOWANIE OPERATORÓW. Informatyka 2 Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1C300 016 (studia stacjonarne)

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Operator przypisania. Jest czym innym niż konstruktor kopiujący! Operator przypisania Jest czym innym niż konstruktor kopiujący! Domyślnie jest zdefiniowany jako przypisanie składowa po składowej (zatem niekoniecznie bajt po bajcie). Dla klasy X definiuje się jako X&

Bardziej szczegółowo

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

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

Bardziej szczegółowo

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

1 Wskaźniki. 1.1 Główne zastosowania wskaźników 1 Wskaźniki Wskaźnik (ang. pointer) jest obiektem (zmienną) przechowującym adres pamięci. Definiowanie wskaźników: typ *nazwa wskaznika; np.: int *wsk na x;, double *xxx;, char *znak;. Aby można było pracować

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe Wstęp do programowania obiektowego Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe 1 PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI W C++ 2 W C++

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 6.11.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 6.11.2006 1 / 138 Operator przypisania Jest czym innym niż konstruktor kopiujacy!

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

ROZDZIAŁ 2. Operatory

ROZDZIAŁ 2. Operatory Bibliografia [1] Jerzy Grębosz, Symfonia C++, Oficyna Kallimach, Kraków, 1999, [2] Jerzy Grębosz, Pasja C++, Oficyna Kallimach, Kraków, 1999, [3] Bjarne Stroustrup, Język C++, WNT, Warszawa, 1997, [4]

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ęść czwarta Operatory i wyrażenia 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 obiektowe i C++ dla matematyków

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

Bardziej szczegółowo

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

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje Zbudujemy klasę Definicję klasy zapiszmy w pliku tstring.h #ifndef TSTRING_H #define TSTRING_H #include // w pliku nagłówkowym NIE // otwieramy przestrzeni std // interfejs private: // implementacja

Bardziej szczegółowo

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

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady Pętle i tablice. Spotkanie 3 Dr inż. Dariusz JĘDRZEJCZYK Pętle: for, while, do while Tablice Przykłady 11/26/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Pętla w największym uproszczeniu służy

Bardziej szczegółowo

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 12 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 12 1 KLASY ZAPRZYJAŹNIONE Jedna klasa (A) może zadeklarować przyjaźń z inną klasą (B). Oznacza to, że klasa B ma dostęp do wszystkich składników

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 8 Przykład realizowany na wykładzie Klasy StringBad i String. Wstępne pliki załaczone jako źródła.

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

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

Bardziej szczegółowo

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

KLASY cz.1. Dorota Pylak

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

Bardziej szczegółowo

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo Operatory w C++ Operatory arytmetyczne + dodawanie - odejmowanie * mnożenie / dzielenie % modulo Operatory relacyjne (porównania) < mniejszy niż większy niż >= większy lub równy

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

Dziedziczenie jednobazowe, poliformizm

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

Bardziej szczegółowo

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie Komputerów

Programowanie Komputerów Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 17 1. Typy i zmienne Jak wiemy, komputer

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

Zadanie 2: Arytmetyka symboli

Zadanie 2: Arytmetyka symboli 1 Cel ćwiczenia Zadanie 2: Arytmetyka symboli Wykształcenie umiejętności abstrahowania operacji arytmetycznych. Zapoznanie się i przećwiczenie mechanizmu tworzenia przeciążeń funkcji operatorowych. Utrwalenie

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 7

Programowanie komputerowe. Zajęcia 7 Programowanie komputerowe Zajęcia 7 Klasy Klasy to typy danych, które pozwalają na zgromadzenie w jednej zmiennej (obiekcie) zarówno danych jak i operacji związanych z tymi danymi. Obiekt danej klasy może

Bardziej szczegółowo

Operacje wejścia/wyjścia odsłona pierwsza

Operacje wejścia/wyjścia odsłona pierwsza Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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