Zaawansowane programowanie w C++ (PCP)



Podobne dokumenty
Zaawansowane programowanie w C++ (PCP)

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

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

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

Wykład 8: klasy cz. 4

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

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

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

Szablony klas, zastosowanie szablonów w programach

Programowanie (C++) NI 5

Podstawy programowania skrót z wykładów:

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

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

Zaawansowane programowanie w języku C++ Klasy w C++

Zaawansowane programowanie w C++ (PCP)

Programowanie, część I

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

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Elektrotechnika I stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny) Kierunkowy (podstawowy / kierunkowy / inny HES)

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Podstawy Programowania

Zaawansowane programowanie w C++ (PCP)

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

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

ROZDZIAŁ 2. Operatory

Podstawy Programowania

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Podstawy Programowania Obiektowego

TEMAT : KLASY DZIEDZICZENIE

Rok akademicki: 2016/2017 Kod: JFT s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO

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

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

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

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

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

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

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

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

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

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

PARADYGMATY PROGRAMOWANIA Wykład 4

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Spis treści. Wprowadzenie 15

Wprowadzenie do szablonów szablony funkcji

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

PRZEWODNIK PO PRZEDMIOCIE

Wprowadzenie do szablonów szablony funkcji

Wykład 5: Klasy cz. 3

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

PARADYGMATY PROGRAMOWANIA Wykład 2

Język C++ Programowanie obiektowe

Języki i paradygmaty programowania

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Programowanie I C6

Programowanie obiektowe

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Programowanie II C16

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

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

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

Dziedziczenie jednobazowe, poliformizm

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

Informatyka I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) stacjonarne (stacjonarne / niestacjonarne)

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)

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

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

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

Szablony funkcji i szablony klas

Wstęp do Programowania 2

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Wykład 5 Okna MDI i SDI, dziedziczenie

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

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

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Programowanie w języku C++

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

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

Programowanie obiektowe

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

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

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 KONSTRUKTORY

MATERIAŁY DO ZAJĘĆ II

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Język ludzki kod maszynowy

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

KARTA KURSU. Programowanie obiektowe

Konstruktor kopiujacy

Wstęp do programowania obiektowego. Wykład 2

Transkrypt:

Zaawansowane programowanie w C++ (PCP) Wykład 1 - sprawy organizacyjne i wprowadzenie. dr inż. Robert Nowak - p. 1/27

Cel i zakres przedmiotu Umiejętność programowania to umiejętność rozwiazania problemów przy pomocy komputera. Czy ten problem może być rozwiazany przy pomocy komputera? Czy ten problem powinien być rozwiazany przy pomocy komputera? Komputer = głupi automat. zapoznanie słuchaczy z zagadnieniami tworzenia oprogramowania w C++ współcześnie stosowane techniki i biblioteki Zakładana jest znajomość programowania strukturalnego i obiektowego oraz praktyczna znajomość języka C++. - p. 2/27

Podstawowe dane o przedmiocie» Podstawowe dane o przedmiocie» Zajęcia» Literatura» Zaliczenie przedmiotu» Wymaganie oprogramowanie Miejsce spotkań: Piatki 8 15 10 00, sala N7 (wykład) Piatki 8 15 10 00, sala N102 (laboratorium) Prowadzacy: dr inż. Robert Nowak, Zakład Sztucznej Inteligencji, Wydział Elektroniki i Technik Informacyjnych, Politechnika Warszawska. e-mail: r.m.nowak@elka.pw.edu.pl strona przedmiotu: http://staff.elka.pw.edu.pl/ rnowak2/pcp2007l - p. 3/27

