Wartosci domyslne i przeciazenia
Transkrypt
Wartosci domyslne i przeciazenia
Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne i przeciążenia Bogdan Kreczmer [email protected] Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Programowanie obiektowe c Copyright°2010 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 Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i 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 Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów 1 Rozszerzenia C++ względem C Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod 2 Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Cel Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol: Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Cel Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol: Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Cel Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol: Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Cel Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol: Ogólna postać równania: y = ax 2 + b Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Implementacja float Parabola(float x, float a, float b) { return a∗x∗x+b; } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Implementacja float Parabola(float x, float a, float b) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x,1,0); Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Definiowanie wartości domyślnych float Parabola(float x, float a, float b = 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x,1,0); Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a, float b = 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x,1); Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a, float b= 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x,1); // ⇒ Parabola(x,1,0) Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x,1); Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x); Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x); // ⇒ Parabola(x,1,0) Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x); Co zrobić jeśli chcemy aby a = 2? Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x,2); Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x,2); // ⇒ Parabola(x,2,0) Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x,2); A jeśli ma być b = 5? Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x,2,5); Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x,2,5); A jeśli chcemy aby a = 1 i b = 5? Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x,5); A jeśli chcemy aby a = 1 i b = 5? Programowanie obiektowe Czy można tak? Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x, ,5); A jeśli chcemy aby a = 1 i b = 5? Programowanie obiektowe A może tak? Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) { return a∗x∗x+b; } int main() { float y, x=5; } y = Parabola(x,1,5); Jeśli chcemy zmodyfikować wartość jednego z parametrów domyślnych, to musimy podać wartości wszystkich parametrów, aż do miejsca, na którym występuje zmodyfikowana wartość. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) Programowanie obiektowe Wartości domyślne i przeciążenia ..... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } Programowanie obiektowe Wartości domyślne i przeciążenia .... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } int main( ) { PokazOdleglosc(1, 9.81, ”cm”); } Programowanie obiektowe Wartości domyślne i przeciążenia ... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } int main( ) { PokazOdleglosc(1, ”cm”); } Czy można to skrócić korzystając z tego, że zadeklarowane wartości domyślne dla a i Jedn są różne od Jedn? Programowanie obiektowe Wartości domyślne i przeciążenia .. Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } int main( ) { h h hh ( ( hh (( hh ( (( h hh ( ( (( h ( ( PokazOdleglosc(1, ”cm”); h h ( ( h h hh ( ( (( h hh ( ( h ( ( } Tego typu wywołanie jest niepoprawne. To że parametry są różnego typu nie ma żadnego znaczenia. Programowanie obiektowe Wartości domyślne i przeciążenia . Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } int main( ) { PokazOdleglosc(1, 9.81, ”cm”); } Jedyną poprawną formą jest wypisanie wszystkich wartości parametrów pośrednich, niezależnie od tego czy są one zgodne z wartościami domyślnymi, czy też nie. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } int main( ) { PokazOdleglosc(1); } Powróćmy do wywołania funkcji korzystającego z wartości domyślnych Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji int main( ) { PokazOdleglosc(1); } void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } Programowanie obiektowe Wartości domyślne i przeciążenia .... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji int main( ) { PokazOdleglosc(1); } void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } Programowanie obiektowe Wartości domyślne i przeciążenia ... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji int main( ) { PokazOdleglosc(1); } void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } Wywołanie funkcji przed jej definicją jest możliwe wtedy i tylko wtedy, gdy wcześniej wystąpi nagłówek zapowiedzi definicji. Programowanie obiektowe Wartości domyślne i przeciążenia .. Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ); int main( ) { PokazOdleglosc(1); } void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } To też nie jest dobrze. Programowanie obiektowe Wartości domyślne i przeciążenia . Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ); int main( ) { PokazOdleglosc(1); } P ³ ³ P³ P³ void PokazOdleglosc( float t, float a =P 9.81 , const char∗ Jedn =³ ”m” ³ P P) { cout << a∗pow(t,2)/2 << Jedn << endl; } Jeżeli w jednostce translacyjnej występuje zapowiedź definicji z parametrami domyślnymi oraz sama definicja, to wartości tych parametrów mogą być zadeklarowane tylko raz w nagłówku jej zapowiedzi. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ); int main( ) { PokazOdleglosc(1); } void PokazOdleglosc( float t, float a, const char∗ Jedn ) { cout << a∗pow(t,2)/2 << Jedn << endl; } Teraz jest już dobrze. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ); int main( ) { PokazOdleglosc(1); } void PokazOdleglosc( float t, float a, const char∗ Jedn ) { cout << a∗pow(t,2)/2 << Jedn << endl; } Programowanie obiektowe Wartości domyślne i przeciążenia ........ Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji prog.cpp void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ); int main( ) { PokazOdleglosc(1); } modul.cpp void PokazOdleglosc( float t, float a, const char∗ Jedn ) { cout << a∗pow(t,2)/2 << Jedn << endl; } Programowanie obiektowe Wartości domyślne i przeciążenia ....... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji prog.cpp void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ); int main( ) { PokazOdleglosc(1); } modul.cpp void PokazOdleglosc( float t, float a, const char∗ Jedn ) { cout << a∗pow(t,2)/2 << Jedn << endl; } Jeżeli występuje więcej jednostek translacyjnych, to ta sama funkcja może być różnie traktowana w każdej z nich. Programowanie obiektowe Wartości domyślne i przeciążenia ...... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji prog.cpp void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ); int main( ) { PokazOdleglosc(1); } modul.cpp void PokazOdleglosc( float t, float a = 981, const char∗ Jedn = ”cm” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } Wartości parametrów domyślnych mogą być różne w każdej z nich lub w ogóle mogą nie występować. To nie jest jednak dobre rozwiązanie. Programowanie obiektowe Wartości domyślne i przeciążenia ..... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji prog.cpp void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ); int main( ) { PokazOdleglosc(1); } modul.cpp void PokazOdleglosc( float t, float a = 981, const char∗ Jedn = ”cm” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } Wartości parametrów domyślnych mogą być różne w każdej z nich lub w ogóle mogą nie występować. To nie jest jednak dobre rozwiązanie. Programowanie obiektowe Wartości domyślne i przeciążenia .... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji modul.hpp void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ); prog.cpp int main( ) { PokazOdleglosc(1); } modul.cpp void PokazOdleglosc( float t, float a = 981, const char∗ Jedn = ”cm” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } Lepszym rozwiązaniem jest wydzielenie pliku nagłówkowe. Programowanie obiektowe Wartości domyślne i przeciążenia ... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji modul.hpp void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ); prog.cpp #include ”modul.hpp” int main( ) { PokazOdleglosc(1); } modul.cpp void PokazOdleglosc( float t, float a = 981, const char∗ Jedn = ”cm” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } Programowanie obiektowe Wartości domyślne i przeciążenia .. Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji modul.hpp void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ); prog.cpp #include ”modul.hpp” int main( ) { PokazOdleglosc(1); } #include ”modul.hpp” void PokazOdleglosc( float t, float a, const char∗ Jedn ) { cout << a∗pow(t,2)/2 << Jedn << endl; } modul.cpp Dodanie pliku nagłówkowego zapobiega niejednoznacznemu traktowania parametrów domyślnych. Programowanie obiektowe Wartości domyślne i przeciążenia . Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Zapowiedź definicji funkcji modul.hpp void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ); prog.cpp #include ”modul.hpp” int main( ) { PokazOdleglosc(1); } #include ”modul.hpp” void PokazOdleglosc( float t, float a, const char∗ Jedn ) { cout << a∗pow(t,2)/2 << Jedn << endl; } modul.cpp Nie jest to jednak jedyny niezbędny plik nagłówkowy. Programowanie obiektowe Wartości domyślne i przeciążenia . Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } int main( ) { PokazOdleglosc(1); } Wróćmy do konstrukcji jednomodułowej. Programowanie obiektowe Wartości domyślne i przeciążenia .. Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } int main( ) { PokazOdleglosc(1); } Aby było wszystko dobrze w jednostce translacyjnej muszą być dołączone pliki nagłówkowe zawierające definicje lub zapowiedzi definicji wykorzystywanych funkcji i struktur danych. Programowanie obiektowe Wartości domyślne i przeciążenia . Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } int main( ) { PokazOdleglosc(1); } W tym przypadku dotyczy to obiektu cout, manipulatora endl oraz funkcji pow. A jak to wyglądało by w C? Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } int main( ) { PokazOdleglosc(1); } W tym przypadku dotyczy to obiektu cout, manipulatora endl oraz funkcji pow. A jak to wyglądało by w C? Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe dla programu w C void PokazOdleglosc( float t, float a, const char∗ Jedn ) { printf(”%f%s\n”, a∗pow(t,2)/2, Jedn ); } int main( ) { PokazOdleglosc(1); } Programowanie obiektowe Wartości domyślne i przeciążenia .... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe dla programu w C void PokazOdleglosc( float t, float a, const char∗ Jedn ) { printf(”%f%s\n”, a∗pow(t,2)/2, Jedn ); } int main( ) { PokazOdleglosc(1); } Pliki nagłówkowe potrzebne są dla funkcji printf oraz pow. Programowanie obiektowe Wartości domyślne i przeciążenia ... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe dla programu w C #include <stdio.h> #include <math.h> void PokazOdleglosc( float t, float a, const char∗ Jedn ) { printf(”%f%s\n”, a∗pow(t,2)/2, Jedn ); } int main( ) { PokazOdleglosc(1); } Programowanie obiektowe Wartości domyślne i przeciążenia .. Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe dla programu w C #include <stdio.h> #include <math.h> void PokazOdleglosc( float t, float a, const char∗ Jedn ) { printf(”%f%s\n”, a∗pow(t,2)/2, Jedn ); } int main( ) { PokazOdleglosc(1); } W stdio.h znajduje się prototyp funkcji printf. Programowanie obiektowe Wartości domyślne i przeciążenia . Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe dla programu w C #include <stdio.h> #include <math.h> void PokazOdleglosc( float t, float a, const char∗ Jedn ) { printf(”%f%s\n”, a∗pow(t,2)/2, Jedn ); } int main( ) { PokazOdleglosc(1); } Natomiast w math.h znajduje się prototyp funkcji pow. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe dla programu w C #include <stdio.h> #include <math.h> void PokazOdleglosc( float t, float a, const char∗ Jedn ) { printf(”%f%s\n”, a∗pow(t,2)/2, Jedn ); } int main( ) { PokazOdleglosc(1); } A jak to będzie w C++? Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe dla programu w C++ void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } int main( ) { PokazOdleglosc(1); } Programowanie obiektowe Wartości domyślne i przeciążenia .. Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe dla programu w C++ #include <iostream> #include <cmath> using namespace std; void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } int main( ) { PokazOdleglosc(1); } Programowanie obiektowe Wartości domyślne i przeciążenia . Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe dla programu w C++ #include <iostream> #include <cmath> using namespace std; void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } int main( ) { PokazOdleglosc(1); } W istream znajduje się zapowiedź deklaracji obiektu cout i prototyp manipulatora endl. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Pliki nagłówkowe dla programu w C++ #include <iostream> #include <cmath> using namespace std; void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } int main( ) { PokazOdleglosc(1); } Natomiast w cmath znajduje prototyp funkcji pow. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Odpowiedniość plików nagłówkowych dla C i C++ <math.h> <stdio.h> <ctype.h> <stdlib.h> <string.h> Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Odpowiedniość plików nagłówkowych dla C i C++ <math.h> −→ <cmath> <stdio.h> <ctype.h> <stdlib.h> <string.h> Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Odpowiedniość plików nagłówkowych dla C i C++ <math.h> −→ <cmath> <stdio.h> −→ <cstdio> <ctype.h> <stdlib.h> <string.h> Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Odpowiedniość plików nagłówkowych dla C i C++ <math.h> −→ <cmath> <stdio.h> −→ <cstdio> <ctype.h> −→ <cctype> <stdlib.h> <string.h> Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Odpowiedniość plików nagłówkowych dla C i C++ <math.h> −→ <cmath> <stdio.h> −→ <cstdio> <ctype.h> −→ <cctype> <stdlib.h> −→ <cstdlib> <string.h> Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Odpowiedniość plików nagłówkowych dla C i C++ <math.h> −→ <cmath> <stdio.h> −→ <cstdio> <ctype.h> −→ <cctype> <stdlib.h> −→ <cstdlib> <string.h> −→ <cstring> Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Domyślne wartości parametrów dla metod class LZespolona { public : float re, im; void Zmien(float r, float i) { re = r; im = im; } }; int main( ) { LZespolona Z.re = 2.1; Z; Z.im = 0; } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Domyślne wartości parametrów dla metod class LZespolona { public : float re, im; void Zmien(float r, float i) { re = r; im = im; } }; int main( ) { LZespolona Z; Z.Zmien(2.1, 0); } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Domyślne wartości parametrów dla metod class LZespolona { public : float re, im; void Zmien(float r, float i) { re = r; im = im; } }; int main( ) { LZespolona Z; Z.Zmien(2.1); } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Domyślne wartości parametrów dla metod class LZespolona { public : float re, im; void Zmien(float r, float i = 0) { re = r; im = im; } }; int main( ) { LZespolona Z; Z.Zmien(2.1); } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Wartości domyślne Pliki nagłówkowe Wartości domyślne parametrów metod Definiowanie metody poza ciałem klasy class LZespolona { public : float re, im; void Zmien(float r, float i = 0); }; void LZespolona::Zmien(float r, float i) { re = r; im = i; } int main( ) { LZespolona Z; Z.Zmien(2.1); } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Nieszczęsne słowo: overload Przeładowanie czy przeciążenie? Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Nieszczęsne słowo: overload Przeładowanie czy przeciążenie? Przeładowanie — Jak to rozumieć? Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Nieszczęsne słowo: overload Przeładowanie czy przeciążenie? Przeładowanie — (1) do istniejącego ładunku dodajemy nowy przekraczając dopuszczalną pojemność. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod 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 Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Nieszczęsne słowo: overload Przeładowanie czy przeciążenie? Przeciążenie — A to jak rozumić? Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod 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 Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod 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 nowinalny zakres. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Nieszczęsne słowo: overload Przeładowanie czy przeciążenie? Przeładowanie — (1) do istniejącego ładunku dodajemy nowy przekraczając dopuszczalną 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 nowinalny zakres. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod 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 Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod 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; Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod 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: \”” << Liczba << ”\”” } Programowanie obiektowe << endl; Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążanie funkcji Przykład: void Wyswietl( float Liczba ) { cout << ”Liczba: ” << Liczba } << endl; void Wyswietl( const char ∗ Napis ) { cout << ”Napis: \”” << Liczba << ”\”” } << endl; void main( ) { Wyswietl(123.14); Wyswietl(”Jak dobrze wstać skoro świt.”); } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążanie funkcji Przykład: void Wyswietl( float Liczba ) { cout << ”Liczba: ” << Liczba } << endl; void Wyswietl( const char ∗ Napis ) { cout << ”Napis: \”” << Liczba << ”\”” } << endl; void main( ) { Wyswietl(123.14); Wyswietl(”Jak dobrze wstać skoro świt.”); } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążanie funkcji Przykład: void Wyswietl( float Liczba ) { cout << ”Liczba: ” << Liczba } << endl; void Wyswietl( const char ∗ Napis ) { cout << ”Napis: \”” << Liczba << ”\”” } << endl; void main( ) { Wyswietl(123.14); Wyswietl(”Jak dobrze wstać skoro świt.”); } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążanie zamiast wartości domyślnych void PokazOdleglosc( float t, float a= 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } Programowanie obiektowe Wartości domyślne i przeciążenia ........ Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążanie zamiast wartości domyślnych void PokazOdleglosc( float t, float a= 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } void PokazOdleglosc( float t ) { cout << 9.81∗pow(t,2)/2 << ”m” } Programowanie obiektowe << endl; Wartości domyślne i przeciążenia ....... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążanie zamiast wartości domyślnych void PokazOdleglosc( float t, float a= 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } void PokazOdleglosc( float t ) { cout << 9.81∗pow(t,2)/2 << ”m” } << endl; Te dwie definicje funkcji prowadzą do niejednoznaczności. Dlaczego? Programowanie obiektowe Wartości domyślne i przeciążenia ...... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążanie zamiast wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } void PokazOdleglosc( float t ) { cout << 9.81∗pow(t,2)/2 << ”m” } << endl; Powstałą niejednoznaczność usuwamy rezygnując z wartości domyślnej dla parametru a. Programowanie obiektowe Wartości domyślne i przeciążenia ..... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążanie zamiast wartości domyślnych void PokazOdleglosc( float t, float a, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } void PokazOdleglosc( float t ) { cout << 9.81∗pow(t,2)/2 << ”m” } Programowanie obiektowe << endl; Wartości domyślne i przeciążenia .... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążanie zamiast wartości domyślnych void PokazOdleglosc( float t, float a, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } void PokazOdleglosc( float t ) { cout << 9.81∗pow(t,2)/2 << ”m” } Programowanie obiektowe << endl; Wartości domyślne i przeciążenia ... Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążanie zamiast wartości domyślnych void PokazOdleglosc( float t, float a, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } void PokazOdleglosc( float t, float a ) { cout << a∗pow(t,2)/2 << ”m” << endl; } void PokazOdleglosc( float t ) { cout << 9.81∗pow(t,2)/2 << ”m” } Programowanie obiektowe << endl; Wartości domyślne i przeciążenia .. Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążanie zamiast wartości domyślnych void PokazOdleglosc( float t, float a, const char∗ Jedn = ”m” ) { cout << a∗pow(t,2)/2 << Jedn << endl; } void PokazOdleglosc( float t, float a ) { cout << a∗pow(t,2)/2 << ”m” << endl; } void PokazOdleglosc( float t ) { cout << 9.81∗pow(t,2)/2 << ”m” } Programowanie obiektowe << endl; Wartości domyślne i przeciążenia . Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążanie zamiast wartości domyślnych void PokazOdleglosc( float t, float a, const char∗ Jedn ) { cout << a∗pow(t,2)/2 << Jedn << endl; } void PokazOdleglosc( float t, float a ) { cout << a∗pow(t,2)/2 << ”m” << endl; } void PokazOdleglosc( float t ) { cout << 9.81∗pow(t,2)/2 << ”m” } Programowanie obiektowe << endl; Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążanie zamiast wartości domyślnych void PokazOdleglosc( float t, float a, const char∗ Jedn ) { cout << a∗pow(t,2)/2 << Jedn << endl; } void PokazOdleglosc( float t, float a ) { cout << a∗pow(t,2)/2 << ”m” << endl; } void PokazOdleglosc( float t ) { cout << 9.81∗pow(t,2)/2 << ”m” << endl; } Przeciążanie zamiast stosowania wartości domyślnych nie jest dobrym pomysłem. Powielając kod niechcący można również powielać błędy. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Wciąż o przeciążaniu double ObliczDroge( float t, float a ) { return a∗pow(t,2)/2; } float ObliczDroge( float t, float V ) { return V∗t; } Czy to jest przeciążenie i dlaczego? Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Wciąż o przeciążaniu double ObliczDroge( float t, float a ) { return a∗pow(t,2)/2; } float ObliczDroge( float t, float V ) { return V∗t; } Przeciążanie jest realizowane tylko i wyłącznie względem listy parametrów i modyfikatora const, ale do tego dojdziemy później. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Wciąż o przeciążaniu double ObliczDroge( float t, float a ) { return a∗pow(t,2)/2; } float ObliczDroge( float t, float V ) { return V∗t; } Przeciążanie jest realizowane tylko i wyłącznie względem listy parametrów i modyfikatora const, ale do tego dojdziemy później. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Wciąż o przeciążaniu double ObliczDroge( float t, float a ) { return a∗pow(t,2)/2; } float ObliczDroge( double t, double V ) { return V∗t; } Teraz to już jest przeciążenie. Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Wciąż o przeciążaniu double ObliczDroge( float t, float a ) { return a∗pow(t,2)/2; } float ObliczDroge( double t, double V ) { return V∗t; } Niech będzie dane wywołanie: ObliczDroge(1, 1.2); Która z funkcji będzie wywołana? Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Wciąż o przeciążaniu double ObliczDroge( float t, float a ) { return a∗pow(t,2)/2; } float ObliczDroge( double t, double V ) { return V∗t; } Niech będzie dane wywołanie: ObliczDroge(1, 1); A teraz która z nich zostanie uruchomiona? Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążenie metody class LZespolona { public : float re, im; void Zmien(float r, float i = 0) { re = r; im = im; } }; int main( ) { LZespolona Z; Z.Zmien(2.1); } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążenie metody class LZespolona { public : float re, im; void Zmien(float r, float i) { re = r; im = im; } void Zmien(float r) { re = r; } }; int main( ) { LZespolona Z; Z.Zmien(2.1); } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążenie metody class LZespolona { public : float re, im; void Zmien(float r, float i) { re = r; im = im; } void Zmien(float r) { re = r; } }; int main( ) { LZespolona Z; Z.Zmien(2.1); } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążenie metody class LZespolona { public : float re, im; void Zmien(float r, float i) { re = r; im = im; } void Zmien(float r) { re = r; } }; int main( ) { LZespolona Z; Z.Zmien(2.1); } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążenie operatorów class LZespolona { public : float re, im; ... }; LZespolona operator ∗ (LZespolona const &Z1, LZespolona const &Z2) { ... } int main( ) { LZespolona Wynik, Z1, Z2; Wynik = Z1 * Z2; } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążenie operatorów class LZespolona { public : float re, im; ... }; LZespolona operator ∗ (LZespolona const &Z1, LZespolona const &Z2) { ... } LZespolona operator ∗ (LZespolona const &Z1, float L) { ... } int main( ) { LZespolona Wynik, Z1, Z2; Wynik = Z1 * Z2 * 3; } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążenie operatorów class LZespolona { public : float re, im; ... }; LZespolona operator ∗ (LZespolona const &Z1, LZespolona const &Z2) { ... } LZespolona operator ∗ (LZespolona const &Z1, float L) { ... } LZespolona operator ∗ (float L, LZespolona const &Z2) { ... } int main( ) { LZespolona Wynik, Z1, Z2; Wynik = 10.6 * Z1 * Z2* 3; } Programowanie obiektowe Wartości domyślne i przeciążenia Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążenie operatorów class LZespolona { public : float re, im; LZespolona operator ∗ (LZespolona const &Z2) { ... }; LZespolona operator ∗ (LZespolona const &Z1, float L) { ... } LZespolona operator ∗ (float L, LZespolona const &Z2) { ... } int main( ) { LZespolona Wynik, Z1, Z2; Wynik = 10.6 * Z1 * Z2* 3; } Programowanie obiektowe Wartości domyślne i przeciążenia } Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów Przeciążenia (przeładowanie) funkcji Przeciążenia (przeładowanie) metod Przeciążenie operatorów class LZespolona { public : float re, im; LZespolona operator ∗ (LZespolona const &Z2) const { LZespolona operator ∗ (float L) const { . . . } }; LZespolona operator ∗ (float L, LZespolona const &Z2) { ... } int main( ) { LZespolona Wynik, Z1, Z2; Wynik = 10.6 * Z1 * Z2* 3; } Programowanie obiektowe Wartości domyślne i przeciążenia ... } Rozszerzenia C++ względem C Przeciążenia funkcji, metod i operatorów To już koniec :(. Programowanie obiektowe Wartości domyślne i przeciążenia