abstrakte klasse



  • hi,

    muss man in ner abstrakten klassen überhaupt nen standardkonstruktor deklarieren oder sollte man den Konstruktor protected machen???

    Mfg dohan



  • Das sind zwei getrennte Fragen.

    Einen Standardkonstruktor solltest Du einfügen, falls die Klasse diesen zur Dateninitialisierung benötigt. Falls die abgeleiteten Klassen lieber eine Ktor mit Parametern verwenden sollen, dann kein Standardktor (also diesen private machen). Das hat aber was mit dem Design der Klasse zu tun.

    Die andere Frage ist, ob man den/die Konstruktoren einer abstrakten Klasse public oder protected macht. Grundsätzlich ist es wohl logisch, diese protected zu machen, weil es ins Bild passt. Ich sehe jetzt im Moment kein Problem damit, aber wahrscheinlich habe ich da wieder Mal eine Ums-Eck-Lösung übersehen... 🙂 ich bin für solche Sachen manchmal zu pragmatisch. Falls man versehentlich eine Instanz einer abstrakten Klassen bilden will, so bekommt man bei der public-Variante dies mitgeteilt, weil keine passende virtuelle Methode vorhanden ist. Macht man den Ktor protected, so spuckt der Compiler eine Meldung aus, weil kein Konstruktoraufruf möglich ist.



  • Original erstellt von <dohan>:
    hi,
    muss man in ner abstrakten klassen überhaupt nen standardkonstruktor deklarieren oder sollte man den Konstruktor protected machen???
    Mfg dohan

    ob konstruktor notwendig ist, hängt von deiner klasse selber ab. hoffentlich nur, attribute zu initalisieren, und nicht, um ressourcen zu binden.

    standardkonstruktor selber machen mußte höchstens, wenn du nen anderen angeboten hast, und der compiler deshalb keinen standard-konstruktor baut, aber du einen haben willst, also in der initialisiererliste bei den subklassen nicht den basisklassenkonstruktor mit argumenten versorgen willst. sollte selten vorkommen. wenn da ein ctor ist, der attribute auf von mir angegebene werte setzt, isses kaum sinnvoll, die leer zu lassen.

    protected würd ich ihn nicht machen, denn objekte von abstrakten klassen kannste eh nicht anlegen. will kein rennen haben, welcher fehler "konstruktor nicht da" oder "abstrake objekte gibts net" kommt.



  • Original erstellt von Marc++us:
    Falls die abgeleiteten Klassen lieber eine Ktor mit Parametern verwenden sollen, dann kein Standardktor (also diesen private machen). Das hat aber was mit dem Design der Klasse zu tun.

    in dem falle reicht weglassen, denn es ist ja schon ein anderer ktor mit parametern da.


Anmelden zum Antworten