I want to create a class that is a subclass of two classes that have a common virtual base class. Furthermore, I want this class to be abstract (not be able to create instances of it, but also not needing to call the ctor of the virtual base class).
Sample code:
#include <cstdio>
class CommonBaseClass {
public:
virtual void DoSomething() = 0;
virtual void DoSomethingElse() = 0;
CommonBaseClass(int a) {}
};
class ClassA : public virtual CommonBaseClass {
public:
virtual void DoSomething() override {
printf("SOMETHING\n");
}
ClassA() {};
};
class ClassB : public virtual CommonBaseClass {
public:
virtual void DoSomethingElse() override {
printf("SOMETHING ELSE\n");
}
ClassB() {};
};
class TargetClass : //I will never instantiate this class
public ClassA,
public ClassB
{
public:
TargetClass() : ClassA(), ClassB() {} //I don't want to call the CommonBaseClass ctor
};
class SubclassOfTarget :
public TargetClass
{
public:
SubclassOfTarget(int a) : CommonBaseClass(a), TargetClass()
{}
};
int main()
{
SubclassOfTarget c(15);
c.DoSomething();
c.DoSomethingElse();
}
If you try to compile this program, you will see that the compiler complains that TargetClass
does not call the ctor of CommonBaseClass.