Abstrakte Klasse: "Platzhalter" für Namen der Unterklasse?



  • Hallo,
    ich hätte eine kleine Frage betreffs der objektoriertierten Programmierung:

    Ist es in C++ möglich, eine rein virtuelle Funktion zu implementierem, die als Rückgabewert ein Objekt der Unterklasse zurückgibt? Das Problem dabei ist ja, dass zur Zeit der implementierung der abstrakten Klasse mögliche Unterklassen noch unbekannt sind.

    Gibt es dafür eine Art "Platzhalter"?


  • Mod

    Natürlich geht das, dank Vorwärtsdeklarationen.

    struct A;
    
    struct B
    {
    	virtual A pure_virtual_foo() = 0;
    };
    
    struct A : public B
    {
    	virtual A pure_virtual_foo()
    	{
    		return {};
    	}
    };
    
    int main()
    {
    }
    


  • -= Christopher =- schrieb:

    Hallo,
    ich hätte eine kleine Frage betreffs der objektoriertierten Programmierung:

    Ist es in C++ möglich, eine rein virtuelle Funktion zu implementierem, die als Rückgabewert ein Objekt der Unterklasse zurückgibt? Das Problem dabei ist ja, dass zur Zeit der implementierung der abstrakten Klasse mögliche Unterklassen noch unbekannt sind.

    Gibt es dafür eine Art "Platzhalter"?

    Wird das wirklich gebraucht? Oder muss nur die Unterklasse den genauen Typ wissen?

    #include <iostream>
    using namespace std;
    
    struct B{
        virtual B* clone() = 0;
        virtual void print(){
            cout<<"Ich bin ein B.\n";
        }
    };
    
    struct A : public B{
        virtual A* clone(){
            return new A(*this);
        }
        void print(){
            cout<<"Ich bin ein A.\n";
        }
    };
    
    int main(){
        A* pa1=new A;
        A* pa2=pa1->clone();
        pa1->print();
        pa2->print();
    
        B* pb1=new A;
        B* pb2=pa1->clone();
        pb1->print();
        pb2->print();
    }
    


  • Letzteres hatte ich gesucht!
    Vielen Dank euch beiden!


Anmelden zum Antworten