Metody statyczne bywają mylące
Metodę statyczną można wywołać nie tylko przy pomocy notacji dwukropkowej, tj
Klasa::Metoda(...);
ale także na bazie dowolnego obiektu tej klasy:
Klasa k; // ... k.Metoda(...);
Bywa to niekiedy mylące. W implementacji klasy enkapsulującej informacje na temat daty - niech się nazywa OurDate - wystąpiły między innymi metoda void SetJulian(long d) (modyfikująca datę by wskazywała zadany dzień juliański) oraz metoda statyczna static OurDate Julian(long d) tworząca i zwracająca odpowiednio zainicjowany nowy obiekt (metoda statyczna wykorzystywana jako obejście w sytuacji, gdy konstruktora już nijak nie dawało się przeciążyć).
Jeden z kolegów pisał:
OurDate d; d.Julian(...);
i ... dziwił się, że d nie jest modyfikowane. Bo faktycznie, wyrażenie było już zbyt skomplikowane by kompilator ostrzegł, że nie ma ono znaczenia - a zignorowanie wyniku jest w pełni poprawne.
Nie pisałbym o tym (sprawa jest dość oczywista), gdyby nie fakt, że by to zauważyć musiałem wpatrywać się w odpowiedni fragment kodu całkiem długo.
Osobiście rekomenduję, by dla metod statycznych zawsze stosować notację dwukropkową.
- «Nie używaj funkcji isspace
- Microsoft + template + DLL = kłopoty»
- ↑C++ - sztuczki i niebezpieczeństwa