Programowanie obiektowe w C++ Wykªad 1

Podobne dokumenty
Programowanie obiektowe w C++ Wykªad 4

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

Listy i operacje pytania

Wykład 8: klasy cz. 4

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

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

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Wykład 5: Klasy cz. 3

1. Wprowadzenie do C/C++

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

Programowanie i struktury danych

Wstęp do Programowania 2

1. Wprowadzenie do C/C++

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

Interfejsy, klasy wewn trzne jako szczególny rodzaj obiektów

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

Model obiektu w JavaScript

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

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

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

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

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

Podstawy modelowania w j zyku UML

Podstawy Programowania Obiektowego

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

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

Sposoby przekazywania parametrów w metodach.

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

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

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

Laboratorium 1 - Programowanie proceduralne i obiektowe

Podstawy Programowania Obiektowego

Do czego służą klasy?

Imi i nazwisko... Egzamin - Programowanie Obiektowe II rok informatyki, studia pierwszego stopnia, niestacjonarne Termin zerowy

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

Kompozycja i dziedziczenie klas

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

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

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

Języki i paradygmaty programowania

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

Materiały do zajęć VII

19. Obiektowo± 1 Kacze typowanie. 2 Klasy

Programowanie obiektowe

Programowanie obiektowe w Perlu

Podstawy modelowania w j zyku UML

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

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

Programowanie obiektowe w C++ Wykład 12

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI)

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

Programowanie obiektowe język C++

TEMAT : KLASY DZIEDZICZENIE

Mechanizm dziedziczenia

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

Projektowanie klas c.d. Projektowanie klas przykład

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

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

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

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

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

Do czego służą klasy?

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

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

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

KLASY cz.1. Dorota Pylak

Android. Podstawy tworzenia aplikacji. Piotr Fulma«ski. March 4, 2015

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

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Technologie i usługi internetowe cz. 2

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

Wzorce projektowe strukturalne cz. 1

Programowanie, część I

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

Wykład 4: Klasy i Metody

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Enkapsulacja, dziedziczenie, polimorfizm

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

Programowanie obiektowe

TEMAT : KLASY POLIMORFIZM

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

Wyliczanie wyrażenia obiekty tymczasowe

Programowanie obiektowe w języku

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

Język C++ Programowanie obiektowe

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

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Programowanie obiektowe w C++ Wykład 1

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

ANALIZA NUMERYCZNA. Grzegorz Szkibiel. Wiosna 2014/15

Lab. 02: Algorytm Schrage

PARADYGMATY PROGRAMOWANIA Wykład 4

Wprowadzenie do programowanie obiektowego w języku C++

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

PARADYGMATY PROGRAMOWANIA Wykład 2

Transkrypt:

Programowanie obiektowe w C++ Wykªad 1 dr Lidia St pie«akademia im. Jana Dªugosza w Cz stochowie L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 1 / 37

Zagadnienia: Klasy, obiekty Dziedziczenie Polimorzm Przeci»anie operatorów Operatory rzutowania Obªuga wyj tków Szablony STL - standardowa biblioteka szablonów Obsªuga wej±cia, wyj±cia oraz plików L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 2 / 37

Literatura Prata Stephen, Szkoªa programowania. J zyk C++. Wydawnictwo Helion, Gliwice 2012 http://www.cplusplus.com Bjarne Stroustrup. J zyk C++. Kompendium wiedzy. Wydawnictwo Helion, Gliwice 2014. Siddhartha Rao. C++. Dla ka»dego. Wydanie VII. Wydawnictwo Helion, Gliwice 2014. Alex Allain. C++. Przewodnik dla pocz tkuj cych. Wydawnictwo Helion, Gliwice 2014. L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 3 / 37

Programowanie proceduralne Problem dzielony jest na mniejsze fragmenty, zwane moduªami. Programista decyduje jakie chce mie funkcje(procedury). Wybiera najlepsze algorytmy. Projektuje struktury do przechowywania danych. L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 4 / 37

