Каждый экземпляр A / B имеет свои собственные переменные.
Это был бы правильный способ объявления и определения переменных?
Нет.Вы объявили A
члены как static
, что означает, что они являются переменными класса, а не переменными экземпляра.Каждый экземпляр не получает свою собственную копию.Вместо этого все они используют один и тот же экземпляр.
Make затем non- static
:
class A {
protected:
std::string const VAR1;
std::string VAR2;
};
... и тогда, конечно, вам не нужен глобальный инициализатор, поэтомуизбавиться от этого:
string const A::VAR1 = "blah";
string A::VAR2;
... и если вы хотите, чтобы VAR1
имел значение по умолчанию каждый раз, когда создается экземпляр A
, то вы можете сделать это в списке инициализатора класса (илив теле ctor, если ты панк :)):
A::A() : VAR1("blah") {};