Частные структуры С++
Я прочитал, что основные различия между классами и структурами (кроме функций) - это то, что члены класса по умолчанию являются частными, тогда как члены структуры по умолчанию являются общедоступными.
Это означает, что члены структуры могут быть частными. Мой вопрос: у вас есть члены частной структуры? И если вы можете, в чем цель использования частных членов? Как вы могли бы получить к ним доступ?
Ответы
Ответ 1
Структуры да могут иметь закрытых членов, вам просто нужно использовать спецификатор доступа для того же самого.
struct Mystruct
{
private:
m_data;
};
Только различие между структурой и классом:
- Спецификатор доступа по умолчанию является приватным для класса и public для struct
- inheritance defaults для private для класса и public для struct
Как вы можете получить к ним доступ?
Так же, как вы получаете доступ к закрытым членам класса. i.e: они могут быть доступны только внутри функций-членов структур, а не в производной структуре и т.д.
Ответ 2
Единственное различие между struct
и class
- доступ по умолчанию (за исключением некоторых странных ситуаций с шаблонами, см. комментарии Alf ниже). Это означает, что вы можете получить доступ к закрытым членам так же, как в классе:
struct foo {
int get_X() { return x; }
void set_X(int x_) { x = x_; }
private:
int x;
};
Используете ли вы struct
или class
, тогда это чисто вопрос стиля. Я склонен использовать struct
, когда все члены являются общедоступными (например, если это класс функтора без переменных-членов и только публичные функции).
Ответ 3
Одна вещь, которая делает это полезной, заключается в том, что вы также можете использовать ключевое слово друга в structs, поэтому частные члены могут использоваться и модифицироваться только этими конкретными функциями или классами или не то, что вы хотите изменить. Таким образом, пользователь не может самостоятельно изменять эти разделы. Они даже не появятся в функциях автозаполнения, по крайней мере, в визуальной студии.