Страницы

Поиск по вопросам

пятница, 19 октября 2018 г.

Зачем нужен спецификатор PRIVATE в C++

Зачем нужен спецификатор private в C++, если по умолчанию итак все функции и переменные являются закрытыми?


Ответ

Например, потому, что в структуре по умолчанию все функции и поля являются открытыми
Кроме того, текстовый порядок полей влияет на порядок их инициализации в конструкторе! Поэтому просто так переставлять поля класса нельзя, это может изменить смысл программы.
Пример. Допустим, что мы хотим, чтобы поле len было открытым, а поле data — закрытым.
class MyString { public: unsigned len; private: char* data; public: MyString(const char* s) : len(std::strlen(s)), data(new char[len + 1]) { std::memcpy(data, s, len + 1); } // ... };
Мы не можем переставить местами len и data, потому что инициализаторы в конструкторе выполняются в том порядке, в котором указаны поля, а не в том порядке, в котором они написаны в коде! А значит, без private не обойтись.

Комментариев нет:

Отправить комментарий