2 "Fast" identische Konstrukoren



  • Hallo,

    Folgendes "Problem" habe ich momenta,..

    Ich habe 2 Konstruktoren:

    Picture(TColor color,int width,int height)
    

    Zum Erstellen eines Bildes mit widthxheight und der hintergrundfarbe color

    bzw.

    Picture(AnsiString dir)
    

    Zum laden eins Bildes vom Pfad dir,...

    Funktioniert prima, nur was mich ärgert ist, dass sich die beiden Konstruktoren nur minimal unterscheiden --> somit 80% gleichen Inhalt haben,..
    Ändere ich nun an einen Konstruktor etwas muss ich im anderen das gleiche ebenso ändern,...

    Kann ich dies irgendwie eleganter lösen ?



  • Hallo

    Zusammenlegen kannst du die Konstruktoren nicht, aber du kannst den Teil der in beiden identisch bzw. ähnlich ist in eine extra (private) Initialisierungsmethode auslagern, die von beiden Konstruktoren aufgerufen wird.

    bis bald
    akari



  • ahhh,... so quasi eine "Funktion" ?

    void Init(){
    //hier alles was zu tun ist
    }

    Und bei jeden Konstruktor
    Init();

    Richtig verstanden ?
    Danke !



  • Hallo

    Ja. Eine Member-Funktion, nicht nur quasi.

    bis bald
    akari



  • Eine andere Alternative wäre, eine Basisklasse zu erzeugen in deren Konstruktor diese Initialisierungen ablaufen. Dann davon abzuleiten (public). In den neuen Konstruktoren wird der Basisklassenkonstruktor ja automatisch aufgerufen (sofern er trivial ist). Du kannst den Basisklassenkonstruktor natürlich auch selbst in der Initialisierungsliste deiner Konstruktoren aufrufen.


Anmelden zum Antworten