Я хотел бы указать несколько объектов с одинаковыми уровнями наследования и для каждого из этих уровней использовать одни и те же данные. Поэтому я думаю о наследовании и статических членах класса.Как делиться одними и теми же данными между несколькими экземплярами на уровнях наследования?
Это мой attempt:
#include <iostream>
class Father
{
public:
static int sValue;
inline int GetValue() { return sValue * 10; }
};
class Child1 : public Father
{
public:
};
class Child2 : public Father
{
public:
};
int Father::sValue = 0;
int main()
{
Child1 child1_1;
Child1 child1_2;
Child2 child2_1;
Child2 child2_2;
child1_1.sValue = 1;
child2_1.sValue = 2;
std::cout << child1_2.GetValue() << std::endl;
std::cout << child2_2.GetValue() << std::endl;
}
В моем примере оба Child1
экземпляры должны вернуть 10 с GetValue()
, и оба Child2
экземпляры должны вернуть 20 с помощью GetValue()
. Поскольку функция такая же, я не хочу переопределять ее для каждого ребенка (поэтому я поместил ее в Father
).
Проблема заключается в том, что также Child1
экземпляров возвращает 20 вызовов GetValue()
.
Таким образом, static
является общим для "основного" родителя, а не для ребенка.
В виду того что значение sValue
использовано в GetValue()
, его правильно поместить его здесь. Но я не могу отделить статические/одинаковые данные.
Как вы это сделаете?
Поместите статический член в каждый производный класс? – LogicStuff
@LogicStuff: нет, иначе я больше не могу использовать 'sValue' внутри GetValue() (которая является общей функцией) ... – markzzz
Затем создайте' virtual' функцию 'GetSValue', которая будет использоваться в' GetValue' , – LogicStuff