Programowanie Obiektowo Zorientowane w języku c++ Konstruktory

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

Download "Programowanie Obiektowo Zorientowane w języku c++ Konstruktory"

Transkrypt

1 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 Informatyki Stosowanej i Modelowania Listopad 2016-Październik 2018 Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

2 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

3 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

4 Cechy konstruktora Konstruktory, to specjalne metody biorące udział w inicjalizacji powstających obiektów klas i posiadające pewne specyficzne cechy: Konstruktor to metoda, która nazywa się tak samo jak klasa. class mojaklasa{ double mojepole; mojaklasa(){ mojepole = 0.; } }; Konstruktor nadaje polom obiektu wartości początkowe. W trakcie definiowania obiektu, przydziela mu się miejsce w pamięci, a dopiero potem pracuje dla niego konstruktor. Należy zwrócić uwagę na fakt, że konstruktor sam nie przydziela obiektowi, a tylko ją inicjalizuje. Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

5 Cechy konstruktora Najważniejszym aspektem konstruktora jest to, że jeśli klasa ma odpowiedni konstruktor, to jest on automatycznie uruchamiany przy definiowaniu każdego obiektu tej klasy. class mojaklasa{public: double mojepole; mojaklasa(){mojepole = 0.;} mojaklasa(double mp){mojepole = mp;} }; mojaklasa moj1obiekt, moj2obiekt(3.5); mojaklasa moj3obiekt = mojaklasa(); // jawne wywoł. Konstruktor może być i zwykle bywa przeciążany i jest to bardzo częsta praktyka - w definicjach klas widzi się zwykle kilka wersji konstruktora różniących się oczywiście listą argumentów. Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

6 Cechy konstruktora Konstruktor może inicjalizować obiekty typu const i volatile, ale sam nie może być metodą typu const ani volatile. class Temper{ volatile double tbiez; const double t0; public: Temper() const : t0(0.), tbiez(0.){} Temper() volatile : t0(0.), tbiez(0.){} Temper(): t0(0.), tbiez(0.){}; }; Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

7 Cechy konstruktora Konstruktor nie może być typu static jego zadaniem jest praca na niestatycznych składnikach klasy. class Temper{... static Temper(double t): t0(t), tbiez(0.)... }; Konstruktor nie może być także metodą typu virtual. class Temper{... virtual Temper(double t): t0(t), tbiez(0.)... }; Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

8 Cechy konstruktora Nie można posłużyć się adresem konstruktora nie można definiować wskaźników do konstruktorów class punkt{ double x, y; public: punkt(){x = 0.; y = 0.;} double getx(){return x;} }; int main(){ punkt p; double (punkt::*wskfun)(); wskfun = &punkt::getx; cout << (p.*wskfun)(); wskfun = &punkt::punkt; return 0; } Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

9 Cechy konstruktora Standard C++03 zakłada, że jeśli obiekt ma być składnikiem unii, to jego klasa nie może mieć żadnego konstruktora class punkt{ double x, y; public: punkt()x = 0.; y = 0.; }; class wektor{ double wx, wy; public: wektor()wx = 0.; wy = 0.; }; union unia{ wektor w[1000]; punkt p[1000]; }; Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

10 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

11 Obiekty lokalne automatyczne Obiekty lokalne automatyczne powstają na stosie w momencie ich definicji w trakcie wykonywania programu. Konstruktor takiego obiektu uruchamiany jest, gdy program napotyka definicję tego obiektu. Przestają one istnieć, gdy sterowanie wychodzi poza blok, w którym zostały powołane do życia. void fun(){ int xloc = 0; xloc++; cout << "Obiekt lokalny: " << xloc << endl; } int main(){ fun(); fun(); return 0; } Obiekt lokalny: 1 Obiekt lokalny: 1 Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

12 Obiekty lokalne statyczne Obiekty lokalne statyczne definiowane są słowem static. Obiekty takie istnieją od samego początku programu, aż do momentu jego zakończenia, jednak są one dostępne tylko w zakresie ważności bloku, w którym zostały zdefiniowane. Konstrukcja obiektu następuje jeszcze przed rozpoczęciem wykonywania programu procedurą main() void fun(){ static int xlocstat = 0; xlocstat++; cout << "Obiekt statyczny: " << xloc << endl; } int main(){ fun(); fun(); return 0; } Obiekt statyczny: 1 Obiekt statyczny: 2 Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

13 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

