C++中的继承是否会破坏封装性?

3

我读过Scott Myers的书,他说继承会破坏封装性。当数据和内部方法是私有的(而不是受保护的)时,封装性是否还存在呢?

例如:

class Vehicle
{
  int color;

public:
  void set_color();
  int get_color();
}


class Car: public Vehicle
{
public:
  void change_tires();
}

我可以在不影响汽车的情况下更改车辆内部,对吗?
2个回答

2

类似“继承破坏了封装性”这样的说法经常被断章取义。

这个说法指的是被继承的虚拟接口现在不再被封装。实际上,继承意味着某些原本隐藏的东西现在被暴露出来。像protected成员和virtual private成员这样的东西都可以由派生类使用。

virtual private成员仍然是隐藏的。


1
你能否详细说明一下“虚拟私有成员”是指“所有派生类都可以访问”的意思? - Alok Save

0

嗯,我不知道Scott Myers说了什么,但是无论如何,通过按照您指定的方式进行操作,汽车方法只能以与创建Vehicle对象时完全相同的方式访问Vehicle公共方法和属性(没有受保护的方法和属性),因此在这里没有破坏封装性,除非基类没有正确地封装。您只能使用set_color(...)方法更改Car的颜色,因为int color是私有的(如果未指定,则类属性和函数是私有的)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接