Паттерн: Компоновщик (Composite)
Фрагмент: Composite/Component/Leaf, операция GetComposite [C++]
  1. class Composite;
  2. class Component {
  3. public:
  4. //...
  5. virtual Composite* GetComposite() { return 0; }
  6. };
  7. class Composite : public Component {
  8. public:
  9. void Add(Component*);
  10. // ...
  11. virtual Composite* GetComposite(} { return this; }
  12. };
  13. class Leaf : public Component {
  14. // ...
  15. };