1 / 12

Prasek Aneta, Skiba Katarzyna

7 . Definiowanie konwersji obiektów. Zaprzyjaźnione funkcje i klasy. Funkcje składowe const. Interfejs a implementacja. Implementacja inline. Przesłanianie funkcji. Prasek Aneta, Skiba Katarzyna. Funkcja stała const.

Download Presentation

Prasek Aneta, Skiba Katarzyna

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 7. Definiowanie konwersji obiektów. Zaprzyjaźnione funkcje i klasy. Funkcje składowe const. Interfejs a implementacja. Implementacja inline. Przesłanianie funkcji. Prasek Aneta, Skiba Katarzyna

  2. Funkcja stała const • Funkcje stałe const to takie funkcje, które nie mogą modyfikować stanu obiektu. Oznacza to, że funkcja stała nie może zmieniać wartość swoich różnych atrybutów. Funkcja stała jest zdefiniowana przez słowo kluczowe const, które jest wstawione po deklaracji i definicji funkcji. • Funkcja stała może wywoływać tylko funkcje stałe. • Słowo kluczowe const umieszczone po nazwie funkcji nie ma nic wspólnego z const umieszczonym przed nazwą. Pierwsze zastosowanie modyfikuje deklarację wskaźnika this dla funkcji składowej, drugie dotyczy wartości zwracanej przez funkcję.

  3. Zaprzyjaźnione funkcje i klasy

  4. Definiowanie zaprzyjaźnionych funkcji • Zaprzyjaźnione z klasą mogą być funkcje, klasy i metody klas. • Funkcja zaprzyjaźniona nie jest metodą klasy, ale ma dostęp do wszystkich składowych klasy. Tworząc funkcję zaprzyjaźnioną musimy • * umieścić jej prototyp w deklaracji klasy, • * zdefiniować funkcję.

  5. Definiowanie zaprzyjaźnionych klas • Definicja klas zaprzyjaźnionych ma postać class X { public: friend class Y; // klasa Y posiada dostęp do prywatnych danych X //tu metody klasy X private: //tu pola klasy X }; class Y { //tu pola i metody klasy Y };

  6. Definiowanie zaprzyjaźnionych klas • Klasa Y jest zaprzyjaźniona z klasą X, posiada dostęp do jej prywatnych danych. Metody klasy Y mogą korzystać z interfejsu klasy X, nie muszą być zaprzyjaźnione z tą klasą. • Zamiast definiować klasy zaprzyjaźnione, można zdefiniować zaprzyjaźnione funkcje składowe. Wtedy deklaracja klas musi przebiegać w następującej kolejności :

  7. Definiowanie zaprzyjaźnionych klas • class X; • class Y • { • //tu deklacja pól i metod klasy Y, • //metody używające klasy X - tylko prototypy • }; • class X • { • //tu deklacja pól i metod klasy X • //i funkcje zaprzyjaźnione z klasą Y • //o prototypach podobnych do • friend typ_wyniku Y::nazwa_funkcji(argumenty); • }; • //tu definicje metod klasy Y

  8. Stosowanie funkcji zaprzyjaźnionych • Typowym zastosowaniem funkcji zaprzyjaźnionej jest przeciążanie operatora <<. Przeciążenie operatora << umożliwi wyświetlanie obiektów za pomocą instrukcji • cout << obiekt; • Prototyp funkcji zaprzyjaźnionej, przeciążającej operator << powinien mieć postać: • friend ostream & operator<<(ostream & , const Nazwa_klasy &); • natomiast definicja • ostream & operator<<(ostream & os, const Nazwa_klasy obiekt) • { • os << ...; // tu wstawić wyświetlanie wartości pól obiektu • return os; • }

  9. Interfejs a implementacja • W programowaniu obiektowym interfejs jest abstrakcyjną reprezentacją klasy. Interfejs umożliwia korzystanie z danej klasy, niezależnie od faktycznej implementacji. Interfejs pozwala na hermetyzację obiektów, utworzonych w oparciu o klasy zawierające definicję (implementację) wspólnego interfejsu. Tak rozumiany interfejs, w ramach programowania obiektowego, określany jest też mianem interfejs klasy. • Implementacja- informatyczny proces przekształcania abstrakcyjnego opisu systemu lub programu na obiekt fizyczny: komputer lub działający program zapisany w konkretnym języku programowania; także obiekt fizyczny będący efektem takiego przekształcenia, np. implementacja systemu operacyjnego lub kompilatora dla konkretnego typu komputera.

  10. Funkcje otwarte (inline) • Najbardziej efektywne dla małych i średnich • funkcji • Rozwijane w miejscu wywołania • Brak narzutu na wywołanie funkcji • Kompilator generuje odpowiedni kod i odwzorowuje • parametry • Oprócz tego generowana kopia implementacji funkcji • (na wypadek, gdyby programista chciał pobrać jej • adres) • Dwie metody specyfikacji funkcji otwartej: • Podanie implementacji w deklaracji klasy • Użycie słowa kluczowego inline w definicji funkcji

  11. Funkcje otwarte (inline) • Funkcje otwarte muszą być zdefiniowane w plikach • nagłówkowych aby umożliwić kompilatorowi generację kopii • funkcji w momencie ich użycia • Metody zdefiniowane wewnątrz deklaracji klasy są niejawnie • deklarowane jako otwarte • Kompromis między wydajnością a ukrywaniem informacji • Odwołanie się do pól zdefiniowanych poniżej ich definicji jest • poprawne

  12. Wady i zalety funkcji otwartych • brak oddzielenia interfejsu od implementacji • brak ukrywania informacji • Kod używający funkcji otwartych musi być • ponownie skompilowany, gdy: • treść metody ulegnie zmianie • zostanie ona zastąpiona zwykłą metodą i odwrotnie • inline to żądanie, nie polecenie • można rozwinąć ręcznie, ale to kosztowne • Rozmiar pliku wykonywalnego może ulec • powiększeniu • zwykle nie jest to problemem

More Related