Loteria typów
Wyobraźmy sobie, że piszemy zestaw metod czy funkcji różniących się typem parametru - ot, choćby tworzymy klasę komunikacyjną która ma metody Send biorące napis, liczbę etc. Albo piszemy klasę obsługującą komunikację z bazą danych i metody Bind do wiązania parametrów różnego typu. Albo... (każdy po chwili zastanowienia dorzuci pewnie z 10 przykładów).
Wyobraźmy sobie dalej, że wśród obsługiwanych typów bywają bool i string. Ciągnąc przykład z tą samą nazwą, wyobraźmy sobie że dostarczamy Bind(bool) i Bind(const string&).
Jeszcze dalej wyobraźmy sobie, iż ktoś łatwowierny pisze
Bind("ala ma kota");
czy też
Bind("");
Istotną informacją jest, że kompilatory wolą zrzutować takowy napis na bool niż na string! W obu wypadkach wywołane zostanie Bind(true)!
Wnioski:
- jeśli robimy gdzieś metody różniące się jedynie typem, to trzeba dostarczyć metodę o parametrze const char * (której treścią może być wywołanie metody od string'a - ale istnieć taka metoda musi);
- choć przeciążanie metod jest bardzo efektowne, bezpieczniejsze jest odróżnianie ich nazwą (BindBool, BindString itp).
- «Kilka wartościowych książek
- Nie używaj wyjątków w destruktorze»
- ↑C++ - sztuczki i niebezpieczeństwa