Forum: PC-Programmierung C++ Wann Methoden static, wann nicht?


von Milhouse van Hauten (Gast)


Lesenswert?

Hallo zusammen,

mich treibt um, wann man Methoden static macht und wann nicht.
Wenn sie nicht static sind, landen sie doch bei jeder Objektallokierung
auf dem Heap? Dann baut man sich den Arbeitsspeicher zu hauf mit der 
selben
Logik voll. Warum sollte man das tun?

Wenn Methoden static sind, ist man ja im Grunde recht nah an dem Ansatz 
"mit Funktionen auf Strukturen zu arbeiten"?

viele Grüße!

von Random .. (thorstendb) Benutzerseite


Lesenswert?

z.B. für eine Klasse Utils, die selbst nicht instantiiert wird, man aber 
trotzdem die Kapselung haben möchte.

unsigned int num = Utils::ConvertNumber(std::string numStr);

: Bearbeitet durch User
von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Milhouse van Hauten schrieb:

> Wenn sie nicht static sind, landen sie doch bei jeder Objektallokierung
> auf dem Heap?

Nein, das ist leider "Blödsinn" ;-) Eine "normale" member function hat 
den this pointer als unsichtbaren Parameter, eine statische member 
function nicht. Das ist der einzige Unterschied.

Du verwendest also eine statische Funktion, wenn Du keine Instanz der 
Klasse hast, mit der Du die Funktion aufrufen kannst. Typische Anwendung 
wäre z.B. eine factory Funktion, die dir eine Instanz erzeugen soll.

mfg Torsten

von Der Andere (Gast)


Lesenswert?

Milhouse van Hauten schrieb:
> Wenn sie nicht static sind, landen sie doch bei jeder Objektallokierung
> auf dem Heap?

Nein, Code existiert nur einmal, egal wie oft eine Klasse instanziiert 
wird. Nur nichtstatische Daten werden pro Objekt angelegt.

Milhouse van Hauten schrieb:
> wann man Methoden static macht und wann nicht.

Das ist ganz einfach. Immer dann, wenn man den Code unabhängig von einem 
Objekt braucht, bzw dafür nicht extra ein Objekt anlegen will und der 
Code keine (nichtstatische9 Objektvariablen ändert.
Das können z.B. Methoden in Hilfsklassen sein, oder auch 
Factory-Methoden um sich überhaupt Objekte der Klasse zu erzeugen.

von Der Andere (Gast)


Lesenswert?

Um dafür ein Gefühl zu bekommen ist es ganz nützlich sich mal den Aufbau 
von oft verwendeten Klassenbibliotheken anzuschauen.

von Eric B. (beric)


Lesenswert?

Random .. schrieb:
> z.B. für eine Klasse Utils, die selbst nicht instantiiert wird, man aber
> trotzdem die Kapselung haben möchte.

Dafür gibt es namespaces.

von Rolf M. (rmagnus)


Lesenswert?

Eric B. schrieb:
> Random .. schrieb:
>> z.B. für eine Klasse Utils, die selbst nicht instantiiert wird, man aber
>> trotzdem die Kapselung haben möchte.
>
> Dafür gibt es namespaces.

Ja, solche "Utility"-Klassen sind eher eine Krücke, die man in C++ 
glücklicherweise nicht braucht.

von René H. (Gast)


Lesenswert?

static Methoden in C++ sind Klassenmethoden. Das bedeutet, dass man sie 
auch ohne Instanzierung der Klasse aufrufen kann.

Früher würden sie in einigen Design Patterns verwendet (z.B. Singleton). 
Heute ist das eher verpönt.

Grüsse,
René

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.