【发布时间】:2017-01-23 16:11:44
【问题描述】:
我在 C++ 中有一个基类,它有一些受保护的成员变量(尽管在这种情况下,我认为它是受保护的还是私有的并不相关)。
我有一个派生自这个基类的派生类。其中,有一个公共函数创建基类的对象并返回该对象。但是,在该函数中,我需要能够将受保护的成员变量设置为特殊状态。
例子:
class Base
{
protected:
int b_value;
};
class Derived : public Base
{
public:
Base createBase()
{
Base b;
b.b_value = 10;
return b;
}
};
我特别希望派生类能够受保护的成员变量。我不想要基类中的公共访问器方法。
我最初试图通过使派生类的 createBase() 函数成为基类的朋友来解决这个问题。像这样:
class Base
{
protected:
int b_value;
friend Base Derived::createBase();
};
class Derived : public Base
{
public:
Base createBase()
{
Base b;
b.b_value = 10;
return b;
}
};
如您所见,由于尚未定义 Derived,因此无法编译。如果重要的话,这两个类是在单独的头文件中定义的。我想描述这个问题的一种方式是“鸡和蛋”问题,其中一个需要另一个。
我觉得这一定是“我没有正确设计我的课程,需要重新考虑我是如何做到这一点的”,但我不知道如何让它发挥作用。
【问题讨论】:
标签: c++ class inheritance friend