我希望有一个类层次结构,并且只能在Factory中创建对象.
例:
class Base
{
protected:
Base(){};
virtual void Init(){};
friend class Factory;
};
class SomeClass : public Base
{
public://I want protected here! Now it's possible to call new SomeClass from anywhere!
SomeClass(){};
void Init(){};
};
class Factory
{
public:
template<class T>
T* Get()
{
T* obj = new T();
obj->Init();
return obj;
}
};
int main()
{
Factory factory;
SomeClass *obj = factory.Get<SomeClass>();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我希望只能从Factory创建对象,但我不想friend class Factory在从Base派生的每个类中声明.
有没有办法在派生类中传播朋友?有没有其他方法来实现这种行为?
Luc*_*nzo 11
不,这是故意不可能的.
是封装问题.
假设有一个管理任何密码的类"PswClass",这是与其他类级联的朋友:如果我从PswClass继承:
class Myclass : public PswClass {
.......
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我可以访问它将是私有的字段.
| 归档时间: |
|
| 查看次数: |
16598 次 |
| 最近记录: |