Ich finde das hängt von mehreren Faktoren und auch deinem allgemeinen Klassendesign ab. Ich würde mir zum Beispiel eine Klasse für Karten schreiben. Farbe (Karo, Herz, Pik, Kreuz) würde ich vermutlich als Enumeration angeben. Kartenwert (7, 8, 9, 10, Bube, Dame, König, Ass) würde ich vermutlich auch als Enumeration darstellen. Für den Zahlenwert der Karte würde ich dann eine Funktion zum Mappen der Wertigkeiten schrieben (zum Beispiel 7 = 0 Punkte, Ass = 11 Punkte). Je nach Spiel könnte man dann diese Funktion austauschen. Der Vorteil wäre die einfache Verständlichkeit und Bedienbarkeit. Funktionen für Zufällige Hände zu schreiben wäre hier auch nicht sonderlich schwer. Eine Hand selbst wäre dann eine Liste von Karten. Für einen Kartenstapel könnte man je nach Situation einen Stack benutzen, wobei ich die Erfahrung gemacht habe, dass man doch recht oft Funktionen haben möchte, die ein Stack nicht liefert. Da kommt es dann aber immer auf die Implementierung an. Wenn man beliebige Algorithmen mit der Datenstruktur realisieren kann (zum Beispiel durch das vorhanden sein von Iteratoren), dann sollte der Stack gut geeignet sein. Ist meiner Meinung nach so einfacher als mit irgendwelchen Bitflags hantieren zu müssen. Hier sieht man halt direkt was gemeint ist.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“