14 Obiekty globalne Obiekty dowolnej klasy zdefiniowane poza wszystkimi funkcjami, są obiektami globalnymi. Zakres ważności obiektu globalnego to plik - użycie takiego obiektu w innych plikach wymaga w tych plikach deklaracji. Czas życia takich obiektów to cały czas wykonywania programu. Konstrukcja obiektu następuje jeszcze przed rozpoczęciem wykonywania programu procedurą main() class punkt{ double x, y; public: punkt(){x = 0.; y = 0.;} }; punkt pglob; int main(){ punkt ploc = pglob; } Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

15 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

16 Obiekty dynamiczne Obiekt może zostać zdefiniowany dynamicznie operatorem new. class punkt{ public: double x, y; punkt(double x0 = 0., double y0 = 0.){ x = x0; y = y0; } }; ostream& operator<<(ostream& str, punkt& p){ return str << "(" << p.x << ", " << p.y << ")"; } punkt* fun(punkt *pt){ pt = new punkt[100]; for (int i = 0; i < 100; i++) pt[i] = punkt(i, i); return pt; } Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

17 Obiekty dynamiczne int main(){ punkt *wskp1 = new punkt(1., 2.), *wskp2; wskp2 = fun(wskp2); cout << *wskp1 << " " << wskp2[10] << endl; delete wskp1; delete [] wskp2; return 0; } (1, 2) (10,10) Jest to bardzo pożyteczny sposób alokacji obiektów i ich tablic. Umożliwia utworzenie w trakcie wykonywania programu takiej liczby obiektów, jaka jest wymagana. Obiekty tworzone są na stercie (ang. heap) obszarze pamięci o strukturze drzewa przeznaczonym na dynamiczne struktury danych i dynamiczne obszary pamięci. Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

18 Obiekty dynamiczne Czas życia obiektu do czasu likwidacji obiektu funkcją delete. Konieczny jest przynajmniej jeden dostępny wskaźnik, któremu przypisany jest wykreowany obiekt inaczej obiekt jest niedostępny. Utrata wskaźnika oznacza brak kontaktu z obiektem - będzie on nadal istniał, ale nie ma już do niego dostępu. Jeśli operator new nie potrafi wykreować obiektu (bo na przykład nie ma już miejsca w pamięci) wówczas konstruktor tego obiektu nie jest uruchamiany. Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

19 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

20 Jawne wywołanie konstruktora Obiekt może być stworzony przez jawne wywołanie konstruktora. int main(){ punkt tabpunkt[3] = {punkt(1., 2.), punkt(-1., 3.), punkt(7., 2.)}; for (int i =0; i<3; i++) cout << tabpunkt[i]; return 0; } (1, 2)(-1, 3)(7, 2) W efekcie otrzymujemy obiekt, który nie ma nazwy. Czas życia takiego obiektu jest ograniczony do wyrażenia, w którym użyto konstruktora. Należy zwrócić uwagę na sposób użycia konstruktora nie stosuje się notacji: obiekt.metoda(argumenty) Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

21 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

