Поскольку в С++ вложенные классы разрешены (см. п. 9.7 в [1]), нужно выяснить, могут ли они участвовать в наследовании. Собственно, возникают три вопроса:
1. Может ли внешний класс наследовать от вложенного класса?
2. Может ли вложенный класс наследовать от внешнего класса?
3. Может ли вложенный класс наследовать от другого вложенного класса? Ответ на все три вопроса — да! Простой пример демонстрирует это (листинг 8.8).
Листинг 8.8. Наследование и вложенные классы
class А {}: // внешний класс
class В { public:
class С: public А // вложенный класс наследует от внешнего
О:
}:
class D: public В::С // внешний класс наследует от вложенного
{}:
class Е
{ class F: public В::С // вложенный класс наследует от вложенного
{};
};
Таким образом, ограничений в наследовании вложенных классов нет. Единственное, за чем нужно следить, — видимость базового класса в точке наследованная. Например, от вложенного класса Е: : F «снаружи» наследовать не получится, так как класс находится в приватной части класса Е и невидим вне его. Однако вполне допустимо, чтобы еще один вложенный класс внутри Е наследовал от вложенного класса Е: : F, например:
class Е
{ class F: public В::С {}:
class G: public F {}:
}:
|