Да, возможно встретить ваши ограничения наследования переменных. Используйте друг классы. С семантикой дружбы, предоставляемой ключевым словом friend
в объявлении класса, вы можете создать производный класс, чтобы иметь доступ к закрытым членам его родительского класса. Ссылка содержит полное руководство по семантике дружбы.
Ваш код будет выглядеть так:
class A
{
private:
int x;
friend class B;
};
class B : public A
{
public:
int y;
};
class C : public B
{
public:
int z;
};
При этом class B
имеет доступ к private x
из class A
,но только изнутри определение class B
. Ваше ограничение наследования переменной выполнено, class B
содержит (и может использовать) x
и y
, в то время как class C
содержит y
и z
.
Другим способом может быть частное наследованиевот так:
class A
{
private:
int x;
};
class B : private A
{
public:
int y;
};
class C : public B
{
public:
int z;
};
Но это намного строже, чем friend
подход. Выберите тот, который соответствует вашим потребностям.