如何为派生类传播朋友

Mir*_*pas 24 c++ friend

我希望有一个类层次结构,并且只能在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)

通过这种方式,我可以访问它将是私有的字段.