Common protected data member in base class?
Posted
by EXP0
on Stack Overflow
See other posts from Stack Overflow
or by EXP0
Published on 2010-06-10T21:37:35Z
Indexed on
2010/06/10
21:52 UTC
Read the original article
Hit count: 163
c++
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.
Here is a specific example:
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
}
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.
Is there a better way to approach this without using protected member? Thank you.
© Stack Overflow or respective owner