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!
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
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
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.
Um dafür ein Gefühl zu bekommen ist es ganz nützlich sich mal den Aufbau von oft verwendeten Klassenbibliotheken anzuschauen.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.