Программирование

JAVASCRIPT
Языки программирования
Статьи
Каталог популярных сайтов

Инкапсуляция

Основным способом организации информации в C++ являются классы. В отличие от структуры (struct) языка C, которая может состоять только из полей и вложенных типов, класс (class) C++ может состоять из полей, вложенных типов и функций-членов (member functions). Инкапсуляция в С++ реализуется через указание уровня доступа к членам класса: они бывают публичными (открытыми, public), защищёнными (protected) и собственными (закрытыми, приватными, private). В C++ структуры формально отличаются от классов лишь тем, что по умолчанию члены и базовые классы у структуры публичные, а у класса — собственные.

Доступ private protected public
Сам класс да да да
Друзья да да да
Наследники нет да да
Извне нет нет да

Проверка доступа происходит во время компиляции, попытка обращения к недоступному члену класса вызовет ошибку компиляции.

Пример класса, реализующего одномерный массив (это просто иллюстрация, а не образец дизайна!):

class Array
{
public:
Array() :
len(0),
val(NULL)
{}

Array(int _len) :
len(_len)
{
val = new double[_len];
}

Array(const Array & a);
~Array()
{
Free();
}

inline const double & Elem(int i) const
{
return val[i];
}

inline void ChangeElem(int i, double x)
{
val[i] = x;
}

protected:
void Alloc(int _len)
{
if (len == 0)
Free();

len = _len;
val = new double[len];
}

void Free()
{
delete [] val;
len = 0;
}

int len;
double * val;
};

Здесь класс Array имеет 2 публичных функции-члена, 2 защищённых поля, 3 публичных конструктора и публичный деструктор. Описатель inline означает подсказку компилятору, что вместо вызова функции её код следует встроить в точку вызова, чем часто можно достичь большей эффективности.

1-2-3

Hosted by uCoz