I want to create a parent class Base
which has factories for its subclasses Derived1
, Derived2
etc. The constructor of Base
and all its derived classes should be private. I try to do it this way:
base.h:
class Derived1;
class Base
{
protected:
Base ();
public:
Base *createDerived1 ();
}
#include "derived1.h"
derived1.h:
#include "base.h"
class Derived1 : public Base
{
friend class Base;
private:
Derived1 ();
}
derived1.cpp:
Derived1::Derived1 ()
: Base ()
{
}
base.cpp:
Base *Base::createDerived1 ()
{
return new Derived1 (); // error C2248: 'Derived1::Derived1' : cannot access private member declared in class 'Derived1'
}
However, I cannot access the private constructor inside the factory, despite declaring Base
a friend class of Derived1
. Am I doing something wrong, or there is no possibility to have the parent class as friend and I should make constructors of Derived
classes public?