mehrere Objekte eines Klassentyps sollen sich eine dynamische Variable teilen.
-
Das prinzip von static in einer Klasse ist mir bekannt.
Ich kann eine beliebige Variable damit zur Kompilierzeit festlegen, und alle Objekte dieser Klasse greifen auf die selbe Variable zu.
- 100 objekte von typ X, aber nur 1x Variable im Speicher.ich würde gerne genau dieses verhalten habe, nur möchte ich die variable zur laufzeit ändern können. Aber wie?
-
Beschreibe, was du erreichen möchtest, nicht, wie du dir die technische Umsetzung denkst.
-
cl90 schrieb:
Das prinzip von static in einer Klasse ist mir bekannt.
Ich kann eine beliebige Variable damit zur Kompilierzeit festlegen, und alle Objekte dieser Klasse greifen auf die selbe Variable zu.
- 100 objekte von typ X, aber nur 1x Variable im Speicher.ich würde gerne genau dieses verhalten habe, nur möchte ich die variable zur laufzeit ändern können. Aber wie?
Du kannst doch zur Laufzeit eine static Variabel, über eine Methode oder direkt, ändern. Nur wenn sie noch dazu const ist, darfst du sie nur noch lesen.
-
Hier mal ein Beispiel von mir, ich hoffe ich habe alles richtig gemacht:
#include <iostream> using namespace std; class MyClass { public: static int var_; }; int MyClass::var_; int main() { MyClass my1, my2; my1.var_ = 42; cout << "my1.var_=" << my1.var_ << endl; cout << "my2.var_=" << my2.var_<< endl; my2.var_ = 23; cout << "my1.var_=" << my1.var_ << endl; cout << "my2.var_=" << my1.var_ << endl; return 0; }
-
Die statische Membervariable mit einer Instanz zu qualifizieren, sprich:
my1.var_zu schreiben, finde ich, ist unschön. Damit suggeriert man, dassvar_nicht-statisch ist. Also lieberMyClass::var_. Ich hoffe, du verstehst
-
Dann hätte ich mir my1 my2 sparen können und der Effekt, dass man sieht dass von beiden Instanzen der gleiche Speicher genutzt wird, wäre für den Arsch. Ich weiß aber was du meinst, auch wenn ich noch am Anfang bin.
-
Ich hab mit dem TE gesprochen. Und bitte entspann dich mal, der Effekt wäre nicht für den Arsch, weil man nach wie vor sieht, dass die Variable unabhängig von den Instanzen (wenn es welche gibt) existiert, und außerdem implizierst du (ungewollt), dass man immer eine Instanz braucht, um die Variable anzusprechen.
-
Hörst dich an wie meine Kinder, die sagen immer "chill mal", muss ich mal probieren^^ Ja hast Recht, man braucht keine Instanz. Man kann auch ohne Instanz per
MyClass::var_ = Xdrauf zugreifen.
-
Grasshopper schrieb:
Hörst dich an wie meine Kinder
Jo, und wenn Du erst mal ein paar Wochen hier dabei bist, dann merkst Du auch, wieso ...
-
Na, da bin ich ja mal gespannt. Ich hoffe ich halte es aus so lange C++ zu lernen, ohne ständig Spiele spielen zu müssen(siehe Signatur)^^
-
die klasse "leg" wird 6x erstellt. für 6 beine die ihre eigenen variablen haben, aber es soll bestimmte variablen geben die von allen beinen geteilt werden.
welche die statisch sind, und welche die ich nachträglich noch ändern will.class leg { public: leg(LPDIRECT3DDEVICE9& d3ddev, MeshData* lmesh); leg(LPDIRECT3DDEVICE9& d3ddev, MeshData* lmesh, float posx, float posy, float posz); ~leg(); void set_angle (int servo, float angle); void set_angle (float an1, float an2, float an3, float an4); float get_angle (int servo); void set_pos (float posx, float posy, float posz); float get_pos (int axis); float get_length (int part); float rad (float angle); void draw_leg(); private: void m_refresh_transform(); float m_angle[4]; float m_pos[3]; D3DXVECTOR3 m_posVec[5]; D3DXMATRIX m_matTransform[5]; // ab hier soll alles von allen klassen geteilt werden. // derzeitig werden die D3DXMATRIXen aber nicht geteilt. da ich sie nach dem erstellen noch ändern muss. static float m_length[4]; static float m_PI; D3DXMATRIX m_matRot90; D3DXMATRIX m_matUniSize; D3DXMATRIX m_matTransSO; D3DXMATRIX m_matTransVS; D3DXMATRIX m_matTransOS; D3DXMATRIX m_matTransUS; LPDIRECT3DDEVICE9 m_d3ddev; MeshData* m_lmesh; };
-
Du kannst dein Variablen in eine struct speichern und jeder Instanz von leg einen Zeiger auf diese Struktur geben. Einfacher wird es nicht.