22 Dalsze sytuacje, gdy pracuje konstruktor Konstruktor jest wywoływany również przy tworzeniu obiektów chwilowych. void fun(punkt p){ cout << p; } int main(){ fun(punkt(-3., 9.)); // parametr chwilowy return 0; } Konstruktor klasy podstawowej wywoływany jest przy kreacji obiektu klasy pochodnej, ale o tym potem. Konstruktor pracuje także jeśli powstaje obiekt, który zawiera w sobie obiekt innej klasy - uruchamiany jest wtedy najpierw konstruktor tego składnika. Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

23 Konstruktor obiektów zawartych w innej klasie class data{ public: unsigned short d, m, r; data(){cout << "Konstruktor klasy data" << endl;} }; class osoba{ public: string imie, nazwisko; data dur; osoba(string im = "", string nz = "", data du = data()): imie(im), nazwisko(nz), dur(du) {cout << "Konstruktor klasy osoba" << endl;} }; osoba os; Konstruktor klasy data Konstruktor klasy osoba Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

24 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

25 Konstruktor domyślny Konstruktor domyślny to taki konstruktor, który można wywołać bez żadnego argumentu. class punkt{ double x, y; public: punkt(double x0 = 0., double y0 = 0.) {x = x0, y = y0} // konstruktor domyslny }; Zauważmy, że nie mówimy konstruktor bez argumentów, tylko konstruktor, który można wywołać bez żadnych argumentów. Klasa może mieć tylko jeden konstruktor domniemany. Jeśli klasa nie ma żadnego konstruktora, wówczas sam kompilator wygeneruje dla tej klasy konstruktor domyślny. Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

26 Konstruktor domyślny, a przeciążanie class punkt{ double x, y; public: punkt(){x = 0.; y = 0.;} // konstruktor domyslny punkt(double x0 = 0., double y0 = 0.) {x = x0; y = y0;} // konstruktor domyslny }; int main(){ punkt p1(1., -3.), p2(-3.); // OK punkt p; // OK punkt tabpunkt[2] = {punkt(1., 2.), punkt(-1., 3.)}; // OK punkt tbpnt[2] = {punkt(1., 2.)}; // OK } W ostatniej linii kodu istnieje konieczność niejawnego użycia konstruktora domyślnego w celu inicjalizacji drugiego elementu tablicy tbpnt Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

27 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

28 Lista inicjalizacyjna konstruktora Pola można inicjalizować na liście inicjalizacyjnej konstruktora wg. schematu: klasa::klasa(argumenty):lista { cialo_klasy } int fg = 0, fig = 5; class wektor{ static int lw; const int nrw; volatile double czas; double wx, wy; int& nf; public: wektor(): lw(0), nrw(0), czas(0.), wx(0.), nf(fg){ lw = 5; nrw = 0; czas = 10.; // ponowne podstawienie wx = wy = 0.; // ponowne podstawienie nf = fig; } // ponowne podstawienie }; int wektor::lw; // inicjalizacja pola statycznego Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

29 Lista inicjalizacyjna konstruktora Lista inicjalizacyjna konstruktora specyfikuje jak należy zainicjować niestatyczne pola klasy. Standard C++03 pozwala polom zdefiniowanym przez wartość i nie będącym typu const nadać wartość na dwa sposoby przy użyciu konstruktora : przez listę inicjalizacyjną konstruktora przez zwykłe podstawienie w ciele konstruktora class wektor{ double wx, wy; public: wektor(double x0, double y0): wx(x0) {wy = y0;} }; Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

30 Lista inicjalizacyjna konstruktora Referencje i pola typu const muszą w standardzie C++03 być inicjalizowane jedynie na liście inicjalizacyjnej konstruktora: int fg = 0, fig = 5; class wektor{ const int nrw; int &nrfig; wektor(): nrw(0.), nrfig(0), nrfig(fg){ nrw = 3.; nrfig = fig;} }; Należy przy tym zwrócić uwagę na następujące fakty: Nadanie wartości początkowej referencji polega na przypisaniu jej do wcześniej istniejącego obiektu - stałe wartości odpadają. W przeciwieństwie do pól typu const referencję można następnie (np. w ciele konstruktora) przypisać innemu obiektowi. Natomiast użycie przypisania: wektor() {nrfig = fig;} bez uprzedniej inicjalizacji jest niemożliwe. Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

31 Lista inicjalizacyjna konstruktora Inicjalizować można nie tylko argumentem konstruktora, ale również wyrażeniem, w którym można użyć funkcji zwykłej lub nawet metody. class punkt{ double x, y; punkt(double x0 = 0., double y0 = 0.): x(x0), y(y0){} double odl(punkt p); }; class wektor{ double wx, wy, dlug; wektor(punkt p1 = punkt(0., 0.), punkt p2 = punkt(0., 0.)): wx(p2.x - p1.x), wy(p2.y - p1.y), dlug(p1.odl(p2)){} }; Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

32 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

33 Konstruktory niepubliczne Konstruktor może być niepubliczny. Jest on składnikiem klasy i jako takiego obowiązują go również zwykłe reguły dostępu ustalane za pomocą słów: public:, protected: i private:. Klasa, która nie ma publicznych konstruktorów nazywana jest klasą prywatną. Pomimo tego, iż konstruktor jest niedostępny powszechnie, jest dostępny dla metod tej klasy. Funkcja zaprzyjaźniona czy też klasa zaprzyjaźniona ma również dostęp do prywatnych składników klasy więc może uruchomić prywatny konstruktor. Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

34 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

35 Konstruktor kopiujący Kopiującym nazywamy konstruktor, który można wywołać z jednym jawnym argumentem będącym referencją typu własnej klasy: klasa::klasa(klasa&) Konstruktor ten tworzy obiekt, który jest kopią innego, już istniejącego obiektu tej klasy. Konstruktor kopiujący nie jest obowiązkowy. Jeśli nie zostanie zdefiniowany wówczas kompilator wygeneruje go sobie sam. Konstruktor kopiujący pracuje w kilku sytuacjach, które można najogólniej podzielić na: przypadki jawne, praca niejawna - bez wiedzy programisty Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

36 Konstruktor kopiujący Jawne użycie konstruktora kopiującego następuje przy definicji nowego obiektu w następujący sposób: klasa obiekt_wzor; klasa obiekt_nowy = klasa(obiekt_wzor); Niejawne wywołanie konstruktora kopiującego pewnej klasy następuje najczęściej w sytuacjach: jeśli argumentem funkcji jest obiekt tej klasy, a przesyłanie tego obiektu odbywa się przez wartość. gdy funkcja jako swój rezultat zwraca przez wartość obiekt tej klasy. punkt fun(punkt pt){... return pt; } Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

37 Konstruktor kopiujący Wiemy już, że niemożliwe jest pozbawienie konstruktora kopiującego prawa modyfikowania oryginału. Konstruktor powinien (a nawet musi) odbierać argument jako referencję, ale powinien zagwarantować niezmienność obiektu - konstruktor taki deklaruje się następująco: wektor::wektor(const wektor& wzorzec); Obiekt stanowiącyu parametr aktualny nie musi być koniecznie stały parametrami będą różne obiekty: czasem stałe, czasem nie. Natomiast tak zdeklarowany konstruktor gwarantuje niezmienność przesłanego mu obiektu. Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

38 Konstruktor kopiujący Jeśli konstruktor kopiujący nie zostanie zdefiniowany, to kompilator postara się go wygenerować automatycznie. Kopiowanie odbywa się wówczas składnik po składniku - powstaje w ten sposób obiekt, który jest idealną kopią wzorca. W takiej sytuacji definiowanie konstruktora nie jest konieczne - do identycznych kopii wystarczy konstruktor kopiujący generowany automatycznie. Są jednak sytuacje, kiedy taka dosłowna kopia jest niepożądana - jest tak wtedy, gdy składnikiem klasy jest wskaźnik. Wtedy koniecznym jest zdefiniowanie swojego własnego konstruktora kopiującego. Rozważmy następującą klasę Osoba : Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

39 Konstruktor kopiujący class Osoba{ public: string *imie, *nazwisko, *miasto; Osoba(string im = "", string nzw = "", string mst = ""); }; Osoba::Osoba(string im, string nzw, string mst){ imie = new string; nazwisko = new string; miasto = new string; *imie = im; *nazwisko = nzw; *miasto = mst; } Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

40 Konstruktor kopiujący Spodziewamy się, że wykonanie kodu: int main(){ Osoba jk("jan", "Kowalski", "Warszawa"); Osoba inny_jk = jk; *inny_jk.miasto = "Krakow"; cout << *jk.miasto << ", " << *inny_jk.miasto << endl; return 0; } wygeneruje strumień wyjściowy: Warszawa, Krakow podczas gdy strumień wyjściowy jest następujący: Krakow, Krakow Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

41 Automatyczny konstruktor kopiujący jk imie nazwisko miasto Jan Kowalski Warszawa Kraków inny_jk imie nazwisko miasto Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

42 Konstruktor kopiujący Problemem jest wygenerowany automatycznie konstruktor kopiujący. Kopiuje wszystkie pola-wskaźniki klasy, ale nie zmienia przypisanych im adresów. Wszystkie pola-wskaźniki obiektów jk i inny_jk pokazują te same miejsca w pamięci - zmiana zawartości któregokolwiek z tych miejsc dokonywana jest więc dla obu obiektów. Rozwiązaniem jest zdefiniowanie własnego, bardziej inteligentnego konstruktora kopiującego. Osoba::Osoba(const Osoba& os){ imie = new string; nazwisko = new string; miasto = new string; *imie = *os.imie; *nazwisko = *os.nazwisko; *miasto = *miasto; } Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

43 Własny konstruktor kopiujący jk Jan inny_jk Jan imie nazwisko Kowalski imie nazwisko Kowalski miasto Warszawa miasto Warszawa Kraków Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

44 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

45 Konstruktor konwertujący Konwertującym nazywamy konstruktor, który można wywołać z jednym jawnym argumentem innej klasy lub typu wbudowanego: class complex{ public: double re, im; complex(double d): re(d), im(0.){} }; ostream& operator<<(ostream& str, const complex& c){ str << "(" << c.re << ", " << c.im << ")"; return str; } int main(){ double mydbl = -3.; complex c(mydbl); cout << "Liczba zespolona c: " << c << endl; } Liczba zespolona c: (-3, 0) Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

46 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

47 Wady konstruktorów Nie można zdefiniować konstruktora dla typu wbudowanego. Nie można stworzyć konstruktora dla klasy, która nie jest własnością programisty (np.: klasa biblioteczna) - modyfikacje takiej klasy są jednak zwykle niepożądane. Konstruktor konwertujący powinien otrzymywać argumenty typu deklarowanego - w innym przypadku może dochodzić do nieporozumień. Konstruktor konwertujący musi mieć dostęp do składników obcej klasy - tej, której obiekt podlega konwersji i to właśnie ta klasa musi zapewnić mu dostęp poprzez: składniki publiczne, deklarację przyjaźni. co często jest niemożliwe. Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

48 Spis treści 1 Cechy konstruktora 2 Konstruowanie obiektów lokalnych 3 Konstruowanie obiektów globalnych 4 Konstrukcja obiektów tworzonych operatorem new 5 Jawne wywołanie konstruktora 6 Dalsze sytuacje, gdy pracuje konstruktor 7 Konstruktor domyślny (domniemany) 8 Lista inicjalizacyjna konstruktora 9 Konstruktory niepubliczne 10 Konstruktor kopiujący (albo inicjalizator kopiujący) 11 Konstruktor konwertujący (konwerter) 12 Wady konstruktorów 13 Destruktor Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

49 Destruktor Destruktorem klasy Klasa jest metoda o nazwie ~Klasa - metoda ta posiada kilka cech charakterystycznych: Destruktor pracuje automatycznie, gdy obiekt jest likwidowany. Klasa nie musi mieć obowiązkowo destruktora, gdyż: nie likwiduje on obiektu, nie zwalnia obszaru pamięci zajmowanego przez obiekt. Rolą destruktora są dodatkowe działania wymagane przed zniszczeniem obiektu - np. gdy konstruktor inkrementuje licznik obiektów, to destruktor powinien zmniejszać ich liczbę. class punkt{ static int liczbapuntow; punkt(){++liczbapuntow;} ~punkt(){liczbapuntow--;} }; int punkt::liczbapuntow; Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

50 Destruktor Częstym użyciem destruktora jest przypadek dynamicznej rezerwacji pamięci operatorem new - wtedy rolą destruktora jest zwolnienie tej pamięci instrukcją delete. class Osoba{ public: string imie; string nazwisko; string *Dzieci; Osoba(string im = "", string nzw = "", int ld){ imie = im; nazwisko = nzw; Dzieci = new string[ld]} ~Osoba(){delete [] Dzieci} }; Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

51 Destruktor Destruktor nie może zwracać żadnej wartości - nawet typu void. Destruktor nie posiada żadnych jawnych argumentów nie może być więc przeciążany. Destruktor pracuje automatycznie, gdy obiekt automatyczny lub chwilowy wychodzi ze swojego zakresu ważności. Jeśli obiekt lokalny jest statyczny, to mimo, że kończy się jego zakres ważności, nie jest likwidowany więc także nie pracuje jego destruktor. Likwidacja takiego obiektu następuje dopiero przy zakończeniu programu i wtedy też rusza do pracy destruktor. Jeśli kończy się zakres ważności referencji obiektu destruktor nie jest aktywowany. Analogicznie destruktor nie jest automatycznie wywoływany, gdy wskaźnik do jakiegoś obiektu wychodzi ze swojego zakresu. Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

52 Destruktor Destruktor może odwołać się do metody swojej klasy. Niemożliwe jest pobranie adresu destruktora. Obiekt klasy mającej destruktor nie może być składnikiem unii. Destruktor nie może być ani const ani volatile, ale może pracować na obiektach swojej klasy typu const i volatile. class Temper{ volatile double tbiez; const double t0; public: Temper(): t0(0.), tbiez(0.){}; ~Temper() const {} ~Temper() volatile {} ~Temper(){} }; const Temper tpieca; volatile Temper twsadu; Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

53 Destruktor Destruktor można wywołać jawnie poprzez podanie całej jego nazwy: z metod klasy - np. ~klasa(); z innego miejsca w programie - w tym przypadku w przeciwieństwie do jawnego wywołania konstruktora musi być podany obiekt, referencja lub wskaźnik na rzecz którego pracuje - ob.~klasa, ref.~klasa lub wsk->~klasa. Jeśli klasa nie ma destruktora, a mimo to zostanie jawnie wywołany, to wywołanie takie zostanie zignorowane. Można również wywołać destruktor dla typu wbudowanego - takie wywołanie jest dopuszczalne, ale ignorowane. Mirosław Głowacki (AGH, UJK) Programowanie w języku c / 53

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

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

Podstawy programowania w języku C++ Zadania

Podstawy programowania w języku C++ Zadania Podstawy programowania w języku C++ Zadania Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki

Bardziej szczegółowo

Programowanie Obiektowew języku C++ Zadania L4

Programowanie Obiektowew języku C++ Zadania L4 Programowanie Obiektowew języku C++ Zadania L4 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki

Bardziej szczegółowo

Programowanie Obiektowew języku C++ Zadania L4

Programowanie Obiektowew języku C++ Zadania L4 Programowanie Obiektowew języku C++ Zadania L4 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki

Bardziej szczegółowo

Programowanie Obiektowew języku C++ Zadania L2

Programowanie Obiektowew języku C++ Zadania L2 Programowanie Obiektowew języku C++ Zadania L2 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki

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

Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm

Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki

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

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

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

Programowanie Obiektowew języku C++ Zadania L2

Programowanie Obiektowew języku C++ Zadania L2 Programowanie Obiektowew języku C++ Zadania L2 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki

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

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

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

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

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

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

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

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

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

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

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

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

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

Programowanie Obiektowew języku C++ Zadania L9

Programowanie Obiektowew języku C++ Zadania L9 Programowanie Obiektowew języku C++ Zadania L9 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki

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

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

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

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

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

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY Inicjalizacja obiektu KONSTRUKTORY Inicjalizacja Przyczyną wielu błędów w programach jest nieprawidłowe zainicjalizowanie zmiennych na początku działania programu. Obiekt zawiera z reguły szereg pól ich

Bardziej szczegółowo

Język C++ Programowanie obiektowe

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

Bardziej szczegółowo

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

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

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład V - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Programowanie obiektowe Dziedziczenie (inheritance) - mechanizm

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

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

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

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

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

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

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

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

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory. Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory. Konstruktory Konstruktory w językach obiektowych są to specjalne metody wywoływane podczas tworzenia nowego obiektu i służące do

Bardziej szczegół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

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 12

Programowanie obiektowe w C++ Wykład 12 Programowanie obiektowe w C++ Wykład 12 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) 1 / 22 Zakresowe pętle for double tab[5] {1.12,2.23,3.33,4.12,5.22 for(double x: tab)

Bardziej szczegółowo

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

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

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

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

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

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

Bardziej szczegółowo

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz:

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz: Prawa dostępu do składowych klasy PRAWA PRZYJACIÓŁ KLASY 91 Dostęp z zewnątrz: double limit; ; water_temp T; T.limit = 100; Dostęp z wewnątrz: double set_temp(double nt) { if (nt0) ; water_temp

Bardziej szczegół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

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

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

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

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

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 obiektowe w języku

Programowanie obiektowe w języku Programowanie obiektowe w języku C++ Stanisław Gepner sgepner@meil.pw.edu.pl Dziedziczenie Wstęp Zacznijmy od przykładu Przykład rolniczy Każde zwierzątko wydaje dźwięk Każde się tak samo porusza Musimy

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

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

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

Programowanie Obiektowew języku C++ Zadania L8

Programowanie Obiektowew języku C++ Zadania L8 Programowanie Obiektowew języku C++ Zadania L8 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki

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

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h Programowanie II Lista 3 Modyfikatory dostępu plik TKLientBanku.h plik z funkcją main Przyjaźń Dziedziczenie Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Jest to

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

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

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

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

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

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

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

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

Bardziej szczegółowo

PROGRAMOWANIE 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

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

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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie 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

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw 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 Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Wirtualne destruktory class A int* a; A(int _a) a = new int(_a);} virtual ~A() delete a;} class B: public A double* b;

Bardziej szczegół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

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

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

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

Programowanie, część I

Programowanie, część I Programowanie, część I Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 22 lutego 2011 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 22 lutego 2011 1 / 80 Wstęp Informacje organizacyjne

Bardziej szczegółowo

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów

Bardziej szczegół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

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne Przeciążenie funkcji polega na użyciu funkcji z tą samą nazwą, które mają różne listy argumentów(różne typy, różna ilość lub to i inne).

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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