2010-03-30 20 views
14

Ich betrachte Mitglied FunktionStatische Funktionen vs konst Funktionen

int funct(int x) const; 

Und ich frage mich, ob

static int funct(int x); 

besser wäre.

Wenn eine Member-Funktion eine der Membervariablen sollte statisch sein verwenden nicht. Gibt es irgendwelche Dinge, die das entmutigen würden?

+0

A collogue von mir vorgeschlagen, dass der const Weg für Polymorphismus ermöglicht. Das ist interessant. Gedanken? – baash05

+0

Warum ist das ein Community-Wiki? – Uri

+0

Weil es nicht wirklich eine Antwort gibt. (abgesehen von dem, den mein Partner vorgeschlagen hat), und ich mag es nicht, wenn Fragen gestellt werden. In der Vergangenheit hat eine technische | ansprechbare Frage mich Punkte verloren. gebe ich einen Schrei über meine persönlichen Punkte nicht, aber ich fühlte mich persönlich für ungültig erklärt. Wenn ich ein T | S | A frage, verliere ich. Wenn ich ein "Was ist dein Liebling ..." frage, habe ich gewonnen. Mein Verständnis ist Gemeinschaft Wiki lässt meine Punkte in Ruhe. – baash05

Antwort

18

Dieses Unter der Annahme, C++, eine Funktion als const deklarierte zeigt an, dass es nicht an dem beabsichtigte Datenelement auf der Instanz ändern sie genannt wird, das heißt, die dieser Zeiger. Da es Möglichkeiten gibt, dies zu umgehen, handelt es sich nicht um eine Garantie, sondern lediglich um eine Erklärung.

eine statische Funktion arbeitet nicht auf eine bestimmte Instanz und damit nicht ein „dieses“ Zeiger nimmt. So ist es auf sehr naive Weise "const".

Wenn Ihre Methode muss nicht auf eine bestimmte Instanz gebunden zu sein, macht es Sinn, sie statisch zu machen.

Wenn Ihre Methode jedoch polymorph ist - das heißt, Sie stellen eine andere Implementierung basierend auf der Instanz des Objekts bereit, auf dem sie aufgerufen wird, kann sie nicht statisch sein, da sie von einer bestimmten Instanz abhängt.

+0

Ja. Ich sprach mit meinen Kollegen und wir kamen zu demselben Gedanken. Vielen Dank. – baash05

6

Wenn eine Elementfunktion keine Membervariablen verwendet, lohnt es sich oft, die Frage zu stellen:
"Muss dies überhaupt eine Elementfunktion sein?"