> Ü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