gpt4 book ai didi

c++ - 如何为派生类传播 friend

转载 作者:IT老高 更新时间:2023-10-28 13:01:27 26 4
gpt4 key购买 nike

我希望有一个类层次结构,并且只能在工厂内部从它创建对象。

例子:

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>();
}

我的问题是我希望能够仅从 Factory 生成对象,但我不想在从 Base 派生的每个类中声明 friend class Factory

有没有办法在派生类中传播 friend ?有没有其他方法可以实现这种行为?

最佳答案

不,这是故意不可能的。

是封装的问题。

假设有一个管理任何密码的类“PswClass”,它与其他类是级联 friend :如果我从 PswClass 继承:

 class Myclass : public PswClass {
.......
}

通过这种方式,我也许可以访问私有(private)的字段。

关于c++ - 如何为派生类传播 friend ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com