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

Podobne dokumenty