我读到(Scott Myers)说继承破坏了封装。当数据/内部方法是私有的(不受保护的)时,是否破坏了封装?
例如:
class Vehicle
{
int color;
public:
void set_color();
int get_color();
}
class Car: public Vehicle
{
public:
void change_tires();
}
我可以在不破坏汽车的情况下改变汽车的内部结构,对吗?
发布于 2012-01-25 02:29:22
像“继承中断封装”这样的短语经常被断章取义。
这句话指的是这样一个事实:继承的虚拟接口现在没有封装。实际上,继承意味着某些隐藏的东西现在被暴露了。像protected
成员和virtual
private
成员这样的东西都可以通过派生类来使用。
非virtual
private
成员仍处于隐藏状态。
发布于 2012-01-25 02:20:03
好吧,我不知道Scott Myers说了什么,但是不管怎样,通过您指定的方式,car方法只能访问Vehicle公共方法和属性,就像您创建Vehicle对象时一样(没有受保护的方法和属性),所以只有在基类没有正确封装的情况下,才不会破坏封装。您只能使用set_color(...)更改汽车的颜色方法,因为int color是私有的(如果未指定,类属性和函数就是私有的)。
https://stackoverflow.com/questions/8996960
复制相似问题