Programowanie obiektowe Zdecyduj, jakie chcesz mie klasy; dla ka»dej klasy dostarcz peªny zbiór operacji; korzystaj c z mechanizmu dziedziczenia jawnie wska», co jest wspólne. Cechy j zyka programowania obiektowego: abstrakcyjne typy danych (klasy) hermetyzacja danych (ukrywanie) dziedziczenie polimorzm L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 5 / 37

Hermetyzacja (ang. encapsulation) Kapsuªkowanie, enkapsulacja - ograniczenie dost pno±ci danych i funkcji wewn trznych klas i obiektów, udost pnianie ich jedynie za pomoc specjalnych funkcji nazywanych metodami. Polimorzm Wielopostaciowo± - mo»liwo± istnienia wielu metod o tej samej nazwie, powi zana z mo»liwo±ci wyboru konkretnej metody podczas wykonywania. L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 6 / 37

Dziedziczenie Jedna klasa obiektów mo»e by zdeniowana jako szczególny przypadek innej ogólniejszej klasy, a denicje metod i pól danych klasy ogólniejszej umieszczane s automatycznie w klasie szczególnej. Klasa ogólna nazywana jest klas bazow a klasa szczególna klas pochodn. Klasy pochodne mog deniowa swoje wªasne metody i pola danych, które mog przesªania dziedziczone metody i pola danych. Klasa mo»e dziedziczy wªa±ciwo±ci wi cej ni» jednej klasy - dziedziczenie wielorakie. L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 7 / 37

