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

问题描述:

我已经创建了两个类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

完全取决于您的设计,有时这是完全有效和有用的。存在'protected'关键字是有原因的。 – CoryKramer

+0

_“我不确定使用保护是否是不好的做法?”_如果不好的做法取决于(语义)上下文。 –

+0

通常情况下,当不希望对象/实例类(基类或派生类)访问这些成员时,可以使成员受到保护。但是如果是朋友课,这会被打破。 – sameerkn

A使得数据成员a保护,它是提供以下担保,从它派生的所有类:

“你可以做任何你喜欢a没有告诉我这包括追加修改它的内容,删除项目,对它进行排序,从它移动,移动到它,或者使其状态不明确和/或不可知的我“。

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

出于这个原因,所有意图和目的,保护成员公共成员,因为派生类可以简单地说以下内容:

public: 
using A::a; 

这里开始一直向前,你会发现,仅存在两个显用例为protected

  • 当一个基类定义了可能需要从同一functi的重写版本称为虚拟成员函数在派生类中。

  • 当基类想要将'数据作为接口'暴露给派生类,而不是世界。