Контейнерні класи

Класи, що містять у своєму описі один або декілька об’єктів або вказівників на об’єкти, носять назву контейнерних класів (class containers). В даному випадку між класами має місце відношення типу «містить». Найчастіше таку побудову опису класів підказує логіка програми, адже не завжди лише за допомогою успадкування вдається адекватно відобразити всю сукупність складних взаємовідношень між класами.

Прикладами контейнерних класів можуть служити класи користувача, що описують масиви, лінійні списки або стеки. Для кожного типу такого контейнеру можна визначити стандартні методи роботи з його елементами, які не залежать від конкретного типу даних, що зберігається у контейнері, тому один і той самий вид контейнеру можна використовувати для зберігання та обробки даних різних типів. Ця можливість реалізується за допомогою шаблонів класів.

На сьогодні є добре відомою стандартна C++ бібліотека шаблонів STL (Standart Template Library), яка містить основні структури даних для написання програм, такі як вектори, черги, різновиди списків, множини та словники.

Вкладені класи

Іноді виникають ситуації, коли при створенні одного класу в середині його опису можуть бути описані інші класи. У таких випадках такі класи називають вкладеними класами (nested classes), а клас, що їх об’єднує, - клас с об’єктною ідентичністю (object identity).

Такий підхід широко застосовується у широковідомій технології об’єктів COM (Component Object Model), основна з цілей якої полягає у відокремленні інтерфейсу класу від його реалізації.

Локальні класи

Іноді клас може бути описаний в середині функції, він носить назву локального класу (local class). Функція, в якій описаний локальний клас, не має спеціального доступу до членів локального класу.

Об’єкт локального класу може бути створений лише в межах функції, в області дії опису класу. Усі функції-члени локального класу повинні бути описаними в середині описаного класу, тобто бути inline-функціями за замовчуванням.

Локальні класи можуть бути корисними в особливих ситуаціях, коли об’єкти мають обмежений час існування у програмі, або у тих випадках, коли вимагається гарантоване вивільнення пам’яті під великі масиви тимчасових об’єктів, які вже виконали необхідні дії.