=1=Podejscie obiektowe, przeciazenia operatorów, referencje
Transkrypt
=1=Podejscie obiektowe, przeciazenia operatorów, referencje
Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Podejście obiektowe, przeciążenia operatorów, referencje Bogdan Kreczmer [email protected] Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Programowanie obiektowe c Copyright2016 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową. Programowanie obiektowe Podejście obiektowe, przeciążenia operatorów, referencje Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Niniejsza prezentacja została wykonana przy użyciu systemu składu LATEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer: http://latex-beamer.sourceforge.net Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Spis treści 1 Podejście obiektowe Rozumienie świata Pojęcie Obiekty 2 Konwencje nazw plików Standardowe pliki nagłówkowe w C++ 3 Przeciążenia funkcji, metod i operatorów Przeciążenie (przeładowanie) funkcji 4 Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Spis treści 1 Podejście obiektowe Rozumienie świata Pojęcie Obiekty 2 Konwencje nazw plików Standardowe pliki nagłówkowe w C++ 3 Przeciążenia funkcji, metod i operatorów Przeciążenie (przeładowanie) funkcji 4 Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Programowanie obiektowe Podejście obiektowe, przeciążenia operatorów, referencje Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Podejście obiektowe Programowanie obiektowe oparte jest na podejściu obiektowym do analizy problemu oraz syntezy i implementacji jego rozwiązania. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Podejście obiektowe Programowanie obiektowe oparte jest na podejściu obiektowym do analizy problemu oraz syntezy i implementacji jego rozwiązania. Podejście obiektowe bazuje na fundamentalnej cesze aktywności intelektualnej, która pozwala ludziom (i nie tylko) wyróżniać odrębne obiekty w swoim otoczeniu, przypisywać im własności oraz określać sposób ich interakcji między sobą i otoczeniem. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Podejście obiektowe Programowanie obiektowe oparte jest na podejściu obiektowym do analizy problemu oraz syntezy i implementacji jego rozwiązania. Podejście obiektowe bazuje na fundamentalnej cesze aktywności intelektualnej, która pozwala ludziom (i nie tylko) wyróżniać odrębne obiekty w swoim otoczeniu, przypisywać im własności oraz określać sposób ich interakcji między sobą i otoczeniem. Wyróżnianie obiektów może być dokonywane na różne sposoby. Oparte jest ono na obserwacji i wcześniejszej wiedzy. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Podejście obiektowe Programowanie obiektowe oparte jest na podejściu obiektowym do analizy problemu oraz syntezy i implementacji jego rozwiązania. Podejście obiektowe bazuje na fundamentalnej cesze aktywności intelektualnej, która pozwala ludziom (i nie tylko) wyróżniać odrębne obiekty w swoim otoczeniu, przypisywać im własności oraz określać sposób ich interakcji między sobą i otoczeniem. Wyróżnianie obiektów może być dokonywane na różne sposoby. Oparte jest ono na obserwacji i wcześniejszej wiedzy. Obiektowi lub obiektom jesteśmy w stanie przypisać pojęcia. Proces ten nazywa się postrzeganiem. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Postrzeganie Programowanie obiektowe Rozumienie świata Pojęcie Obiekty Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Postrzeganie Programowanie obiektowe Rozumienie świata Pojęcie Obiekty Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Postrzeganie Obserwując otoczenie jesteśmy w stanie wyodrębnić przedmioty . . . Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Postrzeganie Obserwując otoczenie jesteśmy w stanie wyodrębnić przedmioty . . . Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Postrzeganie Obserwując otoczenie jesteśmy w stanie wyodrębnić przedmioty i przypisać im pojęcia. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Postrzeganie Wyodrębnieniu może podlegać zestaw elementów, jako osobna całość. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Postrzeganie Pojęcie odnosi się wówczas do zbioru elementów między którymi zachodzą odpowiednie relacje. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Postrzeganie Każdemu z elementów może być osobno wyróżniony poprzez przypisanie mu indywidualnego pojęcia. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Postrzeganie Znajdując cechy wspólne wszystkich elementów możemy również przyporządkować pojęcie ich zbiorowi. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Spis treści 1 Podejście obiektowe Rozumienie świata Pojęcie Obiekty 2 Konwencje nazw plików Standardowe pliki nagłówkowe w C++ 3 Przeciążenia funkcji, metod i operatorów Przeciążenie (przeładowanie) funkcji 4 Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Programowanie obiektowe Podejście obiektowe, przeciążenia operatorów, referencje Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Czym jest pojęcie Istotnym elementem aktu wyróżnienia jakiegoś tworu lub wyobrażenia abstrakcyjnego jest przypisanie mu pewnego pojęcia. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Czym jest pojęcie Istotnym elementem aktu wyróżnienia jakiegoś tworu lub wyobrażenia abstrakcyjnego jest przypisanie mu pewnego pojęcia. Pojęcie jest wyobrażeniem lub oznaczeniem, które stosujemy do rzeczy lub wyobrażeń abstrakcyjnych. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Czym jest pojęcie Istotnym elementem aktu wyróżnienia jakiegoś tworu lub wyobrażenia abstrakcyjnego jest przypisanie mu pewnego pojęcia. Pojęcie jest wyobrażeniem lub oznaczeniem, które stosujemy do rzeczy lub wyobrażeń abstrakcyjnych. Przypisywanie pojęć jest możliwe dzięki rozpoznaniu własności wspólnych dla reprezentantów zbiorów, do których stosuje się dane pojęcie. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Czym jest pojęcie Przyswojenie sobie zbioru pojęć pozwala nadawać znaczenie obiektom znajdującym się w naszym otoczeniu. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Czym jest pojęcie Przyswojenie sobie zbioru pojęć pozwala nadawać znaczenie obiektom znajdującym się w naszym otoczeniu. Przykłady pojęć: materialne niematerialne relacyjne Programowanie obiektowe zdarzenia inne Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Czym jest pojęcie Przyswojenie sobie zbioru pojęć pozwala nadawać znaczenie obiektom znajdującym się w naszym otoczeniu. Przykłady pojęć: materialne niematerialne relacyjne pojazd budynek atom Programowanie obiektowe zdarzenia inne Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Czym jest pojęcie Przyswojenie sobie zbioru pojęć pozwala nadawać znaczenie obiektom znajdującym się w naszym otoczeniu. Przykłady pojęć: materialne niematerialne relacyjne pojazd budynek atom czas poprawność firma Programowanie obiektowe zdarzenia inne Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Czym jest pojęcie Przyswojenie sobie zbioru pojęć pozwala nadawać znaczenie obiektom znajdującym się w naszym otoczeniu. Przykłady pojęć: materialne niematerialne relacyjne pojazd budynek atom czas poprawność firma posiadanie przynależność małżeństwo Programowanie obiektowe zdarzenia inne Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Czym jest pojęcie Przyswojenie sobie zbioru pojęć pozwala nadawać znaczenie obiektom znajdującym się w naszym otoczeniu. Przykłady pojęć: materialne niematerialne relacyjne pojazd budynek atom czas poprawność firma zdarzenia posiadanie spotkanie przynależność zakup małżeństwo wyjazd Programowanie obiektowe inne Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Czym jest pojęcie Przyswojenie sobie zbioru pojęć pozwala nadawać znaczenie obiektom znajdującym się w naszym otoczeniu. Przykłady pojęć: materialne niematerialne relacyjne pojazd budynek atom czas poprawność firma zdarzenia posiadanie spotkanie przynależność zakup małżeństwo wyjazd Programowanie obiektowe inne wzorowy nietypowy ikona Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Czym jest pojęcie Termin pojęcie zawiera: intensję – treść pojęcia ekstensję – zakres pojęcia Programowanie obiektowe Rozumienie świata Pojęcie Obiekty Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Czym jest pojęcie Termin pojęcie zawiera: intensję – treść pojęcia ekstensję – zakres pojęcia Programowanie obiektowe Rozumienie świata Pojęcie Obiekty Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Czym jest pojęcie Termin pojęcie zawiera: intensję – treść pojęcia ekstensję – zakres pojęcia Programowanie obiektowe Rozumienie świata Pojęcie Obiekty Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Czym jest pojęcie Termin pojęcie zawiera: intensję – treść pojęcia ekstensję – zakres pojęcia Intensja jest pełną definicją pojęcia i testu określającego, czy dane pojęcie odnosi się do danej rzeczy lub wyobrażenia abstrakcyjnego. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Czym jest pojęcie Termin pojęcie zawiera: intensję – treść pojęcia ekstensję – zakres pojęcia Intensja jest pełną definicją pojęcia i testu określającego, czy dane pojęcie odnosi się do danej rzeczy lub wyobrażenia abstrakcyjnego. Ekstensja jest zbiorem wszystkich rzeczy i wyobrażeń abstrakcyjnych, do których stosuje się dane pojęcie. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Czym jest pojęcie Termin pojęcie zawiera: intensję – treść pojęcia ekstensję – zakres pojęcia Intensja jest pełną definicją pojęcia i testu określającego, czy dane pojęcie odnosi się do danej rzeczy lub wyobrażenia abstrakcyjnego. Ekstensja jest zbiorem wszystkich rzeczy i wyobrażeń abstrakcyjnych, do których stosuje się dane pojęcie. Trójka pojęciowa = (nazwa, intensja, ekstensja) Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Robot przemysłowy Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Robot przemysłowy nazwa intensja ekstensja Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Robot przemysłowy nazwa Robot przemysłowy intensja ekstensja Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Robot przemysłowy nazwa Robot przemysłowy intensja ekstensja Maszyna manipulacyjna sterowana automatycznie za pomocą sygnałów generowanych w programowalnym układzie sterowania. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Robot przemysłowy nazwa Robot przemysłowy intensja ekstensja Maszyna manipulacyjna sterowana automatycznie za pomocą sygnałów generowanych w programowalnym układzie sterowania. iRb-6, IRB1400, Puma 560, . . . Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Robot przemysłowy nazwa Robot przemysłowy intensja ekstensja Maszyna manipulacyjna sterowana automatycznie za pomocą sygnałów generowanych w programowalnym układzie sterowania. iRb-6, IRB1400, Puma 560, . . . Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) nazwa intensja ekstensja Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Idealny człowiek nazwa intensja ekstensja Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Idealny człowiek nazwa Idealny człowiek intensja ekstensja Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Idealny człowiek nazwa Idealny człowiek intensja ekstensja Uczciwy, rzetelny, . . . Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Idealny człowiek nazwa Idealny człowiek intensja ekstensja Uczciwy, rzetelny, . . . Programowanie obiektowe × Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Idealny człowiek nazwa Idealny człowiek intensja ekstensja Uczciwy, rzetelny, . . . Niektóre pojęcia mogą nie mieć swoich reprezentantów. Programowanie obiektowe × Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) nazwa intensja ekstensja Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) 40S25 nazwa intensja ekstensja Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) 40S25 nazwa 40S25 intensja ekstensja Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) 40S25 nazwa 40S25 intensja ekstensja × Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) 40S25 nazwa 40S25 intensja ekstensja × Programowanie obiektowe 40S25, 40S25, . . . Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) 40S25 nazwa 40S25 intensja ekstensja × 40S25, 40S25, . . . Pojęcie może nie mieć swojej definicji. Przykład układu scalonego, którego dokumentacja i opis zostały zagubione. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) nazwa intensja ekstensja Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Klient nazwa intensja ekstensja Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Klient nazwa Klient intensja ekstensja Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Klient nazwa Klient intensja ekstensja Osoba lub organizacja kupująca dobra lub usługi. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Klient nazwa Klient intensja ekstensja Osoba lub organizacja kupująca dobra lub usługi. Jan Kowalski, Firma Jana Kowalskiego Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Klient nazwa Klient intensja ekstensja Osoba lub organizacja kupująca dobra lub usługi. Jan Kowalski, Firma Jana Kowalskiego Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Klient, Interesant nazwa Klient, Interesant intensja ekstensja Osoba lub organizacja kupująca dobra lub usługi. Jan Kowalski, Firma Jana Kowalskiego Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Klient, Interesant nazwa Klient, Interesant intensja ekstensja Osoba lub organizacja kupująca dobra lub usługi. Jan Kowalski, Firma Jana Kowalskiego Pojęcia mogą mieć synonimy. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Klient nazwa Klient intensja ekstensja Osoba lub organizacja kupująca dobra lub usługi. Jan Kowalski, Firma Jana Kowalskiego Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Klient nazwa Klient intensja ekstensja Osoba lub organizacja kupująca dobra lub usługi. Aplikacja programowa, która żąda od innej aplikacji realizacji usług. Jan Kowalski, Firma Jana Kowalskiego xclock, xterm, . . . Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Przykłady trójek pojęciowych Trójka pojęciowa = (nazwa, intensja, ekstensja) Klient nazwa Klient intensja ekstensja Osoba lub organizacja kupująca dobra lub usługi. Aplikacja programowa, która żąda od innej aplikacji realizacji usług. Jan Kowalski, Firma Jana Kowalskiego xclock, xterm, . . . Pojęcia mogą mieć homonimy. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Spis treści 1 Podejście obiektowe Rozumienie świata Pojęcie Obiekty 2 Konwencje nazw plików Standardowe pliki nagłówkowe w C++ 3 Przeciążenia funkcji, metod i operatorów Przeciążenie (przeładowanie) funkcji 4 Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Programowanie obiektowe Podejście obiektowe, przeciążenia operatorów, referencje Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Obiekty Obiekt ?! Co to takiego ??? Programowanie obiektowe Rozumienie świata Pojęcie Obiekty Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Obiekty Obiektem jest to coś, do czego da się zastosować jakieś pojęcie. Tak więc obiekt jest egzemplarzem pojęcia. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Obiekty Obiektem jest to coś, do czego da się zastosować jakieś pojęcie. Tak więc obiekt jest egzemplarzem pojęcia. Pojęcie =⇒ robot przemysłowy Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Obiekty Obiektem jest to coś, do czego da się zastosować jakieś pojęcie. Tak więc obiekt jest egzemplarzem pojęcia. Pojęcie =⇒ robot przemysłowy Obiekt =⇒ konkretny egzemplarz robota, np. robota IRB1400 Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Obiekty Własności: Obiekt może mieć cechy, którym przypisywane są nazwy, np. kulistość. Obiekt może mieć atrybuty, np. promień kuli. Obiektowi możemy przyporządkować stan. Stan obiektu jest kolekcją atrybutów i związków dotyczących danego obiektu. Zmiana stanu jest zmianą atrybutu i/lub związków danego obiektu (np. położenie obiektu – x, y, z). Obiekt może mieć pewien ograniczony czas życia. Obiekt może być powiązany z innymi obiektami poprzez odwzorowania lub relacje. Odwzorowania i relacje mogą także być modelowane jako obiekty. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Obiekty Własności: Obiekt może mieć cechy, którym przypisywane są nazwy, np. kulistość. Obiekt może mieć atrybuty, np. promień kuli. Obiektowi możemy przyporządkować stan. Stan obiektu jest kolekcją atrybutów i związków dotyczących danego obiektu. Zmiana stanu jest zmianą atrybutu i/lub związków danego obiektu (np. położenie obiektu – x, y, z). Obiekt może mieć pewien ograniczony czas życia. Obiekt może być powiązany z innymi obiektami poprzez odwzorowania lub relacje. Odwzorowania i relacje mogą także być modelowane jako obiekty. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Obiekty Własności: Obiekt może mieć cechy, którym przypisywane są nazwy, np. kulistość. Obiekt może mieć atrybuty, np. promień kuli. Obiektowi możemy przyporządkować stan. Stan obiektu jest kolekcją atrybutów i związków dotyczących danego obiektu. Zmiana stanu jest zmianą atrybutu i/lub związków danego obiektu (np. położenie obiektu – x, y, z). Obiekt może mieć pewien ograniczony czas życia. Obiekt może być powiązany z innymi obiektami poprzez odwzorowania lub relacje. Odwzorowania i relacje mogą także być modelowane jako obiekty. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Obiekty Własności: Obiekt może mieć cechy, którym przypisywane są nazwy, np. kulistość. Obiekt może mieć atrybuty, np. promień kuli. Obiektowi możemy przyporządkować stan. Stan obiektu jest kolekcją atrybutów i związków dotyczących danego obiektu. Zmiana stanu jest zmianą atrybutu i/lub związków danego obiektu (np. położenie obiektu – x, y, z). Obiekt może mieć pewien ograniczony czas życia. Obiekt może być powiązany z innymi obiektami poprzez odwzorowania lub relacje. Odwzorowania i relacje mogą także być modelowane jako obiekty. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Obiekty Własności: Obiekt może mieć cechy, którym przypisywane są nazwy, np. kulistość. Obiekt może mieć atrybuty, np. promień kuli. Obiektowi możemy przyporządkować stan. Stan obiektu jest kolekcją atrybutów i związków dotyczących danego obiektu. Zmiana stanu jest zmianą atrybutu i/lub związków danego obiektu (np. położenie obiektu – x, y, z). Obiekt może mieć pewien ograniczony czas życia. Obiekt może być powiązany z innymi obiektami poprzez odwzorowania lub relacje. Odwzorowania i relacje mogą także być modelowane jako obiekty. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Rozumienie świata Pojęcie Obiekty Obiekty Własności: Obiekt może mieć cechy, którym przypisywane są nazwy, np. kulistość. Obiekt może mieć atrybuty, np. promień kuli. Obiektowi możemy przyporządkować stan. Stan obiektu jest kolekcją atrybutów i związków dotyczących danego obiektu. Zmiana stanu jest zmianą atrybutu i/lub związków danego obiektu (np. położenie obiektu – x, y, z). Obiekt może mieć pewien ograniczony czas życia. Obiekt może być powiązany z innymi obiektami poprzez odwzorowania lub relacje. Odwzorowania i relacje mogą także być modelowane jako obiekty. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Spis treści 1 Podejście obiektowe Rozumienie świata Pojęcie Obiekty 2 Konwencje nazw plików Standardowe pliki nagłówkowe w C++ 3 Przeciążenia funkcji, metod i operatorów Przeciążenie (przeładowanie) funkcji 4 Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Programowanie obiektowe Podejście obiektowe, przeciążenia operatorów, referencje Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Wyświetlenie prostego komunikatu Język C #include <stdio.h> Język C++ #include int main( ) { printf(”Hejka!!!\n”); return 0; } <iostream> int main( ) { std::cout << ”Hejka!!!\n”; } Jedną z istotnych cech programów pisanych w języku C++ jest brak rozszerzeń w nazwach plików nagłówkowych. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Jak do tego doszło – Trochę historii 1990: Wydanie książki: Ellis Margaret A., Stroustrup B. „The Annotated C++ Reference Manual ”, Reading, MA, Addison-Wesley 1990. Stała się ona opisem nieformalnego standardu języka, określanego jako C++ ARM 1998: Przyjęcie standardu języka C++ przez ANSI i ISO. ANSI – American National Standards Institute ISO – International Organization for Standardization ANSI/ISO C++ Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Jak do tego doszło – Trochę historii 1990: Wydanie książki: Ellis Margaret A., Stroustrup B. „The Annotated C++ Reference Manual ”, Reading, MA, Addison-Wesley 1990. Stała się ona opisem nieformalnego standardu języka, określanego jako C++ ARM 1998: Przyjęcie standardu języka C++ przez ANSI i ISO. ANSI – American National Standards Institute ISO – International Organization for Standardization ANSI/ISO C++ Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Jak do tego doszło – Trochę historii 1990: Wydanie książki: Ellis Margaret A., Stroustrup B. „The Annotated C++ Reference Manual ”, Reading, MA, Addison-Wesley 1990. Stała się ona opisem nieformalnego standardu języka, określanego jako C++ ARM 1998: Przyjęcie standardu języka C++ przez ANSI i ISO. ANSI – American National Standards Institute ISO – International Organization for Standardization ANSI/ISO C++ Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Jak do tego doszło – Trochę historii 1990: Wydanie książki: Ellis Margaret A., Stroustrup B. „The Annotated C++ Reference Manual ”, Reading, MA, Addison-Wesley 1990. Stała się ona opisem nieformalnego standardu języka, określanego jako C++ ARM 1998: Przyjęcie standardu języka C++ przez ANSI i ISO. ANSI – American National Standards Institute ISO – International Organization for Standardization ANSI/ISO C++ Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Jak do tego doszło – Trochę historii 1990: Wydanie książki: Ellis Margaret A., Stroustrup B. „The Annotated C++ Reference Manual ”, Reading, MA, Addison-Wesley 1990. Stała się ona opisem nieformalnego standardu języka, określanego jako C++ ARM 1998: Przyjęcie standardu języka C++ przez ANSI i ISO. ANSI – American National Standards Institute ISO – International Organization for Standardization ANSI/ISO C++ Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Jak do tego doszło – Trochę historii 1990: Wydanie książki: Ellis Margaret A., Stroustrup B. „The Annotated C++ Reference Manual ”, Reading, MA, Addison-Wesley 1990. Stała się ona opisem nieformalnego standardu języka, określanego jako C++ ARM 1998: Przyjęcie standardu języka C++ przez ANSI i ISO. ANSI – American National Standards Institute ISO – International Organization for Standardization ANSI/ISO C++ Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ C++ ARM versus ANSI/ISO C++ C++ ARM #include <iostream.h> int main( ) { cout << ”Hejka!!!” return 0; } << endl; ANSI/ISO C++ #include <iostream> using namespace std; int main( ) { cout << ”Hejka!!!” } << endl; Różnica w nazwach plików nagłówkowych umożliwiło środowisku programistów łagodne przejście z C++ARM do standardu ANSI/ISO C++. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Odpowiedniość plików nagłówkowych dla C i C++ <math.h> −→ <cmath> <stdio.h> <ctype.h> <stdlib.h> <string.h> Przypomnienie Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Odpowiedniość plików nagłówkowych dla C i C++ <math.h> −→ <cmath> <stdio.h> −→ <cstdio> <ctype.h> −→ <cctype> <stdlib.h> −→ <cstdlib> <string.h> −→ <cstring> Przypomnienie Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Rozszerzenia plików C++ – Przypomnienie ∗.H ←→ ∗.C ∗.hh ←→ ∗.cc ∗.hpp ←→ ∗.cpp ←→ ∗.cxx ∗.hxx Nie ma jednej ustalonej konwencji. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Rozszerzenia plików C++ – Przypomnienie ∗.H ←→ ∗.C ∗.hh ←→ ∗.cc ∗.hpp ←→ ∗.hxx ←→ ∗.cpp ∗.cxx Można również stosować konwencje mieszane. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Chronologia wprowadzanych standardów C++98 1998 – (ISO/IEC 14882:2011) Przyjęcie standardu ANSI/ISO języka C++. 2003 – (ISO/IEC 14882:2003) Korekcja wcześniejszego standardu. 2007 – (ISO/IEC TR 19768:2007) Oparty na technicznym raporcie „Library Technical Report 1 ”, który wprowadzał rozszerzenia do biblioteki standardowej. C++11 2011 – (ISO/IEC 14882:2011) 11 sierpnia 2011: Nowy standard języka C++ wcześniej roboczo określany jako C++0x. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Chronologia wprowadzanych standardów C++98 1998 – (ISO/IEC 14882:2011) Przyjęcie standardu ANSI/ISO języka C++. C++03 2003 – (ISO/IEC 14882:2003) Korekcja wcześniejszego standardu. C++TR1 2007 – (ISO/IEC TR 19768:2007) Oparty na technicznym raporcie „Library Technical Report 1 ”, który wprowadzał rozszerzenia do biblioteki standardowej. C++11 2011 – (ISO/IEC 14882:2011) 11 sierpnia 2011: Nowy standard języka C++ wcześniej roboczo określany jako C++0x. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Dalszy rozwój C++14 2014 – usunięcie błędów i uzupełnienie wcześniejszego standardu. C++14 pełni rolę korekty do C++11. W niewielkim tylko stopniu rozszerzy koncepcje standardu C++11. C++17 2017 – Będzie miał charakter zasadniczego rozszerzenia w stosunku do standardu C++11. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Dalszy rozwój C++14 2014 – usunięcie błędów i uzupełnienie wcześniejszego standardu. C++14 pełni rolę korekty do C++11. W niewielkim tylko stopniu rozszerzy koncepcje standardu C++11. C++17 2017 – Będzie miał charakter zasadniczego rozszerzenia w stosunku do standardu C++11. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Dalszy rozwój C++14 2014 – usunięcie błędów i uzupełnienie wcześniejszego standardu. C++14 pełni rolę korekty do C++11. W niewielkim tylko stopniu rozszerzy koncepcje standardu C++11. C++17 2017 – Będzie miał charakter zasadniczego rozszerzenia w stosunku do standardu C++11. http://isocpp.org/std/status Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Standard wykorzystywany na zajęciach Obowiązuje nas: ISO C++11 g++ -c -Wall -pedantic -std=c++11 program.cpp Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Standardowe pliki nagłówkowe w C++ Standard wykorzystywany na zajęciach Obowiązuje nas: ISO C++11 g++ -c -Wall -pedantic -std=c++11 program.cpp Należy jednak pamiętać, że implmenetacja standardu C++11 ma wciąż charakter eksperymentalny i nie jest pełna! Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Spis treści 1 Podejście obiektowe Rozumienie świata Pojęcie Obiekty 2 Konwencje nazw plików Standardowe pliki nagłówkowe w C++ 3 Przeciążenia funkcji, metod i operatorów Przeciążenie (przeładowanie) funkcji 4 Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Programowanie obiektowe Podejście obiektowe, przeciążenia operatorów, referencje Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Przeciążanie funkcji Przeciążanie funkcji (ang. function overloading) pozwala na definiowanie funkcji o tych samych nazwach, które różnią się ilością lub typami parametrów. Mogą (lecz nie muszą) zwracać wartości różnego typu. Mechanizm ten pozwala stosować funkcję realizującej ten sam typ operacji w różnych kontekstach. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Przeciążanie funkcji Przeciążanie funkcji (ang. function overloading) pozwala na definiowanie funkcji o tych samych nazwach, które różnią się ilością lub typami parametrów. Mogą (lecz nie muszą) zwracać wartości różnego typu. Mechanizm ten pozwala stosować funkcję realizującej ten sam typ operacji w różnych kontekstach. Przykład: void Wyswietl( float Liczba ) { cout << ”Liczba: ” << Liczba } Programowanie obiektowe << endl; Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Przeciążanie funkcji Przeciążanie funkcji (ang. function overloading) pozwala na definiowanie funkcji o tych samych nazwach, które różnią się ilością lub typami parametrów. Mogą (lecz nie muszą) zwracać wartości różnego typu. Mechanizm ten pozwala stosować funkcję realizującej ten sam typ operacji w różnych kontekstach. Przykład: void Wyswietl( float Liczba ) { cout << ”Liczba: ” << Liczba } << endl; void Wyswietl( const char ∗ Napis ) { cout << ”Napis: \”” << Napis << ”\”” } Programowanie obiektowe << endl; Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Przeciążanie funkcji Przykład: void Wyswietl( float Liczba ) { cout << ”Liczba: ” << Liczba } << endl; void Wyswietl( const char ∗ Napis ) { cout << ”Napis: \”” << Napis << ”\”” } void main( ) { Wyswietl(123.14); Wyswietl(”Jak dobrze wstać skoro świt.”); } Programowanie obiektowe << endl; Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Przeciążanie funkcji Przykład: void Wyswietl( float Liczba ) { cout << ”Liczba: ” << Liczba } << endl; void Wyswietl( const char ∗ Napis ) { cout << ”Napis: \”” << Napis << ”\”” } void main( ) { Wyswietl(123.14); Wyswietl(”Jak dobrze wstać skoro świt.”); } Programowanie obiektowe << endl; Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Przeciążanie funkcji Przykład: void Wyswietl( float Liczba ) { cout << ”Liczba: ” << Liczba } << endl; void Wyswietl( const char ∗ Napis ) { cout << ”Napis: \”” << Napis << ”\”” } void main( ) { Wyswietl(123.14); Wyswietl(”Jak dobrze wstać skoro świt.”); } Programowanie obiektowe << endl; Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Nieszczęsne słowo: overload Przeładowanie czy przeciążenie? Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Nieszczęsne słowo: overload Przeładowanie czy przeciążenie? Przeładowanie — Jak to rozumieć? Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Nieszczęsne słowo: overload Przeładowanie czy przeciążenie? Przeładowanie — (1) do istniejącego ładunku dodajemy nowy przekraczając dopuszczalną obciążalność lub pojemność. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Nieszczęsne słowo: overload Przeładowanie czy przeciążenie? Przeładowanie — (2) istniejącą zawartość wyładowujemy i na jej miejsce wprowadzamy nowy ładunek. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Nieszczęsne słowo: overload Przeładowanie czy przeciążenie? Przeciążenie — A to jak rozumić? Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Nieszczęsne słowo: overload Przeładowanie czy przeciążenie? Przeciążenie — (1) do istniejącego ładunku dodajemy nowy przekraczając dopuszczalny ciężar. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Nieszczęsne słowo: overload Przeładowanie czy przeciążenie? Przeciążenie — (2) do istniejących obowiązków (zadań, powinności itd.) dodajemy nowe przekraczając nominalny zakres. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Przeciążenie (przeładowanie) funkcji Nieszczęsne słowo: overload Przeładowanie czy przeciążenie? Przeładowanie — (1) do istniejącego ładunku dodajemy nowy przekraczając dopuszczalną obciążalność lub pojemność. Przeładowanie — (2) istniejącą zawartość wyładowujemy i na jej miejsce wprowadzamy nowy ładunek. Przeciążenie — (1) do istniejącego ładunku dodajemy nowy przekraczając dopuszczalny ciężar. Przeciążenie — (2) do istniejących obowiązków (zadań, powinności itd.) dodajemy nowe przekraczając nominalny zakres. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Spis treści 1 Podejście obiektowe Rozumienie świata Pojęcie Obiekty 2 Konwencje nazw plików Standardowe pliki nagłówkowe w C++ 3 Przeciążenia funkcji, metod i operatorów Przeciążenie (przeładowanie) funkcji 4 Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Programowanie obiektowe Podejście obiektowe, przeciążenia operatorów, referencje Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Arytmetyka symboli enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol Dodaj( Symbol Arg1, Symbol Arg2 ) { Tabliczka działania } int main( ) { Symbol } x = a, wynik; wynik = Dodaj(x, b); Programowanie obiektowe + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Arytmetyka symboli enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol Dodaj( Symbol Arg1, Symbol Arg2 ) { Tabliczka działania } int main( ) { Symbol } x = a, wynik; wynik = Dodaj(x, b); Programowanie obiektowe + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Arytmetyka symboli enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol Dodaj( Symbol Arg1, Symbol Arg2 ) { return TabliczkaDzialania[Arg1][Arg2]; } int main( ) { Symbol } x = a, wynik; wynik = Dodaj(x, b); Programowanie obiektowe Tabliczka działania + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Arytmetyka symboli enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) { return TabliczkaDzialania[Arg1][Arg2]; Tabliczka } + e e e int main( ) a a { Symbol x = a, wynik; b b } wynik = operator + (x, b); Programowanie obiektowe działania a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Arytmetyka symboli enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) { return TabliczkaDzialania[Arg1][Arg2]; Tabliczka } + e e e int main( ) a a { Symbol x = a, wynik; b b } wynik = x + b; działania a a b e b b e a a+b=e Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Arytmetyka symboli enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) { return definiować TabliczkaDzialania[Arg1][Arg2]; Nie możemy funkcji operatorowych, gdy ich wszystkie parametry są typów Tabliczka działania } wbudowanych takich jak float, int, itd. np. + e a b int operator + (int arg1, float arg2) e e a b int { main( ) a a b e { ... Symbol x = a, wynik; b b e a } wynik = x + b; }Dla tych typów definicje tych operacji są już wbudowane w kompilator. a+ Programowanie obiektowe b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Arytmetyka symboli enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) { return TabliczkaDzialania[Arg1][Arg2]; Uwaga: Wbudowanych definicji operatorów dodawania nie możnaTabliczka jawnie wywołać tak jak działania } operacji np. dla symboli, tzn. + e a b e e a b int Liczba main( = ) operator + (10, 2); a a b e { Symbol x = a, wynik; b b e a } wynik = x + b; a+b=e Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Arytmetyka symboli enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) { return TabliczkaDzialania[Arg1][Arg2]; Uwaga: Wbudowanych definicji operatorów dodawania nie możnaTabliczka jawnie wywołać tak jak działania } operacji np. dla symboli, tzn. + e a b h h hh ( ( ( hh ( ( h ( ( ( h h h ( ( ( h h hh ( e e a b h+ = operator (10, ( (( h h hh ( ( (( h hh int Liczba main( ( )(( ( h 2); ( a a b e { Symbol x = a, wynik; b b e a } wynik = x + b; a+b=e Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora + enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Tabliczka działania int main( ) { Symbol } x = a, wynik; wynik = x + b; + e a b e e a b a a b e b b e a a+b=e Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora + enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Tabliczka działania int main( ) { Symbol } x = a, wynik; wynik = x + +b; Programowanie obiektowe + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora + enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Tabliczka działania int main( ) { Symbol } x = a, wynik; wynik = x + (+b); Programowanie obiektowe + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora + enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Tabliczka działania int main( ) { Symbol } x = a, wynik; wynik = x + operator+(b); Programowanie obiektowe + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora + enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator + ( Symbol Arg) { ??? } int main( ) { Symbol } x = a, wynik; wynik = x + operator+(b); Programowanie obiektowe Tabliczka działania + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora + enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator + ( Symbol Arg) { return Arg; } int main( ) { Symbol } x = a, wynik; wynik = x + operator+(b); Programowanie obiektowe Tabliczka działania + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora + enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator + ( Symbol Arg) { return Arg; } int main( ) { Symbol } x = a, wynik; wynik = x + +b; Programowanie obiektowe Tabliczka działania + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora − enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Tabliczka działania int main( ) { Symbol } x = a, wynik; wynik = x + −b; Programowanie obiektowe + e a b e e a b a a b e b b e a a + −b = ? Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora − enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator − ( Symbol Arg) { ??? Tabliczka działania ??? } + e a b e e a b int main( ) a a b e { Symbol x = a, wynik; b b e a } wynik = x + −b; Programowanie obiektowe a + −b = ? Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora − enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator − ( Symbol Arg) { Symbol ElemOdwrotny[ ] = { e, b, a }; Tabliczka działania ??? } + e a b e e a b int main( ) a a b e { Symbol x = a, wynik; b b e a } wynik = x + −b; Programowanie obiektowe a + −b = ? Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora − enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator − ( Symbol Arg) { e+?=e Symbol ElemOdwrotny[ ] = { e, b, a }; Tabliczka działania ??? } + e a b e e a b int main( ) a a b e { Symbol x = a, wynik; b b e a } wynik = x + −b; Programowanie obiektowe a + −b = ? Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora − enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator − ( Symbol Arg) { e+e=e Symbol ElemOdwrotny[ ] = { e, b, a }; Tabliczka działania ??? } + e a b e e a b int main( ) a a b e { Symbol x = a, wynik; b b e a } wynik = x + −b; Programowanie obiektowe a + −b = ? Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora − enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator − ( Symbol Arg) { e+e=e Symbol ElemOdwrotny[ ] = { e, b, a }; Tabliczka działania ??? } + e a b e e a b int main( ) a a b e { Symbol x = a, wynik; b b e a } wynik = x + −b; Programowanie obiektowe a + −b = ? Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora − enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator − ( Symbol Arg) { a+?=e Symbol ElemOdwrotny[ ] = { e, b, a }; Tabliczka działania ??? } + e a b e e a b int main( ) a a b e { Symbol x = a, wynik; b b e a } wynik = x + −b; Programowanie obiektowe a + −b = ? Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora − enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator − ( Symbol Arg) { a+b=e Symbol ElemOdwrotny[ ] = { e, b, a }; Tabliczka działania ??? } + e a b e e a b int main( ) a a b e { Symbol x = a, wynik; b b e a } wynik = x + −b; Programowanie obiektowe a + −b = ? Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora − enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator − ( Symbol Arg) { b+?=e Symbol ElemOdwrotny[ ] = { e, b, a }; Tabliczka działania ??? } + e a b e e a b int main( ) a a b e { Symbol x = a, wynik; b b e a } wynik = x + −b; Programowanie obiektowe a + −b = ? Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora − enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator − ( Symbol Arg) { b+a=e Symbol ElemOdwrotny[ ] = { e, b, a }; Tabliczka działania ??? } + e a b e e a b int main( ) a a b e { Symbol x = a, wynik; b b e a } wynik = x + −b; Programowanie obiektowe a + −b = ? Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora − enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator − ( Symbol Arg) { Symbol ElemOdwrotny[ ] = { e, b, a }; Tabliczka działania return ElemOdwrotny[Arg]; } + e a b e e a b int main( ) a a b e { Symbol x = a, wynik; b b e a } wynik = x + −b; Programowanie obiektowe a + −b = ? Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przeciążanie operatora − enum Symbol { e, a, b }; Symbol TabliczkaDzialania[3][3] = { { e, a, b }, { a, b, e }, { b, e, a } }; Symbol operator + ( Symbol Arg1, Symbol Arg2 ) ... Symbol operator − ( Symbol Arg) { Symbol ElemOdwrotny[ ] = { e, b, a }; Tabliczka działania return ElemOdwrotny[Arg]; } + e a b e e a b int main( ) a a b e { Symbol x = a, wynik; b b e a } wynik = x + −b; Programowanie obiektowe a + −b = a + a = b Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Jeszcze raz dodawanie enum ... Symbol { e, a, b }; Symbol Dodaj( Symbol Arg1, Symbol Arg2 ); Symbol operator + ( Symbol Arg1, Symbol Arg2 ); ... Tabliczka działania int main( ) { Symbol x = a, wynik; wynik = Dodaj(x, b); wynik = operator+ (x, b); wynik = x + b; } Programowanie obiektowe + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Jeszcze raz dodawanie enum ... Symbol { e, a, b }; Symbol Dodaj( Symbol Arg1, Symbol Arg2 ); Symbol operator + ( Symbol Arg1, Symbol Arg2 ); ... Tabliczka działania int main( ) { Symbol x = a, wynik; wynik = x + b; + e a b e e a b a a b e b b e a a+b=e } Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję A jak zdefiniować operację dodania i podstawienia? enum ... Symbol { e, a, b }; void Dodaj( Symbol Arg1, Symbol Arg2 ); Symbol operator + ( Symbol Arg1, Symbol Arg2 ); ... Tabliczka działania int main( ) { Symbol wynik = a; wynik += b; + e a b e e a b a a b e b b e a a+b=e } Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję A jak zdefiniować operację dodania i podstawienia? enum ... Symbol { e, a, b }; void Dodaj( Symbol Arg1, Symbol Arg2 ); Symbol operator + ( Symbol Arg1, Symbol Arg2 ); ... Tabliczka działania int main( ) { Symbol wynik = a; wynik += b; + e a b e e a b a a b e b b e a a+b=e } Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję A jak zdefiniować operację dodania i podstawienia? enum ... Symbol { e, a, b }; void Dodaj( Symbol Arg1, Symbol Arg2 ); Symbol operator + ( Symbol Arg1, Symbol Arg2 ); ... Tabliczka działania int main( ) { Symbol wynik = a; wynik += b; + e a b e e a b a a b e b b e a a+b=e } Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję A jak zdefiniować operację dodania i podstawienia? enum ... Symbol { e, a, b }; void Dodaj( Symbol Arg1, Symbol Arg2 ); void operator += ( Symbol Arg1, Symbol Arg2 ); ... int main( ) { Symbol wynik = a; wynik += b; Tabliczka działania + e a b e e a b a a b e b b e a a+b=e } Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję A jak zdefiniować operację dodania i podstawienia? enum ... Symbol { e, a, b }; void Dodaj( Symbol Arg1, Symbol Arg2 ); void operator += ( Symbol Arg1, Symbol Arg2 ); ... int main( ) { Symbol wynik = a; operator+= (wynik, b); wynik += b; } Programowanie obiektowe Tabliczka działania + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję A jak zdefiniować operację dodania i podstawienia? enum ... Symbol { e, a, b }; Symbol DodajIPodstaw( Symbol Arg1, Symbol Arg2 ); void operator += ( Symbol Arg1, Symbol Arg2 ); ... int main( ) { Symbol wynik = a; operator+= (wynik, b); wynik += b; } Programowanie obiektowe Tabliczka działania + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję A jak zdefiniować operację dodania i podstawienia? enum ... Symbol { e, a, b }; Symbol DodajIPodstaw( Symbol Arg1, Symbol Arg2 ); void operator += ( Symbol Arg1, Symbol Arg2 ); ... int main( ) { Symbol wynik = a; DodajIPodstaw(wynik, b); operator+= (wynik, b); wynik += b; } Programowanie obiektowe Tabliczka działania + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję A jak zdefiniować operację dodania i podstawienia? enum ... Symbol { e, a, b }; Symbol DodajIPodstaw( Symbol Arg1, Symbol Arg2 ); { Arg1 = TabliczkaDzialania[Arg1][Arg2]; } Tabliczka ... int main( ) + e { e e Symbol wynik = a; a a DodajIPodstaw(wynik, b); b b operator+= (wynik, b); wynik += b; a+b } Programowanie obiektowe działania a a b e b b e a =e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję A jak zdefiniować operację dodania i podstawienia? enum ... Symbol { e, a, b }; Symbol DodajIPodstaw( Symbol Arg1, Symbol Arg2 ); { Arg1 = TabliczkaDzialania[Arg1][Arg2]; } Tabliczka ... int main( ) + e { e e Symbol wynik = a; a a DodajIPodstaw(wynik, b); b b operator+= (wynik, b); wynik += b; a+b } Programowanie obiektowe działania a a b e b b e a =e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję A jak zdefiniować operację dodania i podstawienia? enum ... Symbol { e, a, b }; Symbol DodajIPodstaw( Symbol *pArg1, Symbol Arg2 ); { *pArg1 = TabliczkaDzialania[*pArg1][Arg2]; } Tabliczka ... int main( ) + e { e e Symbol wynik = a; a a DodajIPodstaw(&wynik, b); b b operator+= (wynik, b); wynik += b; a+b } Programowanie obiektowe działania a a b e b b e a =e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję A jak zdefiniować operację dodania i podstawienia? enum ... Symbol { e, a, b }; Symbol DodajIPodstaw( Symbol *pArg1, Symbol Arg2 ); { *pArg1 = TabliczkaDzialania[*pArg1][Arg2]; } Tabliczka ... int main( ) + e { e e Symbol wynik = a; a a DodajIPodstaw(&wynik, b); b b operator+= (&wynik, b); &wynik += b; a+b } Programowanie obiektowe działania a a b e b b e a =e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Spis treści 1 Podejście obiektowe Rozumienie świata Pojęcie Obiekty 2 Konwencje nazw plików Standardowe pliki nagłówkowe w C++ 3 Przeciążenia funkcji, metod i operatorów Przeciążenie (przeładowanie) funkcji 4 Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Programowanie obiektowe Podejście obiektowe, przeciążenia operatorów, referencje Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję O referencji Referencja w C++ jest pochodnym typem danych (podobnie jak wskaźnik). Umożliwia pośrednie odwoływanie się do zmiennych i obiektów. Kłopoty z terminem referencja w informatyce przez referencję rozumie się pewną ogólną koncepcję typu danych. Określa się w ten sposób obiekt/zmienną zawierającą informację będącą odsyłaczem do właściwej struktury danych. Zmienne wskaźnikowe w C sa przykładem realizacji koncepcji referencji. w C++ referencja jest konkretną implementacją typu danych, który jest istotnie różny od typu wskaźnikowego. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję O referencji Referencja w C++ jest pochodnym typem danych (podobnie jak wskaźnik). Umożliwia pośrednie odwoływanie się do zmiennych i obiektów. Kłopoty z terminem referencja w informatyce przez referencję rozumie się pewną ogólną koncepcję typu danych. Określa się w ten sposób obiekt/zmienną zawierającą informację będącą odsyłaczem do właściwej struktury danych. Zmienne wskaźnikowe w C sa przykładem realizacji koncepcji referencji. w C++ referencja jest konkretną implementacją typu danych, który jest istotnie różny od typu wskaźnikowego. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję O referencji Referencja w C++ jest pochodnym typem danych (podobnie jak wskaźnik). Umożliwia pośrednie odwoływanie się do zmiennych i obiektów. Kłopoty z terminem referencja w informatyce przez referencję rozumie się pewną ogólną koncepcję typu danych. Określa się w ten sposób obiekt/zmienną zawierającą informację będącą odsyłaczem do właściwej struktury danych. Zmienne wskaźnikowe w C sa przykładem realizacji koncepcji referencji. w C++ referencja jest konkretną implementacją typu danych, który jest istotnie różny od typu wskaźnikowego. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję O referencji Referencja w C++ jest pochodnym typem danych (podobnie jak wskaźnik). Umożliwia pośrednie odwoływanie się do zmiennych i obiektów. Kłopoty z terminem referencja w informatyce przez referencję rozumie się pewną ogólną koncepcję typu danych. Określa się w ten sposób obiekt/zmienną zawierającą informację będącą odsyłaczem do właściwej struktury danych. Zmienne wskaźnikowe w C sa przykładem realizacji koncepcji referencji. w C++ referencja jest konkretną implementacją typu danych, który jest istotnie różny od typu wskaźnikowego. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencja i wskaźnik W pierwszym przybliżeniu referencja (w C++) może być uważana jako typ wskaźnikowy stały. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencja i wskaźnik W pierwszym przybliżeniu referencja (w C++) może być uważana jako typ wskaźnikowy stały. int Licznik; Dla przykładu rozważmy deklarację zmiennej typu int. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencja i wskaźnik W pierwszym przybliżeniu referencja (w C++) może być uważana jako typ wskaźnikowy stały. int Licznik; int* const wskLicznik = &Licznik; Możemy utworzyć stały wskaźnik na zmienną. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencja i wskaźnik W pierwszym przybliżeniu referencja (w C++) może być uważana jako typ wskaźnikowy stały. int Licznik; int* const wskLicznik = &Licznik; *wskLicznik = 15; cerr << Licznik; Co się wyświetli po wykonaniu przedstawionych instrukcji? Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencja i wskaźnik W pierwszym przybliżeniu referencja (w C++) może być uważana jako typ wskaźnikowy stały. int Licznik; int* const wskLicznik = &Licznik; int Licznik; int &refLicznik = Licznik; *wskLicznik = 15; cerr << Licznik; Definiując referencję (podobnie jak stały wskaźnik) należy ją od razu zainicjalizować Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencja i wskaźnik W pierwszym przybliżeniu referencja (w C++) może być uważana jako typ wskaźnikowy stały. int Licznik; int Licznik; int* const wskLicznik = &Licznik; int &refLicznik = Licznik; *wskLicznik = 15; cerr << Licznik; refLicznik = 15; cerr << Licznik; Referencją posługujemy się tak samo jak samą zmienną. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencja i wskaźnik W pierwszym przybliżeniu referencja (w C++) może być uważana jako typ wskaźnikowy stały. char Znak; char Znak; char* const wskZnak = &Znak; char &refZnak = Znak; *wskZnak = ’a’; cerr << Znak; refZnak = ’a’; cerr << Znak; Referencją posługujemy się tak samo jak samą zmienną. Dotyczy to zmiennych każdego typu. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Spis treści 1 Podejście obiektowe Rozumienie świata Pojęcie Obiekty 2 Konwencje nazw plików Standardowe pliki nagłówkowe w C++ 3 Przeciążenia funkcji, metod i operatorów Przeciążenie (przeładowanie) funkcji 4 Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Programowanie obiektowe Podejście obiektowe, przeciążenia operatorów, referencje Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Cechy wspólne: poprzez referencje i wskaźniki odwołujemy się do istniejących zmiennych/obiektów, do jednego i tego samego obiektu można utworzyć kilka zmiennych referencyjnych lub zmiennych wskaźnikowych, w których znajduje się adres tego obiektu, jeżeli parametr funkcji/metody jest wskaźnikiem lub referencją, to przekazanie zmiennej poprzez ten parametr skutkuje tym, że dokonane modyfikacje wartości zmiennej będą widoczne na zewnątrz funkcji/metod. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Cechy wspólne: poprzez referencje i wskaźniki odwołujemy się do istniejących zmiennych/obiektów, do jednego i tego samego obiektu można utworzyć kilka zmiennych referencyjnych lub zmiennych wskaźnikowych, w których znajduje się adres tego obiektu, jeżeli parametr funkcji/metody jest wskaźnikiem lub referencją, to przekazanie zmiennej poprzez ten parametr skutkuje tym, że dokonane modyfikacje wartości zmiennej będą widoczne na zewnątrz funkcji/metod. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Cechy wspólne: poprzez referencje i wskaźniki odwołujemy się do istniejących zmiennych/obiektów, do jednego i tego samego obiektu można utworzyć kilka zmiennych referencyjnych lub zmiennych wskaźnikowych, w których znajduje się adres tego obiektu, jeżeli parametr funkcji/metody jest wskaźnikiem lub referencją, to przekazanie zmiennej poprzez ten parametr skutkuje tym, że dokonane modyfikacje wartości zmiennej będą widoczne na zewnątrz funkcji/metod. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Cechy wspólne: poprzez referencje i wskaźniki odwołujemy się do istniejących zmiennych/obiektów, do jednego i tego samego obiektu można utworzyć kilka zmiennych referencyjnych lub zmiennych wskaźnikowych, w których znajduje się adres tego obiektu, jeżeli parametr funkcji/metody jest wskaźnikiem lub referencją, to przekazanie zmiennej poprzez ten parametr skutkuje tym, że dokonane modyfikacje wartości zmiennej będą widoczne na zewnątrz funkcji/metod. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Różnice: referencje można zainicjalizować adresem zmiennej/obiektu tylko raz, w momencie jej definicji, jest niedopuszczalny brak inicjalizacji referencji, referencja nie może mieć adresu nullptr (NULL – C++98). Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Różnice: referencje można zainicjalizować adresem zmiennej/obiektu tylko raz, w momencie jej definicji, jest niedopuszczalny brak inicjalizacji referencji, referencja nie może mieć adresu nullptr (NULL – C++98). Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Różnice: referencje można zainicjalizować adresem zmiennej/obiektu tylko raz, w momencie jej definicji, jest niedopuszczalny brak inicjalizacji referencji, referencja nie może mieć adresu nullptr (NULL – C++98). Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Różnice: referencje można zainicjalizować adresem zmiennej/obiektu tylko raz, w momencie jej definicji, jest niedopuszczalny brak inicjalizacji referencji, referencja nie może mieć adresu nullptr (NULL – C++98). Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Zalety stosowania referencji: referencja jest bezpieczniejszym sposobem odwołania się do zmiennej. Nie daje jednak stuprocentowej pewności, że zmienna/obiekt, do której odwołujemy się przez referencję, istnieje. sposób odwołania się do zmiennej/obiektu jest dla programisty przezroczysty. Referencję traktujemy tak samo jak zmiennę, do której ta referencja odwołuje się. odwoływanie się poprzez referencję może pozwalać kompilatorowi na lepszą optymalizację kodu (brak zmian przechowywanego adresu). Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Zalety stosowania referencji: referencja jest bezpieczniejszym sposobem odwołania się do zmiennej. Nie daje jednak stuprocentowej pewności, że zmienna/obiekt, do której odwołujemy się przez referencję, istnieje. sposób odwołania się do zmiennej/obiektu jest dla programisty przezroczysty. Referencję traktujemy tak samo jak zmiennę, do której ta referencja odwołuje się. odwoływanie się poprzez referencję może pozwalać kompilatorowi na lepszą optymalizację kodu (brak zmian przechowywanego adresu). Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Zalety stosowania referencji: referencja jest bezpieczniejszym sposobem odwołania się do zmiennej. Nie daje jednak stuprocentowej pewności, że zmienna/obiekt, do której odwołujemy się przez referencję, istnieje. sposób odwołania się do zmiennej/obiektu jest dla programisty przezroczysty. Referencję traktujemy tak samo jak zmiennę, do której ta referencja odwołuje się. odwoływanie się poprzez referencję może pozwalać kompilatorowi na lepszą optymalizację kodu (brak zmian przechowywanego adresu). Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Zalety stosowania referencji: referencja jest bezpieczniejszym sposobem odwołania się do zmiennej. Nie daje jednak stuprocentowej pewności, że zmienna/obiekt, do której odwołujemy się przez referencję, istnieje. sposób odwołania się do zmiennej/obiektu jest dla programisty przezroczysty. Referencję traktujemy tak samo jak zmiennę, do której ta referencja odwołuje się. odwoływanie się poprzez referencję może pozwalać kompilatorowi na lepszą optymalizację kodu (brak zmian przechowywanego adresu). Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Wady stosowania referencji: brak elastyczności jaką dają wskaźniki (możliwość zmiany adresu). Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe Wady stosowania referencji: brak elastyczności jaką dają wskaźniki (możliwość zmiany adresu). Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe int Zm; int & refZm = Zm; Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe int Zm; int & refZm = Zm; int Zm; int ∗ const wskZm = &Zm; Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe int Zm; int & refZm = Zm; refZm = 2; int Zm; int ∗ const wskZm = &Zm; Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe int Zm; int & refZm = Zm; refZm = 2; cout << Zm << endl; int Zm; int ∗ const wskZm = &Zm; Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe int Zm; int & refZm = Zm; refZm = 2; cout << Zm << endl; int Zm; int ∗ const wskZm = &Zm; ∗wskZm = 2; cout << Zm << endl; Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe int Zm; int & refZm = Zm; ... ... ... refZm = 2; cout << Zm << endl; int Zm; int ∗ const wskZm = &Zm; ... ... ... ∗wskZm = 2; cout << Zm << endl; Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe int Zm; int & refZm = Zm; ... ... ... refZm = 2; cout << Zm << endl; int Zm; int ∗ const wskZm = &Zm; ... ... ... ∗wskZm = 2; cout << Zm << endl; Programowanie obiektowe Jaka wartość zostanie wyświetlona w tym przypadku? Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe int Zm; int & refZm = Zm; ... ... ... refZm = 2; cout << Zm << endl; int Zm; int ∗ const wskZm = &Zm; ... ... ... ∗wskZm = 2; cout << Zm << endl; Programowanie obiektowe Jaka wartość zostanie wyświetlona w tym przypadku? A jaka wyświetli się tutaj? Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe int Zm; int & refZm = Zm; ... ... ... refZm = 2; cout << Zm << endl; int Zm; int ∗ const wskZm = &Zm; ... ... ... ∗wskZm = 2; cout << Zm << endl; Programowanie obiektowe Jaka wartość zostanie wyświetlona w tym przypadku? Tego nikt nie wie!!! Gdyż . . . Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe int Zm; int & refZm = Zm; ... ... ... refZm = 2; cout << Zm << endl; int Zm; int ∗ const wskZm = &Zm; ... (int ∗)wskZm = new int ; ... ∗wskZm = 2; cout << Zm << endl; Programowanie obiektowe Jaka wartość zostanie wyświetlona w tym przypadku? Tego nikt nie wie!!! Gdyż można wymusić zmianę wskaźnika. Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe int Zm; int & refZm = Zm; ... ... ... refZm = 2; cout << Zm << endl; Jaka wartość zostanie wyświetlona w tym przypadku? int Zm; int ∗ const wskZm = &Zm; ... const cast <int ∗>(wskZm) = new int ; ... Tego nikt nie wie!!! Gdyż można ∗wskZm = 2; wymusić zmianę wskaźnika. cout << Zm << endl; Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe int Zm; int & refZm = Zm; ... ... ... refZm = 2; cout << Zm << endl; Tu na pewno wyświetli się 2, gdyż ... int Zm; int ∗ const wskZm = &Zm; ... const cast <int ∗>(wskZm) = new int ; ... Tego nikt nie wie!!! Gdyż można ∗wskZm = 2; wymusić zmianę wskaźnika. cout << Zm << endl; Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Referencje versus zmienne wskaźnikowe int Zm; int & refZm = Zm; ... ... ... refZm = 2; cout << Zm << endl; Tu na pewno wyświetli się 2, gdyż referencja nie może być zmieniona. int Zm; int ∗ const wskZm = &Zm; ... const cast <int ∗>(wskZm) = new int ; ... Tego nikt nie wie!!! Gdyż można ∗wskZm = 2; wymusić zmianę wskaźnika. cout << Zm << endl; Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Spis treści 1 Podejście obiektowe Rozumienie świata Pojęcie Obiekty 2 Konwencje nazw plików Standardowe pliki nagłówkowe w C++ 3 Przeciążenia funkcji, metod i operatorów Przeciążenie (przeładowanie) funkcji 4 Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Programowanie obiektowe Podejście obiektowe, przeciążenia operatorów, referencje Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przekazywanie parametrów przez referencję void Poteguj(int & Wart) { Wart ∗= Wart; } int main( ) { int Zm=2; Poteguj(Zm); cout << Zm << endl; } Używając referencji możemy poprzez parametr przekazać do funkcji zmiennę, której zmiany wartości będą widoczne na „zewnątrz”. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Przekazywanie parametrów przez referencję void Poteguj(int & Wart) { Wart ∗= Wart; } void Poteguj(int ∗ const wWart) { ∗wWart ∗= ∗wWart; } int main( ) { int Zm=2; int main( ) { int Zm=2; Poteguj(Zm); cout << Zm << endl; } Poteguj(&Zm); cout << Zm << endl; } Analog tej konstrukcji możemy napisać wykorzystując przekazywanie parametru poprzez wskaźnik. Programowanie obiektowe Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Definiowanie operacji dodania i podstawienia? enum ... Symbol { e, a, b }; Symbol DodajIPodstaw( Symbol *pArg1, Symbol Arg2 ); { *pArg1 = TabliczkaDzialania[*pArg1][Arg2]; } Tabliczka ... int main( ) + e { e e Symbol wynik = a; a a DodajIPodstaw(&wynik, b); b b operator+= (&wynik, b); &wynik += b; a+b } Programowanie obiektowe działania a a b e b b e a =e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Definiowanie operacji dodania i podstawienia? enum ... Symbol { e, a, b }; Symbol DodajIPodstaw( Symbol &Arg1, Symbol Arg2 ); { Arg1 = TabliczkaDzialania[Arg1][Arg2]; } Tabliczka ... int main( ) + e { e e Symbol wynik = a; a a DodajIPodstaw(wynik, b); b b operator+= (&wynik, b); &wynik += b; a+b } Programowanie obiektowe działania a a b e b b e a =e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Definiowanie operacji dodania i podstawienia? enum ... Symbol { e, a, b }; Symbol DodajIPodstaw( Symbol &Arg1, Symbol Arg2 ); void operator += ( Symbol *pArg1, Symbol Arg2 ); ... Tabliczka działania int main( ) { Symbol wynik = a; DodajIPodstaw(wynik, b); operator+= (&wynik, b); &wynik += b; } Programowanie obiektowe + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Operatory jako funkcje Referencja – czym jest Porównanie – referencje i zmienne wskaźnikowe Przekazywanie parametrów przez referencję Definiowanie operacji dodania i podstawienia? enum ... Symbol { e, a, b }; Symbol DodajIPodstaw( Symbol &Arg1, Symbol Arg2 ); void operator += ( Symbol &Arg1, Symbol Arg2 ); ... Tabliczka działania int main( ) { Symbol wynik = a; DodajIPodstaw(wynik, b); operator+= (wynik, b); wynik += b; } Programowanie obiektowe + e a b e e a b a a b e b b e a a+b=e Podejście obiektowe Konwencje nazw plików Przeciążenia funkcji, metod i operatorów Przeciążanie operatorów Koniec prezentacji Dziękuję za uwagę Programowanie obiektowe Podejście obiektowe, przeciążenia operatorów, referencje