Zajęcia» Podstawowe dane o przedmiocie» Zajęcia» Literatura» Zaliczenie przedmiotu» Wymaganie oprogramowanie 1 Klasy autonomiczne, cykl życia obiektów. 2 Agregacja i dziedziczenie, polimorfizm, klasy abstrakcyjne. 3 Laboratorium 1: funkcje wirtualne, hierarchia klas. 4 Wzorce projektowe. 5 Obsługa błędów, mechanizm wyjatków, sprytne wskaźniki. 6 Laboratorium 2: wyjatki. Rozdanie zadań projektowych. 7 Rola projektowania i testowania, repozytorium. 8 Szablony, wstęp do biblioteki standardowej, strumienie. 9 Biblioteka standardowa: kontenery, algorytmy. 10 Laboratorium 4: Kolokwium. 11 Laboratorium 5: realizacja projektu 12 Laboratorium 6: realizacja projektu 13 Aplikacje wielowatkowe, synchronizacja, boost::thread. 14 Laboratorium 7: aplikacje wielowatkowe. - p. 4/27

Literatura» Podstawowe dane o przedmiocie» Zajęcia» Literatura» Zaliczenie przedmiotu» Wymaganie oprogramowanie Bjarne Stroustrup, Język C++, WNT 2002. Bruce Eckel, Thinking in C++, Helion 2002. E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Wzorce projektowe, WNT, 2005. A. Alexandrescu, Nowoczesne projektowanie w C++, WNT, 2005. A. Alexandrescu and H. Sutter, Jȩzyk C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk, Helion, 2005. B. Karlsson, Wiȩcej niż C++. Wprowadzenie do bibliotek Boost, Helion, 2006. S. Meyers, 50 efektywnych sposobów na udoskonalenie Twoich programów, Helion, 2003. - p. 5/27

Zaliczenie przedmiotu» Podstawowe dane o przedmiocie» Zajęcia» Literatura» Zaliczenie przedmiotu» Wymaganie oprogramowanie kolokwium 0 30pkt Podział punktów: ćwiczeń laboratoryjnych 0 40pkt projektów 0 30pkt Warunkiem zaliczenia jest uzyskanie przynajmniej 51 pkt. Ocena: 91 100 punktów ocena 5 81 90 pkt. ocena 4 2 1 71 80 pkt. ocena 4 61 70 pkt. ocena 3 2 1 51 60 pkt. ocena 3 0 50 pkt. ocena 2 - p. 6/27

Wymaganie oprogramowanie» Podstawowe dane o przedmiocie» Zajęcia» Literatura» Zaliczenie przedmiotu» Wymaganie oprogramowanie kompilatory: the GNU Compiler Collection Microsoft Visual Studio 2005 biblioteki: stl boost - http://www.boost.org inne: repozytorium - http://subversion.tigris.org edytor tekstu debugger - p. 7/27

Sposób, aby zostać dobrym programista» Sposób, aby zostać dobrym programista» zasady dobrego stylu programowania Czytać kod innych. Myśleć! Programować. - p. 8/27

zasady» Sposób, aby zostać dobrym programista» zasady dobrego stylu programowania Wykrywanie błędów w programach: Wykorzystywać kompilator. Zawsze doprowadzić do czystej kompilacji (bez żadnych ostrzeżeń) na najwyższym poziomie. Rozumieć każde ostrzeżenie. Stosować standardy kodowania: pliki źródłowe, nazewnictwo, formatowanie kodu źródłowego, stosować konsekwentnie ten sam styl kodowania. - p. 9/27

Typy wbudowane» Typy wbudowane» Czas życia obiektów» Wykorzystywanie stałych» Konwersja typów» Instrukcje sterujace» Przeciażanie nazw funkcji» Przeciażanie nazw (przykład)» Argumenty domyślne» Preprocesor» Wykorzystanie biblioteki standardowej C» Projektowanie modułów, rola testowania logiczny: bool, true, false całkowite: int, long,... rzeczywiste: double,... znakowe: char, wchar_t typ wyliczeniowy enum Kolory { RED = 1, GREEN = 2, BLUE = 4}; void - oznacza brak informacji typy wskaźnikowe typy tablicowe typy referencyjne typedef - p. 10/27

