2012-01-25 53 views
3

我读过(Scott Myers)继承破坏封装。当数据/内部方法是私有的(不受保护)时,封装是否被破坏?继承破解封装在C++

例如

class Vehicle 
{ 
    int color; 

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


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

我可以改变汽车的内部没有破汽车知道,正确吗?

回答

2

像“继承破坏封装”这样的短语通常不在上下文中。

该短语所指的是被继承的虚拟接口现在未被封装的事实。实际上,继承意味着某些隐藏的东西现在已经暴露。像protected成员和virtualprivate成员都是开放的派生类玩。

virtualprivate成员仍然隐藏。

+0

请您详细说明**虚拟私人会员** *是否都可以通过派生类*开放? –

0

嗯,我不知道Scott Myers说了些什么,但无论如何,按照您指定的方式,汽车方法只能访问汽车公共方法和属性,就像您创建汽车时一样对象(没有受保护的方法和属性),所以在这里没有封装突破,只有在基类没有被正确封装的情况下。您只能使用set_color(...)方法更改Car的颜色,因为int color是私有的(如果未指定,则类属性和函数是私有的)。