Objekt erstellen und weitergeben?



  • jkjkjjk schrieb:

    Man sollte Referenzen nicht als Member halten.

    stimmt, das ist unter jeden Umständen immer und absolut ohne Ausnahme ein schwerer Fehler.

    PS: Wer Ironie findet, darf sie behalten.



  • jkjkjjk schrieb:

    Man sollte Referenzen nicht als Member halten.

    Wieso nicht?


  • Mod

    daddy_felix schrieb:

    jkjkjjk schrieb:

    Man sollte Referenzen nicht als Member halten.

    stimmt, das ist unter jeden Umständen immer und absolut ohne Ausnahme ein schwerer Fehler.

    PS: Wer Ironie findet, darf sie behalten.

    Es ist aber sehr oft ein Fehler und sehr ungewöhnlich, wenn man es als Lösung empfiehlt. Meistens ist das, was man dadurch modelliert nämlich nicht das, was gemeint ist. Ich habe jedenfalls nicht den Eindruck, dass das was eine Memberreferenz ausdrückt hier gemeint ist. (Ich bin auch der Meinung ein Pointer wäre hier falsch und der Threadersteller sollte alles nochmal ganz neu machen, aber ein Pointer drückt auf jeden Fall besser aus, wonach er hier gefragt hat (aber nicht das, was ihm weiterhilft))


  • Mod

    Eisflamme schrieb:

    jkjkjjk schrieb:

    Man sollte Referenzen nicht als Member halten.

    Wieso nicht?

    Probier zum Beispiel mal aus, was die automatisch erzeugten Member genau machen. Außerdem: Was willst du damit modelliertechnisch ausdrücken? Absolute Verbundenheit bis in den Tod? Warum sind sie dann nicht gleich ein einziges Ganzes? Welche Vorteile hätte eine Referenz?

    Siehe auch die Diskussion, die hier beginnt:
    http://www.c-plusplus.net/forum/p2236581#2236581



  • Wie die anderen schon gefühlte 100x gesagt und ich auch im anderen Thread erwähnt habe ist dein Design komplett falsch. Jede Klasse tut nur genau das, wofür sie entworfen wurde, weiß nicht mehr, als sie wissen muss und delegiert alle Aufgaben, die nicht die ihren sind an die Klassen, die sich darum kümmern. Wenn dein Player (hör bitte mit den Präfixen auf, Ungarische Notation schafft mehr Unklarheit als Nutzen) einen Zeiger/Referenz auf dein Fenster braucht, untergräbst du damit den Sinn der OOP.

    Flutscherino schrieb:

    Ruft dann auf welche Tasten gedrückt sind. CPlayer->Move()

    CPlayer
    ---
    CPlayer muss ja wissen
    - welches Fenster ich habe
    - welches Objekt welches Fenster erstellt hat
    - ?

    Warum muss er das? Was macht die Methode move() genau?
    Kannst ja doch mal deinen gesamten Quelltext hier hineinkopieren, sodass man auch mal die Umgebung sieht, vielleicht ist ja dein Design vollständig für die Hose.



  • SeppJ schrieb:

    ]Es ist aber sehr oft ein Fehler und sehr ungewöhnlich, wenn man es als Lösung empfiehlt.

    klar, das bestreite ich ja auch gar nicht. Nur sträube ich mich ein wenig dagegen, dies pauschal als falsch zu deklarieren.



  • Die Diskussion endete aber nicht und ich war am Ende auch nicht überzeugt. 🙂 Aber das muss hier ja auch nicht weiter diskutiert werden. In der Praxis ist eine Referenz zumindest meistens weniger praktisch.

    Insofern bitte mein Beispiel mit Pointer statt Referenz denken.

    Wenn ich demnächst Mal Zeit und Muße habe, spiel ich eine Klasse mit Referenzattributen Mal für copy, move etc. durch, um zu sehen, wo Probleme auftauchen könnten.



  • Wo lernt man sowas wie, keine Referenzen als Member nehmen? Oder wie erkenne ich dass mein Programm nicht richtig ausmodelliert ist.

    Ich kann etwas C++ und ein paar Design Pattern. Mit dem Wissen mache ich halt was. Zu warten bis ich C++ vollständig kann oder auch alle DPs richtig beherrsche, geht ja schlecht, denn man lernt nur durchs Entwickeln und nicht durchs Lesen oder Tutorial-Videos anschauen. Also lerne ich ein wenig und machen dann daraus was. Dann lerne ich was dazu und mache es beim nächsten Mal besser.

    Wenn ich auf alle Sachen achten würde,die hier so manchmal erwähnt werden, dann würde bei mir kein einziges Programm je fertig werden^^


  • Mod

    Butterbrot schrieb:

    Wo lernt man sowas wie, keine Referenzen als Member nehmen? Oder wie erkenne ich dass mein Programm nicht richtig ausmodelliert ist.

    Hier 🙂

    Wenn ich auf alle Sachen achten würde,die hier so manchmal erwähnt werden, dann würde bei mir kein einziges Programm je fertig werden^^

    Wieso? Klar kannst du Programme schreiben, ohne alles zu wissen (und wirst dabei klüger). Aber wenn du erst einmal etwas besser weißt, was hindert dich, dieses Wissen ab dann zu benutzen?



  • Butterbrot:
    Na ja, ich würde auch nicht jedes Programm komplett refactorn, aber für neue Projekte solltest Du es in Angriff nehmen. Und da Du mit Deinem Spiel jetzt ja erst anfängst, solltest Du es direkt so richtig wie möglich machen. Du denkst, das hält Dich auf, aber wenn Du wirklich bis zu dem Punkt die Dinge vernünftig machst wie hier beschrieben, hast Du Dir viel Lern-, Überarbeitungs- und Erweiterungszeit gespart. Du hast die tollen Dinge ja schon eingebunden, die wirst Du dann recht zügig verstehen (vermutlich) und kannst dann noch schneller noch mehr lernen.



  • Ähm ich schreibe gar kein Spiel, das ist Flutscherino^^

    Ich schreibe ein kleines Musikprogramm mit verschiedenen Editoren und teste unabhängig davon ein paar Pattern wie CommandoProzessor inkl Undo/Redostack. Ich möchte da so viel es geht selbst implementieren(Ringbuffer etc.). Es wäre sicher viel effektiver dort Framework-Technologie zu nehmen, aber ich nutze von Qt nur das nötigste um viel zu lernen.



  • Ach, äh, ach eigentlich ist doch jedes Programm irgendwie ein Spiel. 🤡

    Viel lernen durch viel selbst implementieren ist okay. Aber dadurch wird Dein Projekt natürlich deutlich zum Lernprojekt. Für den produktiven Einsatz wären da einige Probleme, da es mehr Bugs haben wird, schwieriger wartbar wird uvm. Aber wenn Du Dir darüber bewusst bist, ist das keine schlechte Idee. 🙂



  • Naja wenn sich mein Spieler bewegt, muss er ja wissen wo er ist, also muss er ja die map kennen?

    Klar, ich könnte ja auch einfach abfragen wo er grade ist, aber auch dann muss er wissen, welches Objekt die map erstellt hat, weil er sonst ja auf ein völlig andere Map zugreift als eigentlich das Spiel vorgesehen hat?

    also irgendwann komm ich an einen Punkt, da entweder der Spieler wissen muss welche Map jetzt läuft ODER welches Objekt die Map geladen hat?

    Ich habs jetzt mal so gelöst das ich das Objekt weitergebe, und mache mal so weiter, es klappt und ja... ich bin noch am anfangsstadium mit lernen, vieleicht stosse ich ja später noch auf die "richtigere" lösung 😉 aber im moment hat mich das Problem so genervt das ich jetzt doch mal bisschen weitermache 😉



  • @Eisflamme:
    Ja das ganze Leben ist sogar ein Spiel, achne das war ja ein Quiz und wir sind nur die Kandidaten *tralala

    Mir ist schon bewusst^, dass nicht der erste Schuss gleich ins Schwarze treffen wird und ich mit einem Lernprojekt keine Blumentöpfe gewinnen kann. Wenn ich der Meinung bin, so ein bisschen zu wissen wie der Hase läuft, werde ich das Projekt nochmal mit professionellen Libs wie Boost etc. versuchen ums zusetzen.

    Da ich noch sehr viele Monate krank geschrieben bin, habe ich alle Zeit der Welt zum Probieren und Lernen. Der Herbst und Winter ist auch viel zu ungemütlich um da großartig raus zu gehen^^


Anmelden zum Antworten