Czas życia obiektów» Typy wbudowane» Czas życia obiektów» Wykorzystywanie stałych» Konwersja typów» Instrukcje sterujace» Przeciażanie nazw funkcji» Przeciażanie nazw (przykład)» Argumenty domyślne» Preprocesor» Wykorzystanie biblioteki standardowej C» Projektowanie modułów, rola testowania l-wartość: odnosi się do czegoś co istnieje w pamięci. Automatyczne: tworzone w chwili napotkania definicji sa niszczone w momencie wyjścia z zasięgu (np. z bloku) definicja powinna być wtedy gdy można zainicjować Statyczne (globalne i zadeklarowane jako static) tworzone tylko raz sa niszczone po zakończeniu programu dynamiczne (tworzone na stercie) operatory new i delete (uwaga! oddzielna wersja dla tablic), programista steruje czasem życia obiektów (tworzy je i usuwa), Nie używamy funkcji z <stdlib.h>, czyli malloc, free itp. - p. 11/27

Wykorzystywanie stałych» Typy wbudowane» Czas życia obiektów» Wykorzystywanie stałych» Konwersja typów» Instrukcje sterujace» Przeciażanie nazw funkcji» Przeciażanie nazw (przykład)» Argumenty domyślne» Preprocesor» Wykorzystanie biblioteki standardowej C» Projektowanie modułów, rola testowania Stałe definiuje się za pomoca słowa kluczowego const. const int NUM = 34; const int WZROST[] = { 174, 185, 193, 168 }; unika się magicznych liczb w kodzie, pokazuje się, że funkcja nie zmienia argumentów, pozwala się kompilatorowi na optymalizacje. Systematycznie korzystać ze stałych symbolicznych! int i = 2, j = 3; const int* p = &i; p = &j; *p = 4; int* const q = &i; q = &j; *q = 4; - p. 12/27

Konwersja typów» Typy wbudowane» Czas życia obiektów» Wykorzystywanie stałych» Konwersja typów» Instrukcje sterujace» Przeciażanie nazw funkcji» Przeciażanie nazw (przykład)» Argumenty domyślne» Preprocesor» Wykorzystanie biblioteki standardowej C» Projektowanie modułów, rola testowania Nie używa się rzutowania w stylu C! nie używa się void* unikać konwersji typów Operatory rzutowania: static_cast - umożliwia konwersję pomiędzy spokrewnionymi typami const_cast - znosi kwalifikator const reinterpret_cast - dowolna konwersja (tak jak w C) dynamic_cast - rzutowanie w górę hierarchii klas double d = 3.2; int i = static_cast<int>(d); - p. 13/27

Instrukcje sterujace» Typy wbudowane» Czas życia obiektów» Wykorzystywanie stałych» Konwersja typów» Instrukcje sterujace» Przeciażanie nazw funkcji» Przeciażanie nazw (przykład)» Argumenty domyślne» Preprocesor» Wykorzystanie biblioteki standardowej C» Projektowanie modułów, rola testowania Instrukcje warunkowe: if... else... switch Iteracja: for while do... while Wołanie funkcji, rekurencja. - p. 14/27

Przeciażanie nazw funkcji» Typy wbudowane» Czas życia obiektów» Wykorzystywanie stałych» Konwersja typów» Instrukcje sterujace» Przeciażanie nazw funkcji» Przeciażanie nazw (przykład)» Argumenty domyślne» Preprocesor» Wykorzystanie biblioteki standardowej C» Projektowanie modułów, rola testowania Funkcje moga mieć te same nazwy. bada się zgodność typów parametrów formalnych i aktualnych, znajdowania właściwej wersji funkcji: 1. ścisła zgodność; 2. promowanie w zakresie typów całkowitych(np. bool int ); 3. standardowe konwersje (np. int double); 4. konwersje zdefiniowane przez użytkownika, 5. wielokropek w deklaracji funkcji (wiele argumentów). Jeżeli znajdzie się dwie pasujace deklaracje: zgłaszany jest bład kompilacji. - p. 15/27

