2016-11-05 6 views
3

Ich habe eine static const std::vector<SomeType> Feld in meiner Klasse. Ich habe zwei private Methoden, die dieses Feld (Suchmethoden) verwendet. Sie verwenden keine anderen Mitglieder meiner Klasse. Sollten sie als static oder normale Methoden definiert werden?statische Methode oder nicht-statische Methode mit statischen Feld

Was sollte ich bevorzugen? Was sind Vorteile/Nachteile?

Antwort

3

Methoden, die nur statische Elemente referenzieren, sollten generell als statisch definiert werden. Auf diese Weise können Sie auf diese Methoden zugreifen, ohne eine Instanz einer Klasse zu erstellen, und Sie können auch auf diese aus einem statischen Kontext (z. B. von einer Nichtmitgliedsfunktion) zugreifen.

Die einzige Ausnahme von dieser Regel ist, wenn Sie diesen Zugriff von einer virtuellen Memberfunktion aus vornehmen müssen. In diesem Fall haben Sie keine Möglichkeit, Ihre Funktion statisch zu machen, da statische Funktionen virtuelle Funktionen nicht überschreiben können.

+0

Der Teil, der 'weil' beginnt, ist ein * non sequitur *. Ob statische Methoden überschrieben werden können, hat nichts damit zu tun, ob man sie von virtuellen Methoden aus aufrufen kann. – EJP

+0

@EJP Ich habe nicht gesagt, dass statische Memberfunktionen nicht überschrieben werden können, alles was ich sage ist, dass statische Memberfunktionen virtuelle Funktionen nicht von der Basisklasse überschreiben können. Mit anderen Worten, wenn Sie eine Funktion als Überschreibung für eine virtuelle Basisklassenfunktion schreiben, müssen Sie sie auch dann statisch machen, wenn sie nur auf statische Elemente zugreift. – dasblinkenlight

Verwandte Themen