Variable in Klassen
-
Hallo !
Ich suche ein (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
Du kannst friend benutzen.
chrische
-
Hi,
Du kannst einer eine Referenz oder einen Zeiger verpassen:
struct A { int i; }; // Referenz-Version struct B { int& i; B(A& a) : i(a.i) {} // falls immer ein B mit einem A verküpft werden soll B(int& x) : i(x) {} // falls ein B mit irgendeinem i verküpft werden soll }; // Zeiger-Version struct C { int* i; C() : i(0) {} C(A& a) : i(&a.i) {} C(int* x) : i(x) {} void connectTo(int* x) { i=x; } void connectTo(A& a) { i=&a.i; } };Die erste Variante (B) verknüpft "stärker", die Zweitere (C) schwächer; je nachdem, was man braucht.
Mit solchen "Querabhängigkeiten" muss man aber vorsichtig sein, weil man schnell zu unerwünschtem Verhalten kommt (beide Klassen arbeiten tadellos, erst im Zusammenspiel geht's schief).Gruß,
Simon2.
-
Ok...das muss ich erst mal verdauen..!
Bin noch kein C++ Fachmann, aber ich arbeite dran !Gruss Martin
-
Hat jemand noch ein anderes Beispiel, wie ich eine Variable in zwei Klassen nutzen kann? Irgenwie steig ich da nicht so ganz durch bzw. für meine Anwendung finde ich dieser Art der Programmierung etwas zu komplex...
Gruss Martin
-
Das Stichwort "friend" wurde ja schon genannt...
#include <iostream> class Friend; class Test { public: Test(int i = 0) : n(i) {} void SetN(int i) {n = i;} int GetN() {return n;} friend Friend; private: int n; }; class Friend { public: Friend() {} void DoIt(Test &test, int i) {test.n = i;} }; using namespace std; int main() { Test t(5); Friend f; f.DoIt(t, 7); cout << t.GetN() << endl; cin.get(); return 0; }
-
Hallo !
Sobald ich den Quelltext kompiliere bekomme ich die folgende Fehlermeldung:friend declaration requires class-key, i.e. `friend struct Friend'
Wie kann das ?
-
Du mußt ja auch
friend class Friend;schreiben. das besagt ja auch die Fehlermeldung.
-
Sorry, habe ich auch gerade gemerkt...
Dummer Fehler !!Wer lesen kann, ist klar im Vorteil...
-
~Airdamn schrieb:
Das Stichwort "friend" wurde ja schon genannt...
...Ich glaube nicht, dass er das meint/braucht !
Wenn der OP noch nicht verstanden hat, wie man 2 Objekte verknüpft, ist deren Zugriffsschutz (und um mehr kümert sich friend ja nicht) erstmal egal.
Anders gesagt: Auch mit "friend" kommt er nicht umhin, sich eine Referenz oder einen Pointer zu halten....(oder eben die Indirektion über eine Funktion verstehen, wie Du sie implementiert hast)@Martin: Ich versuche mal, mein Beispiel (die einfachere Version davon) zu erläutern:
struct A { int i; // Klasse "besitzt" eine Zahl }; struct B { int& i; // Klasse "besitzt" eine "Referenz (=Verweis) auf eine Zahl B(int& x) : i(x) {} }; int main() { A a; // ein A-Objekt B b(a.i); // ein B-Objekt, dessen int-Referenz an die Zahl von a gebunden wird a.i = 1; cout << "a.i = " << a.i << ", b.i = " << b.i << "\n"; b.i = 2; cout << "a.i = " << a.i << ", b.i = " << b.i << "\n"; // Wie Du siehst, werden immer beide gleichzeitig verändert. return 0; }Wenn Du da durchgestiegen bist, können wir das nochmal mit Zeiger und "Funktionsumleitung" durchgehen.
Martin Reindel schrieb:
...
Ich habe schon ein paar Variation in C++ ausprobiert, allerdings ohne nennenswerten Erfolg ;-(...Vielleicht kannst Du mal einen Versuch hier veröffentlichen und sagen, was daran "erfolglos" war ... sonst raten wir hier noch ewig rum, was Du eigentlich willst, wie Du es bislang versucht hast und was daran nicht klappte.
Gruß,
Simon2.