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.