Зачем нужен спецификатор 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 не обойтись.
Комментариев нет:
Отправить комментарий