Hallo ! Ich suche ein einfaches (Programmier- ) Beispiel, wie ich in zwei Klassen eine einzige Variable nutzen kann. Dabei möchte ich die Variable in einer Klasse definieren, diese aber in beiden Klassen veränderbar machen. Ich habe schon ein paar Variation in C++ ausprobiert, allerdings ohne nennenswerten Erfolg ;-( Es wäre nett, wenn mir einer von Euch kurz auf die Sprünge helfen könnte! Danke! Gruss Martin
Hallo Also ich hab zwar nur ein bischen Erfahrung mit Java, es kann also auch sein das es in C++ komplett anders funktioniert. So wie ich das Prinzip von OOP verstanden habe ist es nicht Sinn und Zweck der Sache so etwas zu machen was du vorhast. Normalerweise wird ja aus einer Klasse zur Laufzeit ein oder mehrere Objekte erzeugt. Also ich es so auch nicht möglich auf eine Globale Variable zuzugreifen, da ja mehrere Instanzen des Objekts vorhanden sein könnten. mfg Max
Ich schliesse mich meinem Vorredner an. Trotzdem hier eine mögliche Lösung: int myVar=123; class A { public: int &myVar; A():myVar(::myVar) {} int get() { return myVar; } void set(int v) { myVar=v; } }; class B { public: int &myVar; B():myVar(::myVar) {}; int get() { return myVar; } void set(int v) { myVar=v; } }; int main(int argc, char* argv[]) { A a; B b; printf("%d\n",a.get()); a.set(456); printf("%d\n",b.get()); return 0; }
Überarbeite lieber deine Klassenstruktur, oder lies ein Buch über OOP ;) Sowas ist gewissermaßen gegen den Sinn der Objektorientierung.
> Überarbeite lieber deine Klassenstruktur, oder lies ein Buch über OOP ;) > Sowas ist gewissermaßen gegen den Sinn der Objektorientierung. Ja, das stimmt schon, aber manchmal spart man sich einfach echt viel nerviges Zeug, wenn man das mal einer Stelle wohldefiniert tut. Bei der Programmierung von eingebetteten Systemen kommt sowas durchaus mal vor. Das obige Beispiel tut zwar das, was du willst, allerdings wird die Variable nicht in der Klasse definiert. Ich schlage daher folgendes vor: Im Header:
1 | class B; |
2 | |
3 | class A { |
4 | private:
|
5 | friend class B; |
6 | static int myVar; |
7 | public:
|
8 | ...
|
9 | }
|
10 | |
11 | class B { |
12 | public:
|
13 | void method() { |
14 | int local_var = A::myVar; |
15 | }
|
16 | }
|
In der Implementierung:
1 | # include "A.h"
|
2 | |
3 | int A::myVar = MY_INITIALIZER; |
das obige Beispiel verwendet eine Klassenvariable (oder statische Variable). Der Vorteil der friend-Deklaration ist, das neben der Klasse A nur die Klasse B auf die Variable myVar zugreifen darf und nicht irgendeine beliebige Klasse. Soll die Variable keine Klassenvariable sein, sondern eine Instanzvariable, musst du halt das static und die Initialisierung weglassen. Eine Instanzvariable passt IMO allerdings nicht so ganz auf deine Beschreibung, wonach du suchst. Ciao, Fabian
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.