我有A班。我有B班。我有很多班来自B班。
我想实现这一点:B的衍生物应该可以访问A的受保护变量。每个变量都包含A的实例,这需要大量的内存。 所以我猜这次公共继承不是一个好主意。我该如何解决这个问题? 谢谢!
答案 0 :(得分:5)
您可以使用friend
和访问者功能执行此操作。这确实可以信任B
以保持A
的私有性 - 看不到让仅 B
和子类只访问的好方法/ em> A
的受保护成员,除非A
和B
之间存在继承关系。
class A {
friend class B;
protected:
int X;
};
class B {
protected:
static int getX(A const & a) { return a.X; }
};
class C : public B {
public:
void foo(A const & a) { int bar = getX(a); }
};
答案 1 :(得分:0)
制作派生自A的B朋友的课程。
答案 2 :(得分:0)
据我所知,B
的孩子与班级A
无关,因此不应该访问A
的非公开部分。< / p>
在A
子类中访问B
数据的正确方法是通过A
的公共接口。如果这样的公共接口不够用,那么这就是一个信号,要么你正在尝试做一些设计不好的事情,要么需要改进A
的公共接口。