У меня есть базовый класс и несколько производных классов. Производные классы используют некоторые общие данные. Могу ли я просто поместить эти общие данные в качестве защищенного члена базового класса? Я знаю, что защищенный элемент иногда нарушает инкапсуляцию, поэтому мне интересно, есть ли какой-нибудь хороший подход.
Вот конкретный пример:
class Base{
public:
virtual void foo() = 0;
void printData();
protected:
std::vector<std::string> mData;
}
class Dr1 : public Base{
public:
virtual void foo(); //could change mData
}
class Dr2 : public Base{
public:
virtual void foo(); //could change mData
}
Если я помещаю mData в Dr1 и Dr2 как закрытый член, тогда мне нужно поместить их в оба из них, и у меня не может быть printData () в Base, так как printData () нужен доступ к mData, если я не сделаю printData () виртуальные и имеют идентичные функции как в Dr1, так и в Dr2, что не имеет особого смысла для меня.
Есть ли лучший способ подойти к этому без использования защищенного члена? Спасибо.