这里私人会员的价值是多少?

如果我有两个类
A
B
,那么
B
inhritsits
A
。换句话说,
A
是基类,
B
是派生类。 现在,假设班级
A
private
成员。由于班级
B
继承了班级
A
,私人数据成员成为班级
B
的一部分。 据我们所知,即使派生类也不会访问私有成员,但是,它们现在位于派生类中。在这种情况下,隐私的价值是什么? 谢谢。     
已邀请:
它们不能通过
B
的成员函数以任何方式使用,但它们对
A
的成员函数有用,而
B
依次依赖。它只是另一层封装(
B
不应该关心如何实现
A
的功能)。     
好吧,既然它们是A类私有的,我会假设A类的实例将它们用于某种东西或其他东西。如果没有,可以删除它们。     
“私人”的意图是告诉编写B类的开发人员他们不应该访问该成员。 A类开发人员以某种方式使用该成员,而B类开发人员不需要关注该成员。     
B对象的A成员将是您的对象需要的任何成员,以便表示您使用它表示的内容。类'方法可能使用它们,你可能会调用一些A类方法。您应该只关心A的公共(或受保护)接口,并使用它。 例如:如果A是具有写入和读取方法的TCP / IP协议套接字实现,则B可能是A上的SSL实现。您(基本上)重新定义读取和写入以便进行加密,然后使用A :: read和A :: write来实际写入和读取套接字。您无需知道您的套接字(或TCP协议详细信息)在此设计中是什么,因此A为您抽象,并且您无权访问它。     
它会留下来 - 私人会员。 我不知道你在哪里看到他们不被访问?     
因为,不管你信不信,你不想将B与A的实现细节结合起来。想象一下最简单的使用场景:
struct A
{
protected:
  int x;
};

struct B
{
  void f() { ... access x and use as input ... }
};
现在,让我们假设需要对您的产品进行更改,现在A没有x变量,而是获取值x以某种其他方式表示,组合可能。由于B直接访问成员,您必须更改您创建的任何B,以通过任何新的机制来获取x。你必须越多地改变问题的空间。 如果您改为将x设为私有成员并提供受保护的getter,则不会出现此问题。 同样,这是最简单的例子。通常,像x这样的值用于实现A的行为,B不应该关注行为的实现方式,也不应该使用它来访问muck。     

要回复问题请先登录注册