Programowanie zorientowane obiektowo Klasy Denicja klasy tworzy nowy typ danych. Klasy s opisami obiektów. Obiekty mog przechowywa dane oraz wykonywa okre±lone przez programist zadania. Szkielet denicji klasy: class NazwaKlasy { // tre± klasy }; Na tre± klasy skªadaj si deniowane pola i metody. Pola sªu» do przechowywania danych. Metody sªu» do wykonywania ró»nych operacji na danych. L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 8 / 37

Obiekty w C++ Obiekt: abstrakcyjny byt reprezentuj cy lub opisuj cy pewn rzecz lub poj cie obserwowane w ±wiecie rzeczywistym. Obiekt przechowuje pewne informacje na swój temat (atrybuty). Obiekt charakteryzuje si pewnym zakresem zachowa«. Mo»na poprosi obiekt o wykonanie pewnej operacji na samym sobie. Przykªady: Klasa zmienna; Klasa* wskaznik; wskaznik = new Klasa(argumenty); Klasa* wskaznik = new Klasa(argumenty); L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 9 / 37

Pola klas Pola s skªadowymi klasy, deniowanymi w jej wn trzu (inaczej w ciele klasy). Po utworzeniu zmiennej typu klasowego (obiektu), do jej pól nale»y odwoªywa si za pomoc operatora wyboru skªadowej oznaczanego znakiem kropki '.'. zmienna.pole Po utworzeniu obiektu przy pomocy operatora new, do pól obiektu nale»y odwoªywa si za pomoc operatora wyboru skªadowej, oznaczanego symbolem '->'. wskaznik->pole L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 10 / 37

Metody klas Metody: Operacje wykonywane na obiektach. S wykonywane na skutek wysªania do obiektu komunikatu, który wywoªuje okre±lon metod (operacj ). Metody nosz równie» nazw funkcji skªadowych. Metody deniowane s w ciele klasy. Ka»da metoda mo»e przyjmowa argumenty oraz zwraca wynik. Argumenty metody to dane, które mo»na jej przekaza. Metoda mo»e mie dowoln liczb argumentów (w szczególno±ci 0) umieszczonych w nawiasie okr gªym za jej nazw, oddzielonych przecinkami. Metoda, która nie ma argumentów, ma puste nawiasy okr gªe. Metoda mo»e zwraca wynik przez zastosowanie instrukcji return. Je»eli metoda nic nie zwraca, jako zwracany typ nale»y zastosowa sªowo void. L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 11 / 37

Odwoªanie do metod klasy Po utworzeniu obiektu do jego metod nale»y odwoªywa si : za pomoc operatora wyboru skªadowej kropiki '.': Klasa zmienna; zmienna.metoda(argumenty); za pomoc operatora wyboru skªadowej oznaczonego symbolem '->', o ile obiekt zostaª utworzony przy u»yciu operatora new: Klasa* wskaznik = new Klasa(argumenty); wskaznik->metoda(argumenty); L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 12 / 37

Modykatory dost pu W j zyku C++ dost p do skªadowych klasy jest okre±lany za pomoc sªów kluczowych (modykatorów dostepu): private: skªadowe nie s dost pne dla klienta klasy (aplikacji korzystaj cej z klasy), dost p do tych skªadowych maj tylko metody klasy, public: skªadowe s dost pne dla klienta klasy, nie ma ogranicze«dost pu, protected: wykorzystywane podczas dziedziczenia, dost p do nich maj metody klasy lub metody klas potomnych. Uwaga Domy±lnie, je»eli przed pierwsz skªadow klasy nie wyst puje»adne okreslenie, dost p jest prywatny, co oznacza,»e dost p do tej skªadowej maj tylko metody deniowanej klasy. L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 13 / 37

Przykªad 1 - denicja klasy class Baton { public: //metody void setnazwa(string nazwabatonu) { nazwa = nazwabatonu; } void setilosc(int iloscbatonu) { ilosc = iloscbatonu; } void setcena(float cenabatonu) { cena = cenabatonu; } void wypisz() { cout << nazwa << ", " << ilosc << " szt., "; cout << cena << "zl" << endl; } private://pola string nazwa; int ilosc; float cena; }; L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 14 / 37

Przykªad 1 - obiekty klasy int main() { Baton baton1; baton1.setnazwa("mars"); baton1.setilosc(14); baton1.setcena(3.15); baton1.wypisz(); Baton baton2; } baton2.setnazwa("prince Polo"); baton2.setilosc(100); baton2.setcena(1.95); baton2.wypisz(); L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 15 / 37

Przykªad 2 - deklaracja metod w denicji klasy class Baton { public: //metody void setnazwa(string nazwabatonu); void setilosc(int iloscbatonu); void setcena(float cenabatonu); void wypisz(); private://pola string nazwa; int ilosc; float cena; }; L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 16 / 37

Przykªad 2 - denicja metod klasy Baton void Baton::setNazwa(string nazwabatonu) { nazwa = nazwabatonu; } void Baton::setIlosc(int iloscbatonu) { ilosc = iloscbatonu; } void Baton::setCena(float cenabatonu) { cena = cenabatonu; } void Baton::wypisz() { cout << nazwa << ", " << ilosc << " szt., "; cout << cena << "zl" << endl; } L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 17 / 37

Przykªad 3 - inicjalizacja pól w ciele klasy tylko w C++11 class Baton { public: //metody void setnazwa(const string& nazwabatonu); void setilosc(int iloscbatonu); void setcena(float cenabatonu); void wypisz(); private://pola string nazwa = ""; int ilosc = 0; float cena = 0.00; }; int main(){ Baton baton1; baton1.wypisz(); } L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 18 / 37

Przykªad 4 - Baton.h #ifndef BATON_H #define BATON_H #include <string> using namespace std; class Baton { public: //metody void setnazwa(const string& nazwabatonu); void setilosc(int iloscbatonu); void setcena(float cenabatonu); void wypisz(); private://pola string nazwa; int ilosc; float cena; }; #endif L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 19 / 37

Przykªad 4 - Baton.cpp #include <iostream> #include "Baton.h" void Baton::setNazwa(string nazwabatonu) { nazwa = nazwabatonu; } void Baton::setIlosc(int iloscbatonu) { ilosc = iloscbatonu; } void Baton::setCena(float cenabatonu) { cena = cenabatonu; } void Baton::wypisz() { cout << nazwa << ", " << ilosc << " szt., "; cout << cena << "zl" << endl; } L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 20 / 37

Przykªad 4 - main.cpp #include <iostream> #include <string> #include "Baton.h" using namespace std; int main() { Baton baton1; } baton1.setnazwa("mars"); baton1.setilosc(14); baton1.setcena(3.15); baton1.wypisz(); L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 21 / 37

Konstruktor klasy Konstruktor gwarantuje poprawn inicjalizacj obiektu. Jest on automatycznie wywoªywany przez kompilator, w miejscu, w którym tworzony jest obiekt, zanim jeszcze klient klasy b dzie mógª podj jakiekolwiek dziaªania zwi zane z obiektem. Konstruktor mo»e posiada argumenty okre±laj ce sposób tworzenia obiektu. L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 22 / 37

Konstruktory klas Konstruktor to specjalna metoda, która jest wywoªywana podczas tworzenia obiektu. Musi mie nazw zgodn z nazw klasy. Konstruktor nigdy nie zwraca»adnego wyniku, ale nie wyst puje przed nim sªowo void. Konstruktor mo»e by bezargumentowy, jak te» mo»e przyjmowa argumenty, które zostan wykorzystane, bezpo±rednio lub po±rednio, np. do zainicjalizowania pól obiektu. Ka»da klasa mo»e mie kilka konstruktorów, ró»ni cych si przyjmowanymi argumentami - przeci»anie konstruktora. Je±li w klasie wyst puje tylko jeden konstruktor i przyjmuje on argumenty, to przy tworzeniu obiektu nale»y je poda. L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 23 / 37

Konstruktory klasy Je±li nie zdeniuje si»adnego wªasnego konstruktora inicjuj cego, to kompilator automatycznie stworzy wªasny domy±lny (czyli bez parametrów) konstruktor inicjuj cy. Konstruktor domy±lny stworzony przez kompilator nie przypisuje warto±ci pocz tkowych skªadowym klasy. Konstruktor domy±lny to konstruktor, który mo»e zosta wywoªany bez podawania argumentów. Zdeniowanie cho jednego wªasnego konstruktora spowoduje,»e kompilator przyjmie,»e klasa ma wªasne konstruktory i nie utworzy swojego konstruktora domy±lnego. Je±li potrzebny jest konstruktor bez parametrów, trzeba go samemu utworzy. W ciele konstruktora (tak jak w ka»dej innej metodzie) mo»na wywoªywa inne metody. Podobnie jak w funkcjach i metodach, tak»e w konstruktorach mo»na zadeklarowa warto±ci domy±lne argumentów. L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 24 / 37

Przykªad 5 - Baton.h #ifndef BATON_H #define BATON_H #include <string> using namespace std; class Baton { public: //metody Baton(const string& nazwabatonu); void setnazwa(const string& nazwabatonu); void setilosc(int iloscbatonu); void setcena(float cenabatonu); void wypisz(); private://pola string nazwa; int ilosc = 0; float cena = 0; }; #endif L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 25 / 37

Przykªad 5 - Baton.cpp #include <iostream> #include "Baton.h" Baton::Baton(const string& nazwabatonu) { nazwa = nazwabatonu; }... L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 26 / 37

Przykªad 5 - main.cpp #include <iostream> #include <string> #include "Baton.h" using namespace std; int main() { Baton baton1("mars"); baton1.setilosc(14); baton1.setcena(3.15); baton1.wypisz(); Baton baton2 = Baton("Mars1"); baton2.setilosc(4); baton2.setcena(2.15); baton2.wypisz(); Baton* baton3 = new Baton("Mars2"); baton3->wypisz(); } L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 27 / 37

this Wywoªana funkcja skªadowa klasy (metoda) otrzymuje niejawnie adres obiektu, na rzecz którego zostaªa wywoªana. Adres ten jest przechowywany w zmiennej wska¹nikowej o nazwie this. (Który obiekt? Ten (this) obiekt.) Odwoªanie do pól i metod obiektu do którego this si odwoªuje, odbywa si za pomoc operatora wyboru skªadowej oznaczanego symbolem '->'. Umo»liwia to m.in. stosowanie w metodach i konstruktorach argumentów o nazwach identycznych z nazwami pól klasy. L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 28 / 37

Przykªad 5 - Baton.h #ifndef BATON_H #define BATON_H #include <string> using namespace std; class Baton { public: //metody Baton(const string& nazwa=""); Baton(const string& nazwa, int ilosc, float cena);... private://pola string nazwa; int ilosc = 0; float cena = 0; }; #endif L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 29 / 37

Przykªad 5 - Baton.cpp #include <iostream> #include "Baton.h" Baton::Baton(const string& nazwa) { this->nazwa = nazwa; } Baton::Baton(const string& nazwa, int ilosc, float cena) { this->nazwa = nazwa; this->ilosc = ilosc; this->cena = cena; }... L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 30 / 37

Metody staªe Metody, które nie zmieniaj warto±ci pól obiektu mog, a wr cz powinny by deklarowane jako const. class Baton { public: //metody... void wypisz() const;... }; void Baton::wypisz() const { cout << nazwa << ", " << ilosc << " szt., "; cout << cena << "zl" << endl; } L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 31 / 37

Zalecanym sposobem inicjalizacji pól obiektu jest zastosowanie listy inicjalizacyjnej. Lista inicjalizacyjna zaczyna si dwukropkiem umieszczonym za nawiasami zawieraj cymi argumenty. Po dwukropku wyst puje lista argumentów oddzielonych przecinkami, a po ka»dym argumencie podaje si w nawiasach warto±ci pocz tkowe argumentów. class Baton { public:... Baton(const string& nazwa, int ilosc = 0, float cena = 0.0);... }; Baton::Baton(const string& nazwa, int ilosc, float cena) :nazwa(nazwa),ilosc(ilosc),cena(cena){} L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 32 / 37

Destruktory klas Destruktor jest to specjalna metoda automatycznie wywoªywana podczas usuwania obiektu danej klasy, co ma miejsce, gdy: ko«czy si zasi g deklaracji obiektu, usuwany jest obiekt tymczasowy (patrz wykªad 3), do wska¹nika obiektu zastosowano operator delete. Celem destruktora jest zako«czenie istnienia obiektu danej klasy w sposób przewidywalny i uporz dkowany. Je±li nie zdeniuje si wªasnego destruktora, to kompilator automatycznie stworzy wªasny domy±lny destruktor. Destruktor deniowany przez u»ytkownika ma tak sam nazw jak klasa poprzedzon znakiem tyldy ( ), jest funkcj bez okre±lonego typu wyniku. Do destruktora nie przekazujemy»adnych argumentów. W klasie mo»na zdeniowa tylko jeden destruktor. L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 33 / 37

Przykªad 6 - Destruktor class Baton { public: Baton(const string& nazwa, int ilosc = 0, float cena = 0.0); ~Baton();... }; Baton::~Baton() { } cout << "Destruktor" << endl; L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 34 / 37

Skªadowe statyczne Zwykªe pola danych zawieraj warto±ci charakterystyczne dla danego obiektu i s tworzone jedno na obiekt. Chc c odwoªa si do zwykªego pola danych, trzeba wskaza obiekt, do którego ono nale»y. Statyczne pole danych klasy to takie pole danych, które istnieje niezale»nie od liczby utworzonych obiektów tej klasy, jest tworzone jedno na klas. Mo»e by zatem wykorzystywane do wspóªdzielenia informacji mi dzy wszystkimi obiektami klasy. Deklaracja statycznego pola danych ma posta : class Baton { };... static int ilenas;... L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 35 / 37

Statyczne skªadowe Inicjalizacja statycznego pola danych jest umieszczana poza klas : int Baton::ileNas=0; Do statycznego pola danych mo»na odwoªywa si bezpo±rednio, wskazuj c tylko klas : cout << Baton::ileNas; Metoda, która korzysta tylko ze skªadowych statycznych (czyli nie zale»y od»adnego obiektu) mo»e by zadeklarowana jako funkcja statyczna. Funkcja statyczna charakteryzuje si nast puj cymi wªa±ciwo±ciami: nie jest zwi zana z obiektem, nie ma zatem wska¹nika this, mo»e by wywoªywana samodzielnie, bez odwoªania si do obiektu. L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 36 / 37

Przykªad 7 class Baton { public: Baton(const string& nazwa):nazwa(nazwa){++ilenas;} ~Baton(){--ileNas;}... static int PokazIleNas();... private:... static int ilenas; }; int Baton::ileNas = 0; int Baton::PokazIleNas(){return ilenas;} L. St pie«(ajd) Programowanie obiektowe w C++Wykªad 1 37 / 37