Poznaj C-t-t w pięć minut! 335
W C++ kilka różnych pod względem zawartości funkcji może nosić taką samą nazwę” - „ta właściwa” funkcja jest rozróżniana poprzez typy swoich parametrów wejściowych. Przykładowo, jeśli w pliku z programem są zdefiniowane dwie procedury: void p(chur* s) i void p(int k), to wówczas wywołanie pl 12). niechybnie będzie dotyczyć tej drugiej wersji.
Mechanizm „przeciążania” może być zastosowany bardzo skutecznie w powiązaniu z mechanizmami dziedziczenia. Załóżmy, żc nie podoba nam się funkcja pisz, dostępna w klasie C3 dzięki temu, że w procesie dziedziczenia „przeszła” ona z klasy Cl do ('3. /. drugiej zaś strony, podoba nam się nazwa pisz w tym sensie, że chcielibyśmy jej używać na obiektach klasy C, ale do innego celu. Uzupełniamy wówczas klasę C3 o następującą definicję1'1:
void C3::pisz() f
cout << "nowa wersja metoay pisz'\n";
)
U wynik użycia ob.Cl::pisz O : w main:
!i ** stara wersja metody 'pisz' : jc-ll **
II wynik użycia ob.piszti; w main:
li ** nowa wersja metody 'pi3z': z-20 **
Teraz instrukcja ob.piszf) wywoła nową metodę pisz (z klasy C3), gdybyśmy zaś koniecznie chcieli użyć starej wersji, to należy jawnie tego zażądać poprzez <>h.('l::pisz().
Nasz przykład zakłada kilka celowych niedomówień. Wynika to z tego, że problematyka dziedziczenia własności w C++ zawiera wiele niuansów, które mogłyby być nużące dla nieprzygotowanego odbiorcy. Tym niemniej, zaprezentowana powyżej wiedza jest już wystarczająca do tworzenia dość skomplikowanych aplikacji zorientowanych obiektowo. Inne mechanizmy, takie jak np. bardzo ważne funkcje wirtualne i tzw . klasy abstrakcyjne, trzeba już pozostawić wyspecjalizowanym publikacjom — zachęcam Czytelnika do lektury.
Taka cecha jest zwana przeciążaniem.
14 Ponadto należy dodać linię wtidpis~(): do sekcji publicznej klasy C3.