уникнути, представивши кожен об'єкт класу як покажчик на В«справжнійВ» об'єкт. Так як всі ці покажчики будуть мати однаковий розмір, а розміщення В«справжніхВ» об'єктів можна визначити у файлі, де доступна закрита частина, то це може вирішити проблему. Однак рішення передбачає додаткові посилання по пам'яті при зверненні до членів класу, (т.е включає щонайменше один виклик програм виділення і звільнення вільної пам'яті). p align="justify"> Але чому ж користувачам класу не дозволяється звертатися до закритих членам, чому їх опису повинні приводитися в заголовних файлах, які, як передбачається, користувач читає? Відповідь - ефективність. У багатьох системах і процес компіляції, і послідовність операцій, що реалізують виклик функції, простіше, коли розмір автоматичних об'єктів відомий під час компіляції. p align="justify"> Подібно функціям, класи також можуть бути параметризовані одним або декількома типами. Типовим прикладом такої можливості можуть служити класи з невідомими заздалегідь типами елементів, які реалізуються за допомогою шаблонів класів. В якості прикладу розглянемо шаблон класу, який реалізує чергу. p align="justify"> Файл UnQLimSz.h
Містить стандартні і призначені для користувача файли, що включаються та визначення шаблонного класу для роботи з універсальної чергою обмеженого розміру на базі масиву. У шаблоні класів реалізовані наступні операції з чергою:
* ініціалізація черги (конструктор);
* руйнування черги із звільненням зайнятої динамічної пам'яті (деструктор);
* занесення елемента з лівого кінця;
* занесення елемента з правого кінця;
* витяг елемента з лівого кінця;
* витяг елемента з правого кінця;
* друк стану черги з використанням покажчика на лівий кінець черги;
* друк стану черги з використанням покажчика на правий кінець черги.
Додавання елемента в правий кінець черги UnQueueLimSize :: AddRight (
// false - елемент не добавленT
& add)// Дане для добавляемог елемента
{
// Черга заповнена? (Size> = MaxSize)
{false;
}
// Додаємо елемент у чергу = (Right +1)% MaxSize; pQueue [Right] = add; + +; true;
}
// Додавання елемента в лівий кінець черги UnQueueLimSize :: AddLeft (
// false - елемент не добавленT
& add)// Дане для додається елемента
{
// Черга заповнена? (Size> = MaxSize)
{false;
}
// Додаємо елемент у чергу [Left] = add; = ...