OOP: Variable in zwei Klassen nutzen, aber wie?

Gast #574870
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
Gast #574891
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
Gast #574928
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;
}
#575230
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.