在不破坏封装的情况下访问基类元素

时间:2016-06-08 11:19:02

标签: c++ class inheritance base

我创建了两个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:

};

1 个答案:

答案 0 :(得分:2)

A使数据成员a受到保护时,它会为从中派生的所有类提供以下保证:

&#34;你可以在不告诉我的情况下对a做任何你喜欢的事。这包括附加到它,修改其内容,删除项目,对其进行排序,从中移动,移动到它以及以其他方式使其状态未定义和/或对我来说是不可知的。

请记住,任何人都可以创建一个派生自A的类。

出于这个原因,对于所有意图和目的,受保护的成员公共成员,因为派生类可能只是说出以下内容:

public:
using A::a;

从这里开始并向前发展,您会发现protected只有两个合理的用例:

  • 当基类定义可能需要从派生类中相同函数的重写版本调用的虚拟成员函数时。

  • 当基类想要将数据公开为接口&#39;到派生类,但不是世界。