Можно ли иметь статическую переменную-член, определенную в базовом классе, и иметь несколько производных классов, каждый из которых использует свой собственный экземпляр этой переменной-члена?
Следующий код успешно компилируется и выводит правильный вывод, но я все еще не уверен, что делать что-то подобное - хорошая практика. В следующем примере, как это может работать, если я явно определяю только один экземпляр s (путем вызова: string A :: s;), но на самом деле я использую 2 экземпляра?
class A
{
protected:
void SetS(string new_s){s = new_s;}
void PrintS(){cout << s << endl;};
private:
static string s;
};
class B : public A
{
public:
void foo(){ SetS("bbb"); PrintS();};
};
class C : public A
{
public:
void foo(){ SetS("ccc"); PrintS();};
};
string A::s;
int main()
{
B b;
b.foo(); // results in output: bbb
C c;
c.foo(); // results in output: ccc
b.foo(); // results in output: bbb
}