If a class is always going to be inherited, does it make sense to make the constructor protected
?
class Base
{
protected:
Base();
};
class Child : protected Base
{
public:
Child() : Base();
};
Thanks.
If a class is always going to be inherited, does it make sense to make the constructor protected
?
class Base
{
protected:
Base();
};
class Child : protected Base
{
public:
Child() : Base();
};
Thanks.
That only makes sense if you don't want clients to create instances of Base
, rather you intend it to be base-class of some [derived] classes, and/or intend it to be used by friends of Base
(see example below). Remember protected
functions (and constructors) can only be invoked from derived classes and friend
classes.
class Sample;
class Base
{
friend class Sample;
protected:
Base() {}
};
class Sample
{
public:
Sample()
{
//invoking protected constructor
Base *p = new Base();
}
};
If it's always going to be a base (a "mixin"), yes. Keep in mind a class with pure virtual functions will always be a base, but you won't need to do this since it cannot be instantiated anyway.
Also, give it either a public virtual destructor or a protected non-virtual destructor.