我要创造出有工厂,它的子类Derived1
,Derived2
等Base
及其所有派生类应该是私有的构造一个父类Base
。我尝试做这种方式:朋友父类不能访问私有的构造在孩子
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'
}
但是,我无法访问工厂内的私有构造函数,尽管声明Base
的朋友类为Derived1
。我做错了什么,或者没有可能将父类作为朋友,我应该让Derived
类的构造函数公开吗?
对,但实际上我的代码中的'Base'构造函数是'protected',我把它错误地发布为'private'。修正了,谢谢。 –
@AntonPoznyakovskiy,PLZ检查更新的答案。 – Rakib
但是我声明Base是Derived的一个朋友,它应该提供对Derived to Base的所有元素的访问,不是吗? –