Is there a way to explicitly declare a base class as abstract in C++?
I know that I can create a pure virtual function in the class which will implicitly declare a class as abstract. However, I don’t want to have to create a dummy function just to define in in derived classes.
I could also make the constructor protected, which would prevent the instantiation of the object, but that doesn’t actually mark the class as abstract.
So, is there a way to do this? (I am using C++11, if that added a way to do this, but I didn’t find anything that looked right)
You can make the destructor pure-virtual. Since you always need a destructor, there’s no additional mental cost:
(You do of course need an implementation of the destructor, so you have to provide one out-of-line.)
You can still make the destructor
protected, which is good practice following the “make non-leaf classes abstract” rule.Example: