Ich würde gerne Schnittstellen in C++ wie in Java oder C# verwenden. Ich habe beschlossen, rein abstrakte Klassen mit Mehrfachvererbung zu verwenden, aber irgendetwas ist furchtbar falsch, wenn ich die Schnittstelle spezialisiere:
class Interface
{
public:
virtual int method() = 0;
};
// Default implementation.
class Base: virtual public Interface
{
public:
virtual int method() {return 27;}
};
// specialized interface
class Interface2: public Interface
{
public:
virtual int method() = 0;
// some other methods here
};
// concrete class - not specialised - OK
class Class: public virtual Interface, public virtual Base
{
};
// concrete class - specialised
class Class2: public Interface2, public Base
{
};
int main()
{
Class c;
Class2 c2;
return 0;
}
Warnung 1 Warnung C4250: 'Klasse' : erbt 'Base::Base::method' über Dominanz 30
Fehler 2 Fehler C2259: 'Klasse2': kann abstrakte Klasse nicht instanziieren 42
Wie geht man dabei richtig vor?