Natürlich können Sie das. Ich frage mich nur, ob es rational ist, so zu gestalten.
Ich mache einen Breakout-Klon und mache ein Klassendesign. Ich wollte die Vererbung verwenden, obwohl ich das nicht muss, um das anzuwenden, was ich in C ++ gelernt habe. Ich habe über Klassendesign nachgedacht und mir so etwas ausgedacht:
GameObject -> Basisklasse (besteht aus Datenelementen wie x- und y-Offsets und einem Vektor von SDL_Surface *
MovableObject: GameObject -> abstrakte Klasse + abgeleitete Klasse von GameObject (eine Methode void move () = 0;)
NonMovableObject: GameObject -> leere Klasse ... keine anderen Methoden oder Datenelemente als Konstruktor und Destruktor (zumindest für den Moment?).
Später plante ich, eine Klasse von NonMovableObject abzuleiten, wie Tileset: NonMovableObject. Ich habe mich nur gefragt, ob häufig "leere" abstrakte Klassen oder nur leere Klassen verwendet werden ... Ich stelle fest, dass ich auf diese Weise nur die Klasse NonMovableObject nur zur Kategorisierung erstelle.
Ich weiß, dass ich Dinge überdenke, nur um einen Breakout-Klon zu erstellen, aber mein Fokus liegt weniger auf dem Spiel als vielmehr auf der Verwendung von Vererbung und dem Entwerfen einer Art Spiel-Framework.
quelle
MovableObject
nochNonMovableObject
voneinander erben, doch haben beide einen Standort. Als solche sollten beide durch Code konsumiert werden können, der z. B. das Ziel eines Monsters auf ein Objekt richten möchte, ohne Rücksicht darauf, ob sich dieses Objekt bewegen könnte oder nicht.Es hat Anwendungen in C # wie ammoQ erwähnt, aber in C ++ wäre die einzige Anwendung, wenn Sie eine Liste von NonMovableObject-Zeigern haben möchten.
Aber dann würde ich mir vorstellen, dass Sie die Objekte über den NonMoveableObject-Zeiger zerstören würden. In diesem Fall würden Sie virtuelle Destruktoren benötigen und es wäre keine leere Klasse mehr. :) :)
quelle
Eine Situation, in der Sie dies möglicherweise sehen, besteht darin, dass eine stark tyupierte Sammlung ansonsten heterogene Typen enthalten soll. Ich sage nicht, dass dies eine großartige Idee ist, sie kann auf eine schwache Abstraktion oder ein schlechtes Design hinweisen, aber es passiert. Wie Sie bereits erwähnt haben, ist dies eine Möglichkeit, Dinge zu kategorisieren, und es kann nützlich und vollkommen gültig sein.
ZB Sie möchten eine Sammlung für Katzen und Hunde. In Ihrem Design entscheiden Sie, dass sie viel gemeinsam haben. Haben Sie also eine Basisklasse von Mamal und verwenden Sie diesen Typ in Ihrer Sammlung (z. B. Liste). Alles gut. Dann entscheiden Sie, dass Sie Ihrer Sammlung einige Frösche hinzufügen möchten, die jedoch keine Säugetiere sind. Eine Möglichkeit, dies zu tun, besteht darin, die Unterklasse der Frösche und Säugetiere zu Tier zu machen, aber vielleicht können Sie nicht an viel denken, was die Frösche und Säugetiere enthalten häufig, damit das Tier leer bleibt. Sie tippen dann Ihre Sammlung mit Animal anstelle von Mamal und alles ist gut.
Im wirklichen Leben stelle ich fest, dass selbst wenn ich früher oder später eine leere Basisklasse erstelle, einige Funktionen dort landen, aber es gibt sicherlich Zeiten, in denen sie existieren.
quelle