Interfaces



  • Hallo,

    ich bin C++ Neuling und versuche gerade sowas ähnliches wie Java Interfaces zu benutzen. Mein Lösungsversuch (siehe Unten) lässt sich leider nicht kompilieren (Probleme im InterfaceManager). Vielleicht kann mir von euch jemand Tipps geben.

    Danke schon mal,

    CPP_Noob

    PS: Ich möchte, wenn möglich, die "Pointerei" vermeiden und mit Referenzen arbeiten.

    #include <iostream>
    
    class Interface
    {
    public:
    	virtual int some_method() = 0;
    };
    
    class Interface_Impl : public Interface
    {
    public:
    	Interface_Impl() : m_value(1001) {}
    
    	virtual ~Interface_Impl() {}
    
    	virtual int some_method()
    	{
    		return m_value;
    	}
    
    protected:
    	int m_value;
    };
    
    class InterfaceManager
    {
    public:
    	InterfaceManager(const Interface& interface) : m_interface(interface)
    	{
    	}
    
    	Interface get_interface()
    	{
    		return m_interface;
    	}
    
    private:
    	Interface m_interface;
    };
    
    int main()
    {
    	Interface_Impl i;
    
    	InterfaceManager im(i);
    
    	std::cout << im.get_interface().some_method() << std::endl;
    }
    

    Compiler:
    main.cpp:32: Fehler: ungültiger abstrakter Rückgabetyp für Elementfunktion »Interface InterfaceManager::get_interface()«
    main.cpp:4: Anmerkung: denn die folgenden virtuellen Funktionen sind rein innerhalb »Interface«:
    main.cpp:6: Anmerkung: virtual int Interface::some_method()
    main.cpp:38: Fehler: Feld »InterfaceManager::m_interface« kann nicht als vom abstrakten Typ »Interface« deklariert werden
    main.cpp:4: Anmerkung: denn der Typ »Interface« hat rein virtuelle Funktionen
    main.cpp: In member function »Interface InterfaceManager::get_interface()«:
    main.cpp:32: Fehler: ungültiger abstrakter Rückgabetyp für Elementfunktion »Interface InterfaceManager::get_interface()«
    main.cpp:4: Anmerkung: denn der Typ »Interface« hat rein virtuelle Funktionen
    main.cpp:34: Fehler: es kann kein Objekt des abstrakten Typs »Interface« belegt werden
    main.cpp:4: Anmerkung: denn der Typ »Interface« hat rein virtuelle Funktionen
    main.cpp: In function »int main()«:
    main.cpp:47: Fehler: es kann kein Objekt des abstrakten Typs »Interface« belegt werden
    main.cpp:4: Anmerkung: denn der Typ »Interface« hat rein virtuelle Funktionen
    make: *** [main.o] Fehler 1



  • wenn du mit abstrakten klassen arbeitest, wirst du zur verwendung von pointern gezwungen. lässt sich nicht verhindern.

    private:
        Interface m_interface;
    

    will einen konrekten typen initalisieren, geht aber nicht.

    private:
        Interface *m_interface;
    


  • Nö, er kann auch Referenzen benutzen. Oder auch Smart-Pointer, wenn er Javaner ist. 😉


Anmelden zum Antworten