#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, если нужен хоть один закрытый член... Но, откровенно говоря, насколько же это неудобно - при изменении доступа нужно перемещать член в классе, интерфейс нужно всегда показывать только после внутренностей класса... Нет, пожалуй, все же удобство запоминания на одно ключевое слово меньше не в состоянии перевесить все преимущества, этим ключевым словом предоставляемые, нет? :)
Комментариев нет:
Отправить комментарий