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

时间:2011-01-25 16:35:11

标签: c++ oop inheritance private

如果我有两个课程AB,那么B不会A。换句话说,A是基类,B是派生类。

现在,假设班级Aprivate个成员。由于类B继承了类A,因此私有数据成员成为了类B的一部分。

正如我们所知,私有成员据说即使是派生类也不会被访问,但是,它们现在位于派生类中。在这种情况下,隐私的价值是什么?

感谢。

6 个答案:

答案 0 :(得分:3)

B的成员函数无法以任何方式使用它们,但它们对A的成员函数非常有用,B依次依赖它们。它只是另一层封装(B不应该关心如何实现A的功能。)

答案 1 :(得分:2)

好吧,因为它们是A类的私有,我会假设A类的实例将它们用于某些东西或其他东西。如果没有,可以删除它们。

答案 2 :(得分:2)

“私人”的意图是告诉编写B类的开发人员他们不应该访问该成员。

A类开发人员以某种方式使用该成员,而B类开发人员不需要关注该成员。

答案 3 :(得分:1)

B对象的A成员将是您的对象需要的任何成员,以便表示您使用它表示的内容。类'方法可能使用它们,你可能会调用一些A类方法。你应该只关心A的公共(或受保护)接口,并且使用它。

例如:如果A是具有写入和读取方法的TCP / IP协议套接字实现,则B可能是A上的SSL实现。您(基本上)重新定义读取和写入,以便进行加密,并且然后使用A :: read和A :: write来实际写入和读取套接字。您无需知道您的套接字(或TCP协议详细信息)在此设计中是什么,因此A为您抽象,并且您无法访问它。

答案 4 :(得分:0)

它会留下来 - 私人会员。

我不知道你在哪里看到他们不被访问?

答案 5 :(得分:0)

因为,不管你信不信,你不想把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。