Warum abstrakte Klasse verwenden?



  • Hi alle zusammen. Ich habe mich in letzter Zeit ein wenig
    mit DirectX-Tutorials beschäftigt. Nun bin ich auf folgenden Link gestoßen:

    http://www.chadvernon.com/blog/resources/directx9/creating-an-object-oriented-framework/

    Der Verfasser redet hier von der Notwendigkeit die Klasse CBaseApp
    abstrakt zu machen und anschließend die Klasse CGameApp davon erben zu lassen.
    Nun verbirgt sich mir dahinter allerdings der Sinn. Warum lässt er CGameApp
    davon erben, anstatt einfach die in CBaseApp verwendeten Methoden direkt in
    CGameApp hineinzuschreiben? Man hatt doch nicht vor noch eine andere Klasse
    davon erben zu lassen.
    Ich denke ich weiß, wozu man abstrakte Klassen
    verwendet, in diesem Beispiel jedoch verstehe ich es nicht.

    Ich danke euch schonmal im Voraus und freue mich über jede Hilfe.

    Gruß Honky



  • Hört sich so erstmal schwachsinnig an. Nicht alles was im Internet steht, ist guter Stil. Beim überfliegen stellen sich noch einige andere Fragen. z.B. warum der Windows Kram nicht weggekapselt wird, ob der schon mal was von pimpl gehört hat, ..., RAII hat der wohl auch noch nie gehört, im Konstruktor werden die Pointer auf 0 gesetzt, und dann in "Initialize" auf was ordentliches gesetzt. Sieht alles ziemlich halbgar aus.

    Edit: Mein Tipp: Lerne guten Stil von C++ Experten (Herb Sutter, Stephan T. Lavavej z.B.), und klau dir dann das wissen über 3D Programmierung von anderen zusammen, ohne deren Stil zu übernehmen. 😉



  • CFrameWork nimmt ein CBaseApp* entgegen.

    Der Vorteil ist, dass du so eine CBaseApp Implementierung haben kannst aber die anderen Komponenten wie CFrameWork oder sonstwas gegen CBaseApp Programmiert sind.

    Leitsatz hier: Program to an 'interface', not an 'implementation'.

    Solche Tutorials von Spieleentwicklern sind aber mit Vorsicht zu genießen.



  • Okay danke für eure Hilfe.
    Und ja, ich versuch mir nicht den Stil dieser Tutorials anzueigenen 😉


Anmelden zum Antworten