2010-03-30 17 views
14

Patrzę na funkcji członkafunkcje statyczne vs const funkcji

int funct(int x) const; 

I zastanawiam się, czy

static int funct(int x); 

będzie lepiej.

Jeśli funkcja składowa nie używa żadnej z zmiennych składowych, powinna być statyczna. Czy są jakieś rzeczy, które by to zniechęciły?

+0

Mój collog sugerował, że droga konstu pozwala na polimorfizm. To jest interesujące. Myśli? – baash05

+0

Dlaczego to jest Wiki społeczności? – Uri

+0

Ponieważ tak naprawdę nie ma odpowiedzi. (poza tym, który zaproponował mój partner) i nie lubię pytań o ocenę. W przeszłości techniczne | szczegółowe pytania były stracone. Nie zahudzę z powodu moich osobistych punktów, ale czułem się osobiście unieważniony. Jeśli zapytam T | S | A, przegrywam. Jeśli zapytam "co jest twoją ulubienicą ...", zyskuję. Moje zrozumienie to wiki społeczności pozostawia moje punkty w spokoju. – baash05

Odpowiedz

18

Zakładając, że jest to C++, funkcja zadeklarowana jako const wskazuje, że nie zamierza zmieniać elementów danych w instancji, na którą jest wywoływana, tj. W tym wskaźniku. Ponieważ istnieją sposoby, aby tego uniknąć, nie jest to gwarancja, a jedynie deklaracja.

Funkcja statyczna nie działa na określonej instancji i dlatego nie przyjmuje "tego" wskaźnika. Tak więc jest "const" w bardzo naiwny sposób.

Jeśli twoja metoda nie musi być powiązana z konkretną instancją, ma sens, aby stała się statyczna.

Jednakże, jeśli twoja metoda jest polimorficzna - to znaczy, że podajesz inną implementację w oparciu o instancję obiektu, na który jest wywoływana, to nie może być statyczna, ponieważ zależy od konkretnej instancji.

+0

Tak. Rozmawiałem z moimi współpracownikami i doszliśmy do tej samej myśli. Dzięki. – baash05

6

Jeśli funkcja składowa nie używa żadnej z zmiennych składowych, często warto zadać pytanie:
"Czy musi to być funkcja członkowska?"