Common protected data member in base class?
<p>I have a base class and several derived classes. The derived classes use some common data, can I just put those common data as protected member of the base class? I know the protected member breaks encapsulation sometimes, so I wonder if there is any good approach. </p>

<p>Here is a specific example:</p>

<pre><code>class Base{
public:
   virtual void foo() = 0;
   void printData();
protected:
   std::vector&lt;std::string&gt; mData;
}

class Dr1 : public Base{
public:
   virtual void foo(); //could change mData
}

class Dr2 : public Base{
public:
   virtual void foo(); //could change mData
}
</code></pre>

<p>If I put mData into Dr1 and Dr2 as private member, then I need to put it in both of them, and I can not have printData() in Base since printData() need access to mData unless I make printData() virtual and have identical function in both Dr1 and Dr2, which doesn't make much sense to me. </p>

<p>Is there a better way to approach this without using protected member? Thank you.</p>
