在不破坏封装的情况下访问基类元素
问题描述:
我已经创建了两个类A和B,其中B从类A继承。正如您所看到的,我有一个类A中的矢量,该类位于类的受保护部分中。我不确定使用保护是否是不好的做法?在不破坏封装的情况下访问基类元素
#include <vector>
class A
{
public :
A();
protected:
std::vector <std::string> a;
};
class B : A
{
public :
B();
void accessVector()
{
a.size();
}
private:
};
答
当A
使得数据成员a
保护,它是提供以下担保,从它派生的所有类:
“你可以做任何你喜欢a
没有告诉我这包括追加修改它的内容,删除项目,对它进行排序,从它移动,移动到它,或者使其状态不明确和/或不可知的我“。
请记住,任何人都可以创建一个派生自A
的类。
出于这个原因,所有意图和目的,保护成员是公共成员,因为派生类可以简单地说以下内容:
public:
using A::a;
这里开始一直向前,你会发现,仅存在两个显用例为protected
:
当一个基类定义了可能需要从同一functi的重写版本称为虚拟成员函数在派生类中。
当基类想要将'数据作为接口'暴露给派生类,而不是世界。
完全取决于您的设计,有时这是完全有效和有用的。存在'protected'关键字是有原因的。 – CoryKramer
_“我不确定使用保护是否是不好的做法?”_如果不好的做法取决于(语义)上下文。 –
通常情况下,当不希望对象/实例类(基类或派生类)访问这些成员时,可以使成员受到保护。但是如果是朋友课,这会被打破。 – sameerkn