Funkcje składowe (metody)



Podobne dokumenty
Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Wykład 4 Wybrane zagadnienia programowania w C++

Języki i paradygmaty programowania

Programowanie obiektowe w C++ Wykład 11

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

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


0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

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

Kompozycja i dziedziczenie klas

Ćwiczenia IV - Kontenery (pojemniki)

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

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

Wartości domyślne, szablony funkcji i klas

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

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

Programowanie Obiektowew języku C++ Zadania L4

Przykład implementacji przeciażeń operatorów problem kolizji

API transakcyjne BitMarket.pl

Praca na wielu bazach danych część 2. (Wersja 8.1)

Podstawy programowania obiektowego

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

Architektura Systemów Komputerowych. Sterowanie programem skoki Przerwania

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.

Wtedy wystarczy wybrać właściwego Taga z listy.

Pola i metody statyczne

InsERT GT Własne COM 1.0

Programowanie Obiektowew języku C++ Zadania L4

Podstawy algorytmiki i programowania - wykład 5 C-struktury cd.

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Rozdział I Postanowienia Ogólne

Regulamin rekrutacji do Gimnazjum w Chwaliszewie na rok szkolny 2016/2017

architektura komputerów w. 6 Pamięć I

Uchwała nr 21 /2015 Walnego Zebrania Członków z dnia w sprawie przyjęcia Regulaminu Pracy Zarządu.

Plan działania na rok

Spis treści. Rozdział 1 ewyniki. mmedica - INSTR UKC JA UŻYTKO W NIKA

Qt po polsku. Bogdan Kreczmer.

Badania (PN-EN A1:2010) i opinia techniczna drzwi zewnętrznych z kształtowników aluminiowych z przekładką termiczną systemu BLYWEERT TRITON

PL/SQL. Zaawansowane tematy PL/SQL

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

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

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

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

Regulamin Rady Rodziców. przy Gimnazjum w Jasienicy. Postanowienia ogólne

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

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

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Wprowadzam : REGULAMIN REKRUTACJI DZIECI DO PRZEDSZKOLA NR 14

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Wykład 8 Ochrona danych wprowadzenie Sterowanie dostępem do danych Sterowanie przepływem danych Ograniczanie możliwości wnioskowania Szyfrowanie

Logowanie do mobilnego systemu CUI i autoryzacja kodami SMS

Podatek przemysłowy (lokalny podatek od działalności usługowowytwórczej) :02:07

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

Wskazówki dotyczące przygotowania danych do wydruku suplementu

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.

- 70% wg starych zasad i 30% wg nowych zasad dla osób, które. - 55% wg starych zasad i 45% wg nowych zasad dla osób, które

Algorytmy i Struktury Danych.

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

STEROWNIKI NANO-PLC NA PRZYKŁADZIE STEROWNIKA LOGO!

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

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

REGULAMIN ZARZĄDU Stowarzyszenia Dolina Karpia

Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.

Moduł Pulpit opcji oraz Narzędzia. Opis v 1.0

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

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

KSIĘGA ZNAKU TOTORU S.C.

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

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

Rewitalizacja w RPO WK-P

UMOWA O REALIZACJĘ I FINANSOWANIE PROJEKTU BADAWCZEGO

Programowanie i struktury danych

Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy)

Instrukcja zarządzania systemem informatycznym służącym do przetwarzania danych osobowych

Prezentacja Systemu PDR

TWORZENIE I NADZOROWANIE DOKUMENTÓW SYSTEMOWYCH (PROCEDUR, KSIĘGI JAKOŚCI I KART USŁUG) SJ Data:

REGULAMIN RADY RODZICÓW DZIAŁAJĄCEJ PRZY SZKOLE PODSTAWOWEJ NR 29 IM. GIUSEPPE GARIBALDIEGO W WARSZAWIE

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

Plik klasy. h deklaracje klas

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

Ogłoszenie o naborze w celu zastępstwa nieobecnego członka korpusu służby cywilnej

JĘZYK UML JAKO NARZĘDZIE MODELOWANIA PROCESU PROJEKTOWO-KONSTRUKCYJNEGO

PFR Wstępnie wypełnione zeznanie podatkowe. PIT-37 i PIT-38 za rok 2015

