Forum: Compiler & IDEs OOP: Variable in zwei Klassen nutzen, aber wie?


von Martin R. (Gast)


Lesenswert?

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

von max.p (Gast)


Lesenswert?

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

von Jorge (Gast)


Lesenswert?

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;
}

von Simon K. (simon) Benutzerseite


Lesenswert?

Überarbeite lieber deine Klassenstruktur, oder lies ein Buch über OOP ;)

Sowas ist gewissermaßen gegen den Sinn der Objektorientierung.

von Fabian S. (rosepeter)


Lesenswert?

> Ü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
Noch kein Account? Hier anmelden.