如果我有两个课程A
和B
,那么B
不会A
。换句话说,A
是基类,B
是派生类。
现在,假设班级A
有private
个成员。由于类B
继承了类A
,因此私有数据成员成为了类B
的一部分。
正如我们所知,私有成员据说即使是派生类也不会被访问,但是,它们现在位于派生类中。在这种情况下,隐私的价值是什么?
感谢。
答案 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。