Przeciażanie nazw (przykład)» Typy wbudowane» Czas życia obiektów» Wykorzystywanie stałych» Konwersja typów» Instrukcje sterujace» Przeciażanie nazw funkcji» Przeciażanie nazw (przykład)» Argumenty domyślne» Preprocesor» Wykorzystanie biblioteki standardowej C» Projektowanie modułów, rola testowania Przykład: void print(double); void print(long); print(1l);////print(long) print(1.0);////print(double) print(1);////błąd - niezgodność nie można przeciażać ze względu na zwracana wartość; jest to ułatwienie notacyjne (to programista decyduje, że funkcje o tych samych nazwach wykonuja podobne operacje); stosowane np. dla różnych konstruktorów. ręczne usuwanie niejednoznaczności: jawna konwersja typu, np. static_cast. - p. 16/27

Argumenty domyślne» Typy wbudowane» Czas życia obiektów» Wykorzystywanie stałych» Konwersja typów» Instrukcje sterujace» Przeciażanie nazw funkcji» Przeciażanie nazw (przykład)» Argumenty domyślne» Preprocesor» Wykorzystanie biblioteki standardowej C» Projektowanie modułów, rola testowania Wartość wstawiana, gdy nie dostarczono argumentu. class Point { public: Point(int x = 0, int y = 0); private: int x_; int y_; }; Point::Point(int x, int y) //Nie powtarzać arg. domyślnych : x_(x), y_(y) { } Point p, r(1), s(1,2); Przeciażanie - gdy różny kod. Argumenty domyślne - gdy wiele argumentów, a niektóre maja typowe wartości. Domyślne moga być tylko końcowe argumenty. - p. 17/27

Preprocesor» Typy wbudowane» Czas życia obiektów» Wykorzystywanie stałych» Konwersja typów» Instrukcje sterujace» Przeciażanie nazw funkcji» Przeciażanie nazw (przykład)» Argumenty domyślne» Preprocesor» Wykorzystanie biblioteki standardowej C» Projektowanie modułów, rola testowania Preprocesora należy używać do: dołaczania plików nagłówkowych; #include <nazwa> #include nazwa zabezpieczania plików nagłówkowych przed wielokrotnym dołaczaniem; kompilacji warunkowej. I do niczego więcej! - p. 18/27

Wykorzystanie biblioteki standardowej C» Typy wbudowane» Czas życia obiektów» Wykorzystywanie stałych» Konwersja typów» Instrukcje sterujace» Przeciażanie nazw funkcji» Przeciażanie nazw (przykład)» Argumenty domyślne» Preprocesor» Wykorzystanie biblioteki standardowej C» Projektowanie modułów, rola testowania Wszystkie nagłówki z C zostały obudowane, aby można było je wykorzystywać w C++. Zmieniono ich nazwy. <cassert> - asercje (niezmienniki); <cctype> - klasyfikacja znaków (isalpha, isspace,... ); <cfloat> - ograniczenia reprezentacji zmiennopozycyjnej (np. DBL_MAX); <climits> - stałe ograniczajace zakresy typów wbudowanych (np. INT_MAX); <cmath> - funkcje matematyczne. - p. 19/27

Projektowanie modułów, rola testowania» Typy wbudowane» Czas życia obiektów» Wykorzystywanie stałych» Konwersja typów» Instrukcje sterujace» Przeciażanie nazw funkcji» Przeciażanie nazw (przykład)» Argumenty domyślne» Preprocesor» Wykorzystanie biblioteki standardowej C» Projektowanie modułów, rola testowania Moduł zawiera interfejs (nagłówek) oraz implementację. Używaj przestrzni nazw (jedna przestrzeń nazw na bibliotekę - zbiór powiazanych modułów). Każdy moduł powinien mieć swój test. Test powinien wykonywać się automatycznie (nie powinien komunikować się z człowiekiem). Wykorzystywać asercje do testowania. - p. 20/27

