Organizacja kursu, paradygmaty, ogólnie o C i C++ Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechniki Wrocławskiej Kurs: Copyright c 2015 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ą. Organizacja kursu, paradygmaty, ogólnie o C i C++
Niniejsza prezentacja została wykonana przy użyciu systemu składu L A TEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer: http://latex-beamer.sourceforge.net
Moje dane Organizacja kursu Bogdan Kreczmer, dr inż., pok. 307 bud. C-3 Terminy konsultacji: śr. 15:00 17:00 pt. 13:00 15:00 Strona kursu: http://sequoia.iiar.pwr.wroc.pl/ kreczmer/kpo http://rab.iiar.pwr.wroc.pl/ kreczmer/kpo
Spis treści Organizacja kursu 1 Organizacja kursu 2 Podejście obiektowe Języki programowania 3 Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++ 4 Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji
Warunki udziału i przebieg kursu Warunki udziału w kursie Wykłady i materiały do wykładów Laboratoria
Warunki udziału i przebieg kursu Warunki udziału w kursie Wykłady i materiały do wykładów Laboratoria
Warunki udziału i przebieg kursu Warunki udziału w kursie Wykłady i materiały do wykładów Laboratoria
Warunki zaliczeń Organizacja kursu Kurs kończy się zaliczeniem. Zaliczenie kursu można uzyskać pod warunkiem uzyskania zaliczenia z laboratorium oraz pozytywnej oceny z ekranówki Sposób liczenia oceny z kursu: 10 ( 20 + 0.25(E L) 2)(E + L) Ocena celująca ekranówka: 5,0; laboratorium: 5,5
Warunki zaliczeń Organizacja kursu Kurs kończy się zaliczeniem. Zaliczenie kursu można uzyskać pod warunkiem uzyskania zaliczenia z laboratorium oraz pozytywnej oceny z ekranówki Sposób liczenia oceny z kursu: 10 ( 20 + 0.25(E L) 2)(E + L) Ocena celująca ekranówka: 5,0; laboratorium: 5,5
Warunki zaliczeń Organizacja kursu Kurs kończy się zaliczeniem. Zaliczenie kursu można uzyskać pod warunkiem uzyskania zaliczenia z laboratorium oraz pozytywnej oceny z ekranówki Sposób liczenia oceny z kursu: 10 ( 20 + 0.25(E L) 2)(E + L) Ocena celująca ekranówka: 5,0; laboratorium: 5,5
Literatura Organizacja kursu Literatura podstawowa: S. B. Leppman, Josée Lajoie, B. E. Moo C++ Primer, 2012 Bjarne Stroustrup, Język C++ Kompedium wiedzy, Wydanie IV, Helion, 2014 J. Grębosz, Symfonia C ++ standard J. Grębosz, Pasja C ++
Literatura Organizacja kursu Literatura pomocnicza: B. Eckel, Thinking in C++ Nicolai M. Josuttis, C++ Biblioteka standardowa, Podręcznik programisty David Vandevoorde, Nicolai M. Josuttis, C++ szablony Grady Booch, James Rumbaugh, Ivar Jacobson, UML użytkownika przewodnik Michał Śmiałek, Zrozumieć UML 2.0 Metody modelowania obiektowego, HELION 2005 James Martin, James J. Odell, Podstawy metod obiektowych
Podejście obiektowe Języki programowania Czym jest? oparte jest na podejściu obiektowym do analizy problemu oraz syntezy i implementacji jego rozwiązania.
Podejście obiektowe Języki programowania Czym jest? 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.
Języki programowania obiektowego Podejście obiektowe Języki programowania To co cechuje jezyki programowania obiektowego (języki obiektowe), to to że wspomagają i wymuszają stosowanie metod podejścia obiektowego. Najistotniejszą cechą podejścia obiektowego jest integracja struktur danych i kodu, który odwołuje się do tych struktur. Ten rodzaj integracji ma formę obiektów. Typy struktur danych zintegrowanych w ten sposób z kodem nazywane są klasami.
Języki programowania obiektowego Podejście obiektowe Języki programowania To co cechuje jezyki programowania obiektowego (języki obiektowe), to to że wspomagają i wymuszają stosowanie metod podejścia obiektowego. Najistotniejszą cechą podejścia obiektowego jest integracja struktur danych i kodu, który odwołuje się do tych struktur. Ten rodzaj integracji ma formę obiektów. Typy struktur danych zintegrowanych w ten sposób z kodem nazywane są klasami.
Języki programowania obiektowego Podejście obiektowe Języki programowania To co cechuje jezyki programowania obiektowego (języki obiektowe), to to że wspomagają i wymuszają stosowanie metod podejścia obiektowego. Najistotniejszą cechą podejścia obiektowego jest integracja struktur danych i kodu, który odwołuje się do tych struktur. Ten rodzaj integracji ma formę obiektów. Typy struktur danych zintegrowanych w ten sposób z kodem nazywane są klasami.
Warto wiedzieć Organizacja kursu Podejście obiektowe Języki programowania Ogólna koncepcja podejścia obiektowego do programowania powstała na przełomie lat 50-tych i 60-tych w MIT. W bardziej formalnej postaci koncepcje te zostały wprowadzone w języku Simula 67 w latach 60-tych.
Języki obiektowe Organizacja kursu Podejście obiektowe Języki programowania Przykłady języków obiektowych: Smalltalk Ruby
C++ Organizacja kursu Podejście obiektowe Języki programowania Język C++ nie jest językiem obiektowym!
Od koncepcji do paradygmatu Podejście obiektowe Języki programowania Podejście obiektowe do programowania wyznacza sposób patrzenia na struktury danych i przepływ sterowania w programie oraz wykonywanie całego programu. Wprowadza ono pewien zbiór pojęć i koncepcji, który determinuje sposób rozumienia procesu programowania.
Od koncepcji do paradygmatu Podejście obiektowe Języki programowania Podejście obiektowe do programowania wyznacza sposób patrzenia na struktury danych i przepływ sterowania w programie oraz wykonywanie całego programu. Wprowadza ono pewien zbiór pojęć i koncepcji, który determinuje sposób rozumienia procesu programowania. Ten zbiór pojęć i koncepcji odnoszący się do programowania określany jest mianem paradygmatu programowania.
Podejście obiektowe Języki programowania Przykładowe paradygmaty programowania Programowanie proceduralne Programowanie strukturalne Programowanie modularne Programowanie imperatywne Programowanie uogólnione Programowanie sterowane zdarzeniami
Podejście obiektowe Języki programowania Przykładowe paradygmaty programowania Programowanie proceduralne zaleca dzielenie programu na procedury i nie wykorzystywanie zmiennych globalnych. Programowanie strukturalne Programowanie modularne Programowanie imperatywne Programowanie uogólnione Programowanie sterowane zdarzeniami
Podejście obiektowe Języki programowania Przykładowe paradygmaty programowania Programowanie proceduralne Programowanie strukturalne wywoływanie procedur powinno tworzyć hierarchiczną strukturę z wykorzystanie instrukcji warunkowych i pętli. Zakazuje się używania instrukcji goto. Programowanie modularne Programowanie imperatywne Programowanie uogólnione Programowanie sterowane zdarzeniami
Podejście obiektowe Języki programowania Przykładowe paradygmaty programowania Programowanie proceduralne Programowanie strukturalne Programowanie modularne zaleca stosowanie modułów grupujących zbiory procedur. Programowanie imperatywne Programowanie uogólnione Programowanie sterowane zdarzeniami
Podejście obiektowe Języki programowania Przykładowe paradygmaty programowania Programowanie proceduralne Programowanie strukturalne Programowanie modularne Programowanie imperatywne opisuje proces wykonywania programu jako sekwencję instrukcji zmieniających stan programu. Programowanie uogólnione Programowanie sterowane zdarzeniami
Podejście obiektowe Języki programowania Przykładowe paradygmaty programowania Programowanie proceduralne Programowanie strukturalne Programowanie modularne Programowanie imperatywne definiuje program jak zbiór obiektów. Ich istotą jest łączenie stanu i zachowania. Program to zbiór obiektów komunikujących się między sobą w celu wykonania zadania. Programowanie uogólnione Programowanie sterowane zdarzeniami
Podejście obiektowe Języki programowania Przykładowe paradygmaty programowania Programowanie proceduralne Programowanie strukturalne Programowanie modularne Programowanie imperatywne Programowanie uogólnione kładzie nacisk na ogólną konstrukcję algorytmu bez konieczności znajomości typów danych, np. sortowanie. Programowanie sterowane zdarzeniami
Podejście obiektowe Języki programowania Przykładowe paradygmaty programowania Programowanie proceduralne Programowanie strukturalne Programowanie modularne Programowanie imperatywne Programowanie uogólnione Programowanie sterowane zdarzeniami opis programu uwypuklający przekazywanie sterowania między poszczególnymi modułami. Odnosi się on przede wszystkim do środowisk wieloprocesorowych. Jednak nie tylko. Przykładem są okienkowe systememy graficzne, np. system X-Window.
Języki programowania Podejście obiektowe Języki programowania Języki programowania mogą wspierać jednocześnie wiele paradygmatów programowania. Czyste języki obiektowe wspierają zasadniczo tylko paradygmat programowania obiektowego.
Języki programowania Podejście obiektowe Języki programowania Języki programowania mogą wspierać jednocześnie wiele paradygmatów programowania. Czyste języki obiektowe wspierają zasadniczo tylko paradygmat programowania obiektowego.
C++ Organizacja kursu Podejście obiektowe Języki programowania Język C++ jest językiem hybrydowym!
Po co to wszystko? Podejście obiektowe Języki programowania Dlaczego powstają nowe języki?
Podejście obiektowe Języki programowania Przestrzenie rozwiązania i przestrzenie problemu
Podejście obiektowe Języki programowania Przestrzenie rozwiązania i przestrzenie problemu
Podejście obiektowe Języki programowania Przestrzenie rozwiązania i przestrzenie problemu
Podejście obiektowe Języki programowania Przestrzenie rozwiązania i przestrzenie problemu
Podejście obiektowe Języki programowania Przestrzenie rozwiązania i przestrzenie problemu
Podejście obiektowe Języki programowania Przestrzenie rozwiązania i przestrzenie problemu
Podejście obiektowe Języki programowania Przestrzenie rozwiązania i przestrzenie problemu
Podejście obiektowe Języki programowania Co się dzieje, gdy zabraknie zgodności Terminarz Mars Climate Orbiter Data startu: 11 grudnia 1998 Osiągnięcie celu: wrzesień 1999 http://mars.jpl.nasa.gov/msp98/orbiter/moi.html Cel misji Badanie klimatu Marsa jego atmosfery i zmian na powierzchni. Miał również służyć jako satelita komunikacyjny na potrzeby programu Mars Surveyor 98 oraz Mars Polar Lander. Sonda Mars Climate Orbiter za bardzo zbliżyła się do Marsa i weszła w górne warstwy jego atmosfery, co skutkowało jej zniszczeniem. Bezpośrednią przyczyną okazało się przyjęcie złych jednostek. Oprogramowanie komputera pokładowego generowało dane w jednostkach imperialnych zamiast w jednostkach SI. To, że mają to być jednostki SI było uzgodnione w kontrakcie między NASA i firmą Lockheed producentem sondy.
Zastanówmy się... Podejście obiektowe Języki programowania Czy C++ jest lepszym językiem niż C?
Podejście obiektowe Języki programowania Przestrzeń rozwiązana i przestrzeń problemu
Podejście obiektowe Języki programowania Przestrzeń rozwiązana i przestrzeń problemu
Podejście obiektowe Języki programowania Przestrzeń rozwiązana i przestrzeń problemu
Podejście obiektowe Języki programowania Przestrzeń rozwiązana i przestrzeń problemu
Podejście obiektowe Języki programowania Przestrzeń rozwiązana i przestrzeń problemu
Konkluzja Organizacja kursu Podejście obiektowe Języki programowania Ani język C ani też C++ nie jest ani generalnie gorszy ani też generalnie lepszy. Ocena języka zależy od problemu, dla którego chcemy stworzyć model implementacji rozwiązania (program komputerowy). Dopiero w tym kontekście można uzasadniać wybór języka programowania. Dotyczy to również wszystkich innych języków programowania.
C++ nie jest nadzbiorem C Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++ Deklaracja stałych. Zachowanie zgodności wymaga jawnego dowiązania. ANSI C: const int Zm=23; extern const int Zm=23; ANSI/ISO C++: const int Zm=23; static const int Zm=23; Rozmiary stałych znakowych: ANSI C: sizeof ( a ) sizeof (int) ANSI/ISO C++: sizeof ( a ) sizeof (char) Niezadeklarowane funkcje: ANSI C: przyjmowane jest automatycznie int fun(int,...). ANSI/ISO C++: jest to niedopuszczalne. Deklaracja extern int fun(): ANSI C: równoważna extern int fun(...). ANSI/ISO C++: extern int fun(void).
C++ nie jest nadzbiorem C Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++ Deklaracja stałych. Zachowanie zgodności wymaga jawnego dowiązania. ANSI C: const int Zm=23; extern const int Zm=23; ANSI/ISO C++: const int Zm=23; static const int Zm=23; Rozmiary stałych znakowych: ANSI C: sizeof ( a ) sizeof (int) ANSI/ISO C++: sizeof ( a ) sizeof (char) Niezadeklarowane funkcje: ANSI C: przyjmowane jest automatycznie int fun(int,...). ANSI/ISO C++: jest to niedopuszczalne. Deklaracja extern int fun(): ANSI C: równoważna extern int fun(...). ANSI/ISO C++: extern int fun(void).
C++ nie jest nadzbiorem C Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++ Deklaracja stałych. Zachowanie zgodności wymaga jawnego dowiązania. ANSI C: const int Zm=23; extern const int Zm=23; ANSI/ISO C++: const int Zm=23; static const int Zm=23; Rozmiary stałych znakowych: ANSI C: sizeof ( a ) sizeof (int) ANSI/ISO C++: sizeof ( a ) sizeof (char) Niezadeklarowane funkcje: ANSI C: przyjmowane jest automatycznie int fun(int,...). ANSI/ISO C++: jest to niedopuszczalne. Deklaracja extern int fun(): ANSI C: równoważna extern int fun(...). ANSI/ISO C++: extern int fun(void).
C++ nie jest nadzbiorem C Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++ Deklaracja stałych. Zachowanie zgodności wymaga jawnego dowiązania. ANSI C: const int Zm=23; extern const int Zm=23; ANSI/ISO C++: const int Zm=23; static const int Zm=23; Rozmiary stałych znakowych: ANSI C: sizeof ( a ) sizeof (int) ANSI/ISO C++: sizeof ( a ) sizeof (char) Niezadeklarowane funkcje: ANSI C: przyjmowane jest automatycznie int fun(int,...). ANSI/ISO C++: jest to niedopuszczalne. Deklaracja extern int fun(): ANSI C: równoważna extern int fun(...). ANSI/ISO C++: extern int fun(void).
Wyświetlenie prostego komunikatu Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++ Język C #include <stdio.h> Język C++ #include <iostream> int main( ) printf( Hejka!!!\n ); return 0; int main( ) std::cout << Hejka!!!\n ; Funkcja main w języku C++ domyślnie zwraca wartość 0. Operacje wyjścia są realizowane na obiekcie cout z wykorzystaniem przeciążenia operatora lewostronnego przesunięcia bitowego <<
Wyświetlenie prostego komunikatu Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++ Język C #include <stdio.h> Język C++ #include <iostream> int main( ) printf( Hejka!!!\n ); return 0; int main( ) std::cout << Hejka!!! << std::endl; Funkcja main w języku C++ domyślnie zwraca wartość 0. Operacje wyjścia są realizowane na obiekcie cout z wykorzystaniem przeciążenia operatora lewostronnego przesunięcia bitowego <<
Wyświetlenie prostego komunikatu Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++ Język C #include <stdio.h> int main( ) printf( Hejka!!!\n ); return 0; Język C++ #include <iostream> using namespace std; int main( ) cout << Hejka!!! << endl; Użycie dyrektyw using namespace pozwala pominąć przedrostek przestrzeni nazw std
Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++ Odpowiedniość plików nagłówkowych dla C i C++ <math.h> <stdio.h> <ctype.h> <stdlib.h> <string.h>
Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++ Odpowiedniość plików nagłówkowych dla C i C++ <math.h> <cmath> <stdio.h> <ctype.h> <stdlib.h> <string.h>
Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka 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>
Rozszerzenia plików C++ Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++ Nie ma jednej ustalonej konwencji....
Rozszerzenia plików C++ Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++.H.C Najczęściej spotykane są:...
Rozszerzenia plików C++ Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++.H.C.hh.cc Najczęściej spotykane są:..
Rozszerzenia plików C++ Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++.H.C.hh.cc.hpp.cpp Najczęściej spotykane są:.
Rozszerzenia plików C++ Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++.H.C.hh.cc.hpp.cpp.hxx.cxx Najczęściej spotykane są:
Rozszerzenia plików C++ Kilka przykładowych różnic Różnice w zapisie podstawowych elementów programu Pliki nagłówkowe funkcji z języka C Konwencje nazw plików źródłowych dla języka C++.H.C.hh.cc.hpp.cpp.hxx.cxx Można również stosować konwencje mieszane.
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol Dodaj( Symbol y, Symbol x )??? int main( ) Symbol wynik = Dodaj(y, x); y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a...
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol Dodaj( Symbol y, Symbol x )??? int main( ) Symbol wynik = Dodaj(y, x); y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b =?...
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol Dodaj( Symbol y, Symbol x )??? int main( ) Symbol wynik = Dodaj(y, x); y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b =?..
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol Dodaj( Symbol y, Symbol x )??? int main( ) Symbol wynik = Dodaj(y, x); y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b =?.
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol Dodaj( Symbol y, Symbol x )??? int main( ) Symbol wynik = Dodaj(y, x); y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol Dodaj( Symbol y, Symbol x )??? int main( ) Symbol wynik = Dodaj(y, x); y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol Dodaj( Symbol y, Symbol x )??? int main( ) Symbol wynik = Dodaj(y, x); y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol Dodaj( Symbol y, Symbol x )??? int main( ) Symbol wynik = Dodaj(y, x); y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol Dodaj( Symbol y, Symbol x )??? int main( ) Symbol wynik = Dodaj(y, x); y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol Dodaj( Symbol y, Symbol x )??? int main( ) Symbol wynik = Dodaj(y, x); y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol Dodaj( Symbol y, Symbol x ) return TabliczkaDzialania[y][x]; int main( ) Symbol wynik = Dodaj(y, x); y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol operator + ( Symbol y, Symbol x ) return TabliczkaDzialania[y][x]; int main( ) Symbol wynik =???(y, x); y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol operator + ( Symbol y, Symbol x ) return TabliczkaDzialania[y][x]; int main( ) Symbol y = a, x = b, wynik; wynik = operator + (y, x); Tabliczka działania + e a b e e a b a a b e b b e a a + b = e
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol operator + ( Symbol y, Symbol x ) return TabliczkaDzialania[y][x]; int main( ) Symbol wynik = y + x; y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol operator + ( Symbol y, Symbol x ) return TabliczkaDzialania[y][x]; Czy są jakieś ograniczenia na int main( ) Symbol wynik = y + x; definiowanie funkcji operatorowych? y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e
Arytmetyka symboli Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ; Symbol TabliczkaDzialania[3][3] = e, a, b, a, b, e, b, e, a ; Symbol operator + ( Symbol y, Symbol x ) return TabliczkaDzialania[y][x]; Tabliczka działania Nie możemy definiować funkcji operatorowych. gdy ich wszystkie parametry są typów wbudowanych takich jak float, int, itd. np. + e a b int int main( operator ) + (int arg1, float arg2) e e a b a a b e Symbol y = a, x = b, wynik;... b b e a wynik = y + x; a + b = e Dla tych typów definicje tych operacji są już wbudowane w kompilator.
To samo na kilka sposobów Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e...
To samo na kilka sposobów Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol wynik = Dodaj(y, x); y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e...
To samo na kilka sposobów Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol y = a, x = b, wynik; wynik = Dodaj(y, x); wynik = operator+ (y, x); Tabliczka działania + e a b e e a b a a b e b b e a a + b = e..
To samo na kilka sposobów Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol y = a, x = b, wynik; wynik = Dodaj(y, x); wynik = operator+ (y, x); wynik = y + x; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e.
To samo na kilka sposobów Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol y = a, x = b, wynik; wynik = Dodaj(y, x); wynik = operator+ (y, x); wynik = y + x; Tabliczka działania + e a b e e a b a a b e b b e a a + b = e.
Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji Łączność działania porządek wykonywania operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b + a =?...
Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji Łączność działania porządek wykonywania operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol wynik = y + x + y; y = a, x = b, wynik; Tabliczka działania + e a b e e a b a a b e b b e a a + b + a =?...
Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji Łączność działania porządek wykonywania operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol y = a, x = b, wynik; wynik = (y + x) + y; Tabliczka działania + e a b e e a b a a b e b b e a a + b + a =?..
Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji Łączność działania porządek wykonywania operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol y = a, x = b, wynik; wynik = (y + x) + y; wynik = operator+ (operator+ (y,x), y ); Tabliczka działania + e a b e e a b a a b e b b e a a + b + a =?.
Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji Łączność działania porządek wykonywania operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol y = a, x = b, wynik; wynik = (y + x) + y; wynik = operator+ (operator+ (y,x), y ); wynik = Dodaj(Dodaj(x, y), y); Tabliczka działania + e a b e e a b a a b e b b e a a + b + a =?.
Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji Jawna zmiana porządku wykonywanych operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol y = a, x = b, wynik; wynik = y + (x + y); Tabliczka działania + e a b e e a b a a b e b b e a a + (b + a) =?...
Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji Jawna zmiana porządku wykonywanych operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol y = a, x = b, wynik; wynik = y + (x + y); wynik = operator+ (y, operator+ (x,y) ); Tabliczka działania + e a b e e a b a a b e b b e a a + (b + a) =?...
Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji Jawna zmiana porządku wykonywanych operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol y = a, x = b, wynik; wynik = y + (x + y); wynik = operator+ (y, operator+ (x,y) ); wynik = Dodaj(y, Dodaj(x, y) ); Tabliczka działania + e a b e e a b a a b e b b e a a + (b + a) =?..
Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji Jawna zmiana porządku wykonywanych operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol y = a, x = b, wynik; wynik = y + (x + y); wynik = operator+ (y, operator+ (x,y) ); wynik = Dodaj(y, Dodaj(x, y) ); Tabliczka działania + e a b e e a b a a b e b b e a a + (b + a) =?.
Operatory jako funkcje Łączność operatorów i porządek wykonywania operacji Jawna zmiana porządku wykonywanych operacji enum Symbol e, a, b ;... Symbol Dodaj( Symbol x, Symbol y ); Symbol operator + ( Symbol x, Symbol y );... int main( ) Symbol y = a, x = b, wynik; wynik = y + (x + y); wynik = operator+ (y, operator+ (x,y) ); wynik = Dodaj(y, Dodaj(x, y) ); Tabliczka działania + e a b e e a b a a b e b b e a a + (b + a) =?.