Verbesserungsvorschläge/Feedback zu meinem ersten Programm



  • auf die schnelle ist mir nur das hier aufgefallen:
    ~board(){};

    genau das wird auch vom compiler generiert, wenn du die zeile weglässt

    allerdings ist das hier alles ein wenig schwer zu erkennen(nur ein zeichen einrücken ist mir persönlich zu wenig) - dazu kommt noch, dass du die code-tags und nicht die cpp-tags genommen hast.

    bb



  • Anzahl gesetzter Steine zählen in einem Attribut macht unentschieden entschieden netter.



  • Sieht eigentlich gut aus, aber mir ist noch das hier aufgefallen:

    class board
    {
     public:
      board();
      ~board(){};
      bool insert(STATE, int);
      WIN check() const;
      void drawboard() const;
    
     private:
      void setboardstate(int,int);
      char convtosymb(int, int) const;
      STATE boardstate[5][5];
    };
    

    Du gibst hier deinen Parametern gar keine Namen. Versuch dich einfach mal in die Lage zu versetzen, dass du dich in eine Library einarbeiten sollst und dann haben die Parameter nicht einmal Namen. Was soll z.B das erste int sein? Pfirsichkerne? Taschenlampen oder doch orientalisch Teppiche? Du siehst, worauf ich hinaus will. 😉
    Also schön brav immer passende Namen geben und alle sind zufrieden.



  • unskilled schrieb:

    auf die schnelle ist mir nur das hier aufgefallen:
    ~board(){};

    genau das wird auch vom compiler generiert, wenn du die zeile weglässt

    Würde der Compiler nicht das hier erstellen?

    virtual ~board();
    

    Der Destructor sollte immer virtual sein. Ausnahmen bestätigen die Regel. Grund hierfür ist die Vererbung. Beim zerstören eines Objektes werden nur dann die Destructors des Basisobjektes aufgerufen, wenn dieser virtual ist. Lediglich Klassen, von denen keine Ableitungen erstellt werden dürfen, ist es Ratsam den Destructor nicht virtual zu setzen.

    Gruß,
    Thomas



  • Nein!

    virtual wird nirgends implizit gesetzt. Das muss man von Hand tun. Der Compilier generiert einen leeren Destruktor, wie unskilled gesagt hat.



  • Siassei schrieb:

    Der Destructor sollte immer virtual sein.

    Nein.

    Ausnahmen bestätigen die Regel.

    Vererbung ist die Ausnahme, nicht die Regel. Es gibt ein Vielfaches mehr an Klassen die niemals vererbt werden. Und selbst dann ist der virtuelle Destruktor nur relevant, wenn dann noch zusätzlich delete auf einen Basisklassenzeiger aufgerufen werden soll.

    Die Faustregel ist: hat eine Klasse eine Methode, die virtual deklariert wurde, dann sollte auch der Destructor virtual sein (Ausnahmen bestätigen die Regel). Sonst nicht.



  • drakon schrieb:

    Der Compilier generiert einen leeren Destruktor, wie unskilled gesagt hat.

    Wenn er leer ist, wozu wird er dann generiert? 😕



  • general bacardi schrieb:

    drakon schrieb:

    Der Compilier generiert einen leeren Destruktor, wie unskilled gesagt hat.

    Wenn er leer ist, wozu wird er dann generiert? 😕

    Das darfst du nicht so wörtlich nehmen. Das Verhalten ist einfach so, als hätte man selbst einen leeren Destruktor. Sprich es werden alle automatischen Objekte zerstört und es wird so alles aufgeräumt.



  • drakon schrieb:

    general bacardi schrieb:

    drakon schrieb:

    Der Compilier generiert einen leeren Destruktor, wie unskilled gesagt hat.

    Wenn er leer ist, wozu wird er dann generiert? 😕

    Das darfst du nicht so wörtlich nehmen. Das Verhalten ist einfach so, als hätte man selbst einen leeren Destruktor. Sprich es werden alle automatischen Objekte zerstört und es wird so alles aufgeräumt.

    Also quasi als Gedächtnisstütze. OK, wer es braucht... 🤡



  • Naja. Es ist von semantischer Bedeutung. Da ist nicht einfach kein Destruktor, sondern ein leerer. 😉
    Schliesslich muss ja jemand das ganze wieder sauber machen, nachem du etwas gebraucht hast.



  • volkard schrieb:

    Anzahl gesetzter Steine zählen in einem Attribut macht unentschieden entschieden netter.

    Dafür hat man dann redundanten State, den man immer korrekt updaten muss. In Fällen wo die Geschwindigkeit keine Rolle spielt, würde ich eher in einer Schleife durchzählen, wenn ich wissen muss ob noch ein Feld frei ist.

    Natürlich sind beide Varianten in diesem einfachen Beispiel sehr einfach und übersichtlich korrekt zu implementieren.



  • danke für die vorschläge, werde versuchen sie umzusetzen


Anmelden zum Antworten