Virtual Frage



  • Ich bin mir noch nicht sicher, wie genau die Daten in ein Objekt hineingelangen sollen, deshalb schien mir eine Abstrakte Klasse ('Quelle') sinnvoll.

    class Quelle; // Damit wenigstens ein Zeiger im Konstruktor von Objekt
     // verwendet werden kann;
    
    class Objekt{
    int x,y;
    public:
    Objekt(int a, int b):x(a),y(b){}
    
    Objekt(Quelle* src){
     *this=src->get(); // Mit diesem Konstruktor erhoffte ich mir,
       // das Objekt auch aus einer beliebigen Datenquelle erzeugen zu können,
       // aber src->get() ist dem Compiler nicht bekannt? Wie löst man das?
    }
    };
    
    // Hier die Definition von Quelle:
    class Quelle{
    public:
    virtual Objekt get()=0;
    }; // Also noch nichts Konkretes,
    // deshalb abgeleitet zu beispielsweise:
    
    class Tastatur:public Quelle{
     public:
     Objekt get(){ // Hier wird doch die virtuelle Funktion überladen, oder?
       // Leider kennt der Konstruktor von Objekt dieses Funktion nicht! Was tun?
    int a,b;
    scanf("%d%d",&a,&b);
    return Objekt(a,b); // So und das sollte nach meiner Theorie dem
      // Konstruktor von Objekt (der mit dem Quelle* Zeiger als Parameter)
      // ermöglichen, ein Objekt durch eine Tastatureingabe zu erzeugen.
      // Das klappt aber nicht so recht?
    }
    };
    

    Vielleicht fällt jemandem eine Lösung für mein Problem ein, dass man sowohl 'Objekt' die Existenz von 'Quelle' bekannt machen muss, als auch umgekehrt!
    In welcher Reihenfolge soll ich was deklarieren/definieren?

    Danke für Tipps!



  • Implementiere die Memberfunktionen ausserhalb der Klasse.



  • groovemaster schrieb:

    Implementiere die Memberfunktionen ausserhalb der Klasse.

    Thx klappt jetzt (halbwegs)!


Anmelden zum Antworten