如果我希望子类向父类添加功能,我应该保护我的属性吗?

时间:2015-02-03 05:30:49

标签: c++ oop inheritance

假设我有一个Image类,它对图像文件执行操作,例如使图像变为黑白,灰度等。图像字节存储在属性数组中。现在我希望其他程序员根据需要为Image类添加功能。我假设这是通过创建自己继承自Image的类来完成的。他们可以添加的功能示例包括旋转图像,裁剪图像等。

我的问题是在这种情况下我应该怎么做以允许其他程序员向Image类添加功能,如果我创建包含图像字节protected的数组,这将只允许子项类直接修改它?

2 个答案:

答案 0 :(得分:0)

在数组上使用protected属性,最好使用公共继承访问说明符。这允许子类保持相同的公共接口,而不必暴露太多的实现细节,并且仍允许子类修改数组。

正如您所建议的那样,这是访问说明符的用途。

http://www.cplusplus.com/doc/tutorial/inheritance/

http://en.wikibooks.org/wiki/C++_Programming/Classes/Inheritance

答案 1 :(得分:0)

首先要考虑您的类是否需要维护任何不变量 - 例如,图像成员的维度不会被派生类更改,因为单独的{{1}基类中的数据成员可能不同步,或者派生类没有重新定位指向数据的指针,因为某些其他私有成员存储指向要跟踪的数据的指针。像素位置或其他。因此,有一个过程可以决定您的类中专属于哪种功能,以及您可以授予派生类的访问权限,而不会轻易破坏您的功能。您可能仍然必须“信任”派生类不要做奇怪的事情,但是您应该尝试使其难以做到,并且很好地记录您的基类。如果你想了解这类事情,你可以合理地从Liskov Substitution Principle开始。