Разумно ли делать что-то подобное?
Примечание: это минимальный рабочий пример.
class A {
public:
int getX() { return x; }
protected:
int x;
virtual void setX(int newX) = 0;
};
// Children can modify X
class Can_Modify_X : public A {
protected:
void setX(int newX) { x = newX; }
private:
using A::x;
};
// Children can't modify X
class Can_Not_Modify_X : public A {
private:
void setX(int newX) { }
using A::x;
};
Я знаю, что не могу просто скрыть функцию, потому что это нарушило бы принцип Лискова, но выполнение private
наследования и повторное указание всех общедоступных методов кажется действительно излишним.
Два класса должны иметь общего родителя (даже если это непосредственно один из них) и не должны иметь возможности изменять x
напрямую.
БОНУС: может ли кто-нибудь указать мне где-нибудь, определяющее точное поведение using
в этом случае? Я пытался погуглить, но с очень небольшим успехом.