Frage zu Friend Class
-
Hallo ich habe folgende Frage ich habe folgdenen Code :
class Team { public: friend class Trainer; Team(string name); ~Team(); string GetName() { return sName; } Result AddPlayer(Player *player); Result RemovePlayer(Player *player); Result AddTrainer(Trainer *trainer); Result RemoveTrainer(); private: string sName; vector<Player*> vPlayer; Trainer *pTrainer; Calender *pCalender;class Trainer : public Person { public: Trainer(string name, string prename, int age) : Person(name, prename, age) { cout<< "Erzeuge neuen Trainer " << name.c_str() << " " << prename.c_str() << "\n"; } ~Trainer(); Result CreateTrainingPlan(); private:Meine Frage :
Wie kann ich in der Klasse Traine in der Funktion "CreateTrainingPlan" auf das Onjet pCalender zugreifen.Das heißt wie muss der Aufruf ausehen .
Danke
-
Fischkopf2009 schrieb:
Hallo ich habe folgende Frage ich habe folgdenen Code :
class Team { public: friend class Trainer; Team(string name); ~Team(); string GetName() { return sName; } Result AddPlayer(Player *player); Result RemovePlayer(Player *player); Result AddTrainer(Trainer *trainer); Result RemoveTrainer(); private: string sName; vector<Player*> vPlayer; Trainer *pTrainer; Calender *pCalender;class Trainer : public Person { public: Trainer(string name, string prename, int age) : Person(name, prename, age) { cout<< "Erzeuge neuen Trainer " << name.c_str() << " " << prename.c_str() << "\n"; } ~Trainer(); Result CreateTrainingPlan(); private:Meine Frage :
Wie kann ich in der Klasse Traine in der Funktion "CreateTrainingPlan" auf das Onjet pCalender zugreifen.Das heißt wie muss der Aufruf ausehen .
Danke
Indem du in der Funktion ein Objekt vom Typ Team hast (vermutlich hat der Trainer eine Referenz auf sein Team) und dafür ganz normal die Methode aufrufst wie du es bei public Funktionen tun würdest.
-
Wäre es dann nicht sinnvoller die Methode CreateTrainingPlan() in die Klasse Team zu legen (um direkten Zugriff auf die Member zu haben), denn auf die Spieler wird höchstwahrscheinlich ja auch verwiesen werden müssen?
-
Danke für deine antwort. ich habe allerdings hat nicht der tzrainer eine referenz auf sein team, sondern das team eine refernz auf seinen team. ist das uuntypisch oder nur eine phylosophische frage
-
Fischkopf2009 schrieb:
Danke für deine antwort. ich habe allerdings hat nicht der tzrainer eine referenz auf sein team, sondern das team eine refernz auf seinen team. ist das uuntypisch oder nur eine phylosophische frage
das ist einfach nur unpraktisch

Du musst immer so denken:
Kennt der Trainer sein Team?
Wenn ja, dann muss er eine möglichkeit haben auf sein Team zuzugreifen. Muss nicht direkt per referenz möglich sein, aber irgendwie schon.Auch wenn das bedeutet dass Trainer eine Referenz auf Team hält und Team eine Referenz auf Trainer. OO-Modellierung ist kein Datenbanksystem

-
Fischkopf2009 schrieb:
oder nur eine phylosophische frage
Du solltest weniger Plateau lesen, dafür deine Posts auf (massive) Rechtschreib/Grammatikfehler korrigieren.
Prinzipiell hat das nix mit Philosophie zu tun, sondern mit knallharten Fakten.
Was ist bei dir ein Team? Im Fußball: Team == die 11 am Rasen + Auswechselspieler (also die aktiven Sportler)? Oder alle die mit dem Erfolg zu tun haben, also auch Mediziner, Physio, usw. und natürlich die (!) Trainer? Oder ganz komplett gefasst der ganze Verein? (letzteres wohl weniger)Wenn du dir die Frage beantworten kannst hast du schon die Lösung. Wenn nicht antworte hier her;)
-
Guten Morgen. Danke für eure Hinweise.
Also im Team sind max 15 Spieler ( kein Fussball). Dazu kommt ein Trainer, und max ein Co- Trainer. Ich habe mir überlegt in jedem Objekt (also spieler und trainer) eine referenz auf das team zu speichern, zu dem sie gehören. alle diese objekte (spieler und trainer) werden von einer gloabelen klasse (applikation) erstellt , geladen und verwaltet. so nun aber folgendes szenario. spieler A möchte von team a zu team wechseln. das würde bedeuten, das der trainer oder manager an die applikations klasse den befehl sendet, den spieler a von team a nach team b zu tauschen. ist das eine bessere / optimale lösung
-
Ich würde Spieler und Trainer nicht global von der App managen lassen. Gib doch den ganzen endlich einen Verein

class Verein { Trainer* trainer_; std::list<Spieler*> spieler_; public: std::list<Spieler*> spieler() { return spieler_; } Trainer* trainer() { return trainer_; } } class Spieler { Verein* verein_; } class Trainer { Verein* verein_; }Will ein Spieler an seinen Trainer, geht das problemlos über verein_->trainer();
Wechselt der Verein den Trainer passiert die Änderung an einer Stelle, in Verein. Wenn alle Spieler ihre eigene Referenz auf den Trainer halten würden, wäre das ein ziemliches Chaos. Vor allem, wenn es (wie im echten Leben) MultiThreaded abläuft. Da kann ein Trainerwechsel schon mal gleichzeitig mit einer Spielerneuverpflichtung stattfinden. Kann Chaos geben, wenn ein neuer Spieler dann plötzlich noch den alten Trainer Trainer als Referenz speichert
Jippie!
-
Schön, ich programmier seit kurzem an einem Fussballmanager (mehr so zum Spass und als Lernprojekt). Vielleicht finden sich ja noch mehr Leute die dasselbe tun und man könnte solche relativ spezifischen Fragen in EINEM eigenen Thread diskutieren. Gibt ja noch ganz schöne Themen wie bspw. das Finanzsystem

-
Ja das halte ich für eine gute idee. Ich programmiere allerdings keinen fussballmanager, dennoch sind probleme bestimmt gleich. vondaher bin cih auch dafür