Programowanie obiektowe Wszystkie byty w programie sa obiektami. Program to zbiór obiektów, które się ze soba komunikuja. każdy obiekt posiada typ i tożsamość.» Programowanie obiektowe» Funkcje składowe (metody)» Konstruktor» Destruktor» Konstrukcja i destrukcja» Tworzenie kopii obiektu» Konstruktor kopiujacy Możliwość definiowania typów przez użytkownika: struct class struct X {private:... to to samo co class X {..., ale konwencje... - p. 21/27

Funkcje składowe (metody)» Programowanie obiektowe» Funkcje składowe (metody)» Konstruktor» Destruktor» Konstrukcja i destrukcja» Tworzenie kopii obiektu» Konstruktor kopiujacy dostęp do składowych niejawny argument - wskaźnik this odwołania do this można pominać (skrócenie zapisu) metody stałe metody inline Sekcje (kontrola dostępu) - dziela klasę na interfejs i implementację. class Prostokat { public: Prostokat(const Punkt& a, const Punkt& b); private: Punkt leftup; Punkt rightdown; }; - p. 22/27

Konstruktor» Programowanie obiektowe» Funkcje składowe (metody)» Konstruktor» Destruktor» Konstrukcja i destrukcja» Tworzenie kopii obiektu» Konstruktor kopiujacy Specjalna metoda, która jest wołana, gdy jest tworzony obiekt danej klasy. zawsze wołany - programista nie zapomni zainicjować składowych, możliwość inicjacji prywatnych składowych, elegancki zapis inicjacji obiektów. struct Punkt { int x; int y; //konstruktor domyślny Punkt() { x = 0; y = 0; } //konstruktor Punkt(int wx, int wy) { x = wx; y = wy; } }; Punkt p; //Tworzy punkt, wywołuje konstruktor domyślny Punkt r(1,2); //Tworzy punkt o współrzędnych x == 1, y == 2 - p. 23/27 Punkt* pr = new Punkt(1,2); //To samo, ale obiekt na stercie

Destruktor Jeżeli obiekt klasy ma przydzielane zasoby, to powinno się je zwalniać. Destruktor - metoda wołana gdy niszczony jest obiekt.» Programowanie obiektowe» Funkcje składowe (metody)» Konstruktor» Destruktor» Konstrukcja i destrukcja» Tworzenie kopii obiektu» Konstruktor kopiujacy class PunktN { public: PunktN(int n) { wsp = new int[n]; for(int i=0;i<n;++i) wsp[i] = 0; } PunktN() { delete wsp; } private: int* wsp; }; - p. 24/27

Konstrukcja i destrukcja» Programowanie obiektowe» Funkcje składowe (metody)» Konstruktor» Destruktor» Konstrukcja i destrukcja» Tworzenie kopii obiektu» Konstruktor kopiujacy obiekt automatyczny (nazwany) tworzenie deklaracja (za każdym razem) usuwanie opuszcza się blok obiekt na stercie operator new operator delete (niesta- składowa tyczna) lokalny obiekt statyczny obiekt globalny, składowa statyczna obiekt tymczasowy tworzenie obiektu nadrzędnego deklaracja (za pierwszym razem!) poczatek programu podczas wartościowania wyrażenia niszczenie obiektu nadrzędnego koniec programu koniec programu po dojściu do końca wyrażenia - p. 25/27

Tworzenie kopii obiektu» Programowanie obiektowe» Funkcje składowe (metody)» Konstruktor» Destruktor» Konstrukcja i destrukcja» Tworzenie kopii obiektu» Konstruktor kopiujacy Tworzenie kopii: jawne Foo a; Foo b(a); jawne Foo c = a; przekazywanie wyniku przez wartość; Foo get(); Foo d = get(); przekazywanie argumentu przez wartość; void put(foo x); put(a); class Foo { public: //Deklaracja konstruktora kopiującego Foo(const Foo&);... }; - p. 26/27

Konstruktor kopiujacy Jeżeli brak definicji konstruktora kopiujacego, to zostanie on wygenerowany Obiekt może być przekazywany przez wartość, gdy konstruktor kopiujacy będzie prywatny.» Programowanie obiektowe» Funkcje składowe (metody)» Konstruktor» Destruktor» Konstrukcja i destrukcja» Tworzenie kopii obiektu» Konstruktor kopiujacy Zawsze definiować (dla klas autonomicznych): konstruktor (lub konstruktory) konstruktor kopiujacy destruktor operator przypisania (operator=) - p. 27/27