【发布时间】:2020-08-18 16:29:56
【问题描述】:
class A;
class B {
private:
int x = 3;
protected:
int y = 4;
public:
int k = 5;
};
我希望A 能够访问B 的public 和protected 成员,但不能访问其private 成员。
我不希望 A 派生自 B。
-在我的程序中,我有一个类A,它操作类B。我已经使用这两个类构建了一个系统,因此B 应该只能通过A 的protected 函数来操作A 的private 变量。
最优雅的方法是什么?以这种方式暴露变量是一种好习惯吗?
【问题讨论】:
-
你为什么不想从
B派生A?这正是protected成员访问的功能 -
@Odysseus 但是每个
A实例都是B实例。可能有很多原因表明这是不可取的。 -
这听起来像XY problem。当然,有一种更好的方法可以对您尝试建模的系统进行建模,而不会笨拙地耦合这两个类。 C++ 提供了两种耦合类的方法:继承(B 确实是 A,因此可以看到这一切)和友谊(A 完全信任 B)。即使这两者都应该谨慎使用(紧密耦合),像这样更复杂的可见性约束可能只会让人感到困惑。
-
@Miguel 是的——但这仍然是
protected的目的。所以重新安排课程对我来说似乎是合理的 -
@Odysseus 哺乳动物可以衍生自呼吸系统类;这并不意味着哺乳动物本身就是一个呼吸系统