Stilfrage



  • Hi Forum,
    ich schreib grad an ner kleinen Konsolen-Gui-Lib. Ich wolt mich mal erkundigen, was ihr bezüglich der Initalisierung der Steuerelemente auf einem Formular für die beste Variante haltet:
    Erben und pure-Virtual (.NET-Like)

    class DLL CForm
    {
        //...
    public:
        //...
        virtual void InitForm() = 0;
    };
    
    //Im Programm:
    class MyForm : public CForm
    {
        virtual void InitForm()
        {
            //Steuerelemente initialisieren
        }
    };
    
    int main()
    {
        //Formengine-Initialisierungscode käme hier hin
    
        CForm *frm = new MyForm(/*bla*/);
    
        //engine.RegisterForm(frm);
    
        return 0;
    }
    

    oder diese Variante

    class DLL CForm
    {
        //...
    public:
        //...
        void AddControl(/*bla*/);
    };
    
    //Im Programm
    int main()
    {
        CForm *frm = new CForm();
    
        frm.AddControl(/*dasunddas*/);
        frm.AddControl(/*diesunddies*/);
    
        return 0;
    }
    

    Momentan hab ich die zweite Variante implementiert, weil man nicht für jedes Form erst ne Klasse überladen muss. Andererseits kriegt man ewig lange main-Funktionen.

    Was meint ihr?

    MfG



  • Beides. Wenn InitForm normal virtuell ist, geht das. Und mach bitte kein C vor Klassennamen.



  • Weder noch. Warum nutzt du keinen Konstruktor?



  • cooky451 schrieb:

    Weder noch. Warum nutzt du keinen Konstruktor?

    Stimmt auch wieder. Hab gar nicht dran gedacht, das ich eine AddControl-Schnittstelle wie bei Variante 2 machen könnte und dann dem Lib-Benutzer selbst überlassen könnte ob er erben will oder die 2. Variante benutzen will.



  • Mit dem Entwurfsmuster Template-Method könntest du deinen Benutzern sogar erlauben, nur gewisse Teile der Logik zu überschreiben!



  • Danke, ich werd das Pattern gleich mal ansehen.


Anmelden zum Antworten