Tengo una clase base y varias clases derivadas. Las clases derivadas usan algunos datos comunes, ¿puedo simplemente poner esos datos comunes como miembros protegidos de la clase base? Sé que el miembro protegido rompe la encapsulación a veces, así que me pregunto si hay algún buen enfoque.miembro de datos protegidos comunes en la clase base?
Aquí está un ejemplo específico:
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
}
Si pongo MDATA en DR1 y Dr2 como miembro privado, entonces tengo que ponerlo en los dos, y no puede tener PrintData() de la base ya que printData() necesita acceso a mData a menos que haga que printData() sea virtual y tenga una función idéntica tanto en Dr1 como en Dr2, lo cual no tiene mucho sentido para mí.
¿Hay alguna manera mejor de abordar esto sin utilizar un miembro protegido? Gracias.
Muchas gracias por su respuesta y la interesante historia. Sí, el mantenimiento también es mi preocupación. Acepté la otra respuesta ya que user168715 señaló una forma de resolver el problema. – EXP0