Страницы

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

пятница, 13 декабря 2019 г.

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

#cpp #классы


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


Ответы

Ответ 1



Например, потому, что в структуре по умолчанию все функции и поля являются открытыми. Кроме того, текстовый порядок полей влияет на порядок их инициализации в конструкторе! Поэтому просто так переставлять поля класса нельзя, это может изменить смысл программы. Пример. Допустим, что мы хотим, чтобы поле 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 не обойтись.

Ответ 2



Нет, конечно, можно сначала в классе описывать закрытые члены и закрытые функции, а только потом открытые... И никогда не пользоваться struct, если нужен хоть один закрытый член... Но, откровенно говоря, насколько же это неудобно - при изменении доступа нужно перемещать член в классе, интерфейс нужно всегда показывать только после внутренностей класса... Нет, пожалуй, все же удобство запоминания на одно ключевое слово меньше не в состоянии перевесить все преимущества, этим ключевым словом предоставляемые, нет? :)

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

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