c++ Verebung Aufruf des Konstuktors der Basisklasse verhindern.



  • Hallo.

    folgende Programmstrugktur :

    class vbEngine
    {
    public:
    
    	vbEngine();
    	vbEngine(CDatabase &db);
    ...
    };
    
    class vbLiga : public vbEngine
    {
    public:
    
    	vbLiga(string name, int aufsteiger, int absteiger, int id);
    ...
    };
    

    ich erzeuge ein neues objekt vbEngine mit einer CDatabase instanz. in diesem konstruktor werden verschoede Objekte von vbLiga erzeugt. da diese klasse aber von vbENgine abgeleitet ist ruft sie immer den standardkonstruktor von vbEngine auf. Das ist ja auch C++ spezifisch. Das Problem : in meinem standart konstruktor werden alle datenbank objekte immer neu erzeugt. und nur im andere konstruktro ausgelesen. so nun kann man sich ja vorstellen das das nicht so ganz glatt läuft. meine frage kann man den aufruf irgendwie verhinden. meine idee wäre das der standart konstruktor nichts macht und das erzeugen, löschen und auselen durch seperate aufrufe erfolgt und nicht aus dem konstruktoren heraus. ich hoffe das war verständlich..
    vielene dank für eure ideen



  • Falsches Forum: C++ wäre korrekt.
    Dein Beitrag wird bestimmt bald verschoben.
    Simon



  • Oh entschuldigung . kann ich das auch alleine machen



  • da diese klasse aber von vbENgine abgeleitet ist ruft sie immer den standardkonstruktor von vbEngine auf. Das ist ja auch C++ spezifisch

    Naja, gib halt an welchen Konstruktor der Basis Klasse aufgerufen werden soll.
    Simon



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • dercooleauswandere schrieb:

    ...da diese klasse aber von vbENgine abgeleitet ist ruft sie immer den standardkonstruktor von vbEngine auf.

    Ja, wenn du keine Initialisierungsliste verwendest ist dem so (ansonsten kannst du auch einen anderen Konstruktor verwenden). Aber grundsätzlich muss ein Konstruktor der Basisklasse (und dies ist nicht nur in C++ so) bei einer Vererbung verwendet werden. Google mal nach Initialisierungsliste (es gibt in diesem Forum schon genügend Einträge hierzu), es wäre ohnehin sinnvoll Diese zu kennen (Die eigentliche "Initialisierung" findet nur dort statt, alles im Konstruktorrumpf ist nur noch eine nachträgliche Zuweisung.

    Eine weitere Alternative wäre statt einer Vererbung (die ohnehin zu Häufig verwendet wird) auf eine Komposition zu setzen (Statt "ist ein", "hat ein" verwenden).

    cu André


Anmelden zum Antworten