Implant ślimakowy wszczepiany jest w ślimak ucha wewnętrznego (przeczytaj artykuł Budowa ucha

Regulamin Zarządu Pogórzańskiego Stowarzyszenia Rozwoju

Pierwsze kroki. Krok 1. Uzupełnienie danych własnej firmy

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

INSTRUKCJA WebPTB 1.0

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

Warszawa, dnia 1 października 2013 r. Poz. 783 UCHWAŁA ZARZĄDU NARODOWEGO BANKU POLSKIEGO. z dnia 24 września 2013 r.

Bazy danych. Andrzej Łachwa, UJ, /15

SFML. (Simple and Fast Multimedia Library)

REKRUTACJA DO PROWADZONYCH PRZEZ GMINĘ STARACHOWICE PRZEDSZKOLI I ODDZIAŁÓW PRZEDSZKOLNYCH W SZKOŁACH PODSTAWOWYCH NA ROK SZKOLNY 2016/2017

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

REGULAMIN STUDENCKIEJ TELEWIZJI INTERNETOWEJ UNIWEREK.TV. Rozdział I Przepisy ogólne. Rozdział II Struktura i organy Telewizji

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

Projektowanie klas c.d. Projektowanie klas przykład

Tematyka i rozwiązania metodyczne kolejnych zajęć lekcyjnych wraz z ćwiczeniami.

Programowanie Obiektowe i C++

Transkrypt:

Funkcje składowe (metody) class Punkt int x, y; void Rysuj() /* rysowanie */ ; class Punkt int x, y; void Rysuj(); ; void Punkt::Rysuj() /* rysowanie */ definicja funkcji wewnątrz ciała klasy funkcja otwarta definicja funkcji poza ciałem klasy

Wywołanie funkcji składowej Funkcja składowa klasy może być aktywowana (wywołana) tylko na rzecz obiektu tej samej klasy. <nazwa obiektu>.<nazwa_funkcji> (<argumenty>) ; PRZYKŁAD: Punkt p; p.rysuj();

Funkcja składowa class Zesp Zesp(); Zesp(float a, float b); ; float re, im; Zesp::Zesp() re = im = 0; Zesp::Zesp(float a, float b) re = a; im = b; Problem: klasę Zesp należy uzupełnić o operację dodawania dwóch liczb zespolonych.

Funkcja składowa class Zesp Zesp(); Zesp(float a, float b); Zesp dodaj(zesp z); ; float re, im; Zesp::Zesp() re = im = 0; Zesp::Zesp(float a, float b) re = a; im = b; Zesp Zesp::dodaj(Zesp z) Zesp wynik; wynik.re = re+z.re; wynik.im = im+z.im; void main() return wynik; Zesp a(0, 1), b(1, 0), c; c = a.dodaj(b); return Zesp(re+z.re, im+z.im);

Przykład wersja strukturalna #include <iostream> using namespace std; // definicja struktury typedef struct zespolone float re, im; // pola struktury Zespolone; // dodawanie liczb zespolonych Zespolone dodaj (Zespolone a, Zespolone b) Zespolone c; c.re = a.re + b.re; c.im = a.im + b.im; return c; void main() Zespolone a = 0, 1, b = 1, 0, c; c = dodaj(a, b); cout << "c = "<< c.re << " + j" << c.im << endl;

Przykład wersja obiektowa #include <iostream> using namespace std; class Zesp Zesp() re = 0; im = 0; Zesp (float Re, float Im) re = Re; im = Im; ; Zesp dodaj (Zesp z) return Zesp(re+z.re, im+z.im); void drukuj() cout << re << + j << im; float re, im; // pola klasy void main() Zesp a(0, 1), b(1, 0), c; c = a.dodaj(b); c.drukuj();

Wskaźnik this Wskaźnik this zawiera adres obiektu bieżącego (tzn. obiektu, na rzecz którego wywołano funkcję składową). Wskaźnik ten jest dostępny wyłącznie wewnątrz funkcji składowych niestatycznych. this - adres obiektu *this - obiekt (wartość obiektu) Słowo kluczowe this jest stosowane wszędzie tam, gdzie w funkcji składowej istnieje potrzeba zwrócenia wskaźnika na obiekt lub wartości obiektu. return this return *this - adres obiektu - obiekt

Funkcja składowa i wskaźnik this class Zesp Zesp(); Zesp(float a, float b); ; float re, im; Zesp::Zesp() re = im = 0; Zesp::Zesp(float a, float b) re = a; im = b; Problem: klasę Zesp należy uzupełnić o operację powiększania liczby zespolonej o inną liczbę zespoloną.

Zastosowanie wskaźnika this Zesp Zesp::powieksz(Zesp z) re += z.re; // this->re += z.re; im += z.im; // (*this).im += z.im; return *this; zwrócenie zmodyfikowanego obiektu void main() Zesp z1(2, 3), z2(3, 5); z1.powieksz(z2);

Funkcje zaprzyjaźnione Funkcja zaprzyjaźniona z klasą to zwykła funkcja zewnętrzna lub funkcja składowa innej klasy, zadeklarowana za pomocą słowa kluczowego friend. Cechy funkcji zaprzyjaźnionej: nie należy do klasy, nie jest składową klasy (wniosek: nie można odwołać się do niej poprzez nazwę kwalifikowaną) nie można jej aktywować na rzecz obiektu otrzymuje jako argument lub zwraca jako wynik obiekt klasy z którą jest zaprzyjaźniona pod względem dostępu do składowych prywatnych ma takie same prawa jak funkcja składowa funkcja może być zaprzyjaźniona z wieloma klasami (obiekty tych klas to argumenty lub wynik funkcji)

Funkcja składowa czy zaprzyjaźniona? class Zesp Zesp(); Zesp(float a, float b); ; float re, im; Zesp::Zesp() re = im = 0; Zesp::Zesp(float a, float b) re = a; im = b; Problem: klasę Zesp należy uzupełnić o operację wydruku liczby zespolonej.

ROZWIĄZANIE 1: class Zesp Zesp(); Zesp(float a, float b); float get_re(); float get_im(); ; float re, im; Funkcja składowa funkcje udostępniające Zesp::Zesp() re = im = 0; Zesp::Zesp(float a, float b) re = a; im = b; float Zesp::get_re() return re; float Zesp::get_im() void main() return im; Zesp z(2, 5); cout << ( << z.get_re() <<, << z.get_im() << ) ;

ROZWIĄZANIE 2: Funkcja składowa class Zesp Zesp(); Zesp(float a, float b); void drukuj(); ; float re, im; void main() Zesp z(2, 5); z.drukuj(); Zesp::Zesp() re = im = 0; Zesp::Zesp(float a, float b) re = a; im = b; void Zesp::drukuj() cout << ( << re <<, ; cout << im << ) ;

ROZWIĄZANIE 3: Funkcja zaprzyjaźniona class Zesp Zesp(); Zesp(float a, float b); friend void drukuj(zesp z); float re, im; ; void main() Zesp z(2, 5); drukuj(z); Zesp::Zesp() re = im = 0; Zesp::Zesp(float a, float b) re = a; im = b; void drukuj(zesp z) cout << ( << z.re <<, ; cout << z.im << ) ;

ROZWIĄZANIE 4: Funkcja zaprzyjaźniona class Zesp Zesp(); Zesp(float a, float b); friend void drukuj1(zesp z); friend void drukuj2(zesp &z); friend void drukuj3(zesp *z); float re, im; ; void main() Zesp z(2, 5); drukuj1(z); drukuj2(z); drukuj3(&z); void drukuj1(zesp z) cout << ( << z.re <<, ; cout << z.im << ) ; void drukuj2(zesp &z) cout << ( << z.re <<, ; cout << z.im << ) ; void drukuj3(zesp *z) cout << ( << z->re; cout <<, << z->im << ) ;

Funkcja składowa a zaprzyjaźniona Zesp Zesp::dodaj(Zesp z) Zesp wynik; Funkcja składowa klasy wynik.re = re + z.re; wynik.im = im + z.im; return wynik; return Zesp(re + z.re, im + z.im); Zesp odejmij(zesp z1, Zesp z2) Zesp wynik; wynik.re = z1.re z2.re; wynik.im = z1.im - z2.im; return wynik; Funkcja zaprzyjaźniona z klasą return Zesp(z1.re - z2.re, z1.im - z2.im);

Porównanie Funkcja składowa klasy Funkcja zaprzyjaźniona z klasą deklaracja Zesp dodaj(zesp z); friend Zesp odejmij(zesp z1, Zesp z2); definicja Zesp Zesp::dodaj(Zesp z) Zesp wynik; wynik.re = re+z.re; wynik.im = im+z.im; return wynik; Zesp odejmij(zesp z1, Zesp z2) Zesp wynik; wynik.re = z1.re - z2.re; wynik.im = z1.im z2.im; return wynik; wywołanie (aktywacja) Zesp z1, z2, z3; z3 = z1.dodaj(z2); Zesp z1, z2, z3; z3 = odejmij(z1, z2);

Składowe statyczne Deklarowane są za pomocą słowa kluczowego static. Składowe statyczne: pola statyczne funkcje statyczne Pole statyczne klasy: jest wspólne dla wszystkich obiektów tej klasy jest widoczne we wszystkich obiektach tej klasy, ale w pamięci istnieje tylko jeden egzemplarz tego pola istnieje niezależnie od tworzonych obiektów ( zmienna globalna dla klasy) istnieje i można się do niego odwoływać nawet jeśli nie utworzono jeszcze żadnego obiektu klasy Dostęp do pól statycznych: taki jak do zwykłych pól składowych dodatkowo: poza klasą, podczas inicjalizacji pola dodatkowo: za pomocą funkcji statycznych

Inicjalizacja pól statycznych pola statyczne inicjalizuje się poza klasą używając pełnej nazwy kwalifikowanej pola statyczne nie mogą być inicjalizowane przez konstruktor (są wspólne dla wszystkich obiektów klasy, a nie dotyczą konkretnego obiektu - egzemplarza, instancji klasy) prywatne pole statyczne poza klasą można tylko zainicjalizować (poza klasą nie ma do niego bezpośredniego dostępu poprzez jego nazwę) publiczne pole statyczne poza klasą jest dostępne poprzez pełną nazwę kwalifikowaną

Funkcje statyczne funkcje statyczne służą do wykonywania operacji na polach statycznych wewnątrz funkcji statycznej widoczne są tylko pola statyczne - nie są widoczne zwykłe, niestatyczne pola składowe - nie są widoczne niestatyczne funkcje składowe

Składowe statyczne class Zesp Zesp(); Zesp(float a, float b); ~Zesp(); static int Ile(); float re, im; static int licznik; ; void main() cout << Zesp::Ile(); Zesp z1, z2(2, 3); cout << Zesp::Ile(); int Zesp::licznik = 0; Zesp::Zesp() re = im = 0; licznik++; Zesp::Zesp(float a, float b) re = a; im = b; licznik++; Zesp::~Zesp() licznik--; int Zesp::Ile() return licznik;