Frage zu Klassen
-
Versteh das Problem nicht so ganz

class A { B& myB; public: A (B& other) : myB(other) { } void method () { myB.foo(); } }; ... class B { void foo (); };Sowas?
MfG SideWinder
-
Sinn dieser Aktion soll folgendes sein.
ich möchte in in einer Klasse Methoden von verschiedenen Klassen aufrufen können ohne Vererbung zu benutzen.
zb:
Ich habe eine Klasse die für alles mit Netwerkwerk zuständig eine andere für Loggen...usw.Jetzt könnte ich ja jeder dieser Klassen zeiger von den Objekten der jeweiligen instanzen der benötigten Klassen mitgeben. Das gefällt mir nicht wirklich.
Daher habe ich mir gedacht ich schreibe mir eine Klasse die als Vermitlung dient.
z.b Klasse Vermittlung hat eine Methode senden welche wiederum intern die Daten senden der Klasse netzwerk weitergibt.
-
Hast du schon mal an Friend-Methoden/Friend-Klassen gedacht?
Eine andere Möglichkeit wäre, wie vorhin von Sidewinder beschrieben, eine Instanziierung in den Klassen, in welchen du auf Objekte der gesuchten Klasse zugreifen kannst. Auch möglich wäre es, einfach die Methoden mit Aufrufparametern zu bestücken (z.b. eine Referenz auf Objekte von bestimmten Klassen), bzw. dann die Methoden mit verschiedenen Klassen zu überladen und dann in den Methoden mit den Objekten der anderen Klasse zu arbeiten.
-
Hy
ich programmiere erst zeit kurzem in C++.
Ich werde mich in Friend-Methoden/Friend-Klassen einlesen, es scheint die Lösung für mein Problem zu sein
Danke für eure hilfe.
-
GUEST__guest schrieb:
Ich werde mich in Friend-Methoden/Friend-Klassen einlesen, es scheint die Lösung für mein Problem zu sein

Eher nicht. Wenn ein Objekt a der Klasse KL1 Methoden eines Objekts b der Klasse KL2 aufrufen soll, dann braucht a eine Referenz auf b. Es gibt nun unzählige Wege wie a eine solche Referenz erhalten kann, einen hat SideWinder gezeigt. Mit friend hat das aber erstmal nichts zu tun.
-
GUEST__guest schrieb:
Hy
Wenn ich zwei Klassen habe KL1 und Kl2,
wie kann ich dann aus der KL2 methoden der KL1 aufrufen ?Zur Lösung habe ich versucht über der Konstruktor der KL2 einen zeiger auf die Kl1 zu übergeben mit this. Leider kommt dann folgender Fehler:
Konvertierung des Parameters 1 von 'class Klasse1' in 'class Klasse2 *' nicht moeglich.
Danke für alle hoffentlich folgenden Infos
er hat doch nicht geschrieben, er will (ohne Vererbung) die Methoden instanziiert aufrufen, sondern, er will aus Kl2 Methoden der Kl1 aufrufen, was mir ohne Vererbung irgendwie nach friend klingt und nicht mit Referenzen, sorry, wenn ich was falsch verstanden habe
-
Vorden schrieb:
er hat doch nicht geschrieben, er will (ohne Vererbung) die Methoden instanziiert aufrufen, sondern, er will aus Kl2 Methoden der Kl1 aufrufen, was mir ohne Vererbung irgendwie nach friend klingt und nicht mit Referenzen, sorry, wenn ich was falsch verstanden habe
Was hat das mit friend zu tun? friend regelt Zugreifbarkeit. Hier geht es aber erst mal um Sichtbarkeit. Das ist ein Schritt davor.
Es gibt doch nur zwei Möglichkeiten. Entweder will der OP eine normale Memberfunktion aufrufen, dann braucht er ein Objekt. Oder er will eine Klassenmethode (eine statische Memberfunktion) aufrufen, dann muss die Definition der Klasse, die selbige Methode enthält bekannt sein.
Beides ist unabhängig von friend.
-
Wo steht denn, dass es sich hierbei um Sichtbarkeit handelt, er wollte vom einen Objekt auf Methoden eines anderen zugreifen, was für mich schon arg nach ZUGREIFBARKEIT klingt und er wollte sie nicht nur sehen können.
Abgesehen davon, hab ich auch geschrieben, dass er hierbei auch mit Pointern/Referenzen auf Objekten arbeiten könne, woraufhin er gemeint hat, dass er denkt, dass friend ihm helfen kann...
-
Das einzige, was friend ändert, ist dass du auch Zugriff auf private Member und damit private Methoden bekommst. Davon ist hier aber nicht die Rede.
-
Hy
ich habe es gelöst mit hilfe einre Faq( Projekt mit vielen Dateien ) aus diesem Forum. Das ist peinlich.Danke für eure Hilfe