Частные структуры C ++ - PullRequest
       18

Частные структуры C ++

15 голосов
/ 10 декабря 2011

Я читал, что основные различия между классами и структурами (кроме функций) заключаются в том, что члены класса по умолчанию являются закрытыми, тогда как члены структуры по умолчанию являются общими.Мой вопрос: можете ли вы иметь членов частной структуры?И если вы можете, какова цель использования частных членов?Как бы вы даже получили к ним доступ?

Ответы [ 3 ]

24 голосов
/ 10 декабря 2011

Да, структуры могут иметь закрытые члены, вам просто нужно использовать спецификатор доступа для них.

struct Mystruct
{
    private:
       m_data;

};

Разница только между структурой и классом:

  • спецификатор доступапо умолчанию private для класса и public для struct
  • наследование по умолчанию private для class и public для struct

Как вы можете получить к ним доступ?
Так же, как вы получаете доступ к закрытым членамкласс.то есть: к ним можно получить доступ только внутри функций-членов структур, а не в производной структуре и т. д.

3 голосов
/ 10 декабря 2011

Разница только между struct и class является доступом по умолчанию (за исключением некоторых странных шаблонных ситуаций, см. Комментарии Альфа ниже). Это означает, что вы можете получить доступ к закрытым членам так же, как в классе:

struct foo {
  int get_X() { return x; }
  void set_X(int x_) { x = x_; }
private:
  int x;
};

Используете ли вы struct или class, это просто вопрос стиля. Я склонен использовать struct, когда все члены являются публичными (например, если это класс функторов без переменных-членов и только с открытыми функциями).

0 голосов
/ 04 апреля 2015

Одна вещь, которая делает это полезным, заключается в том, что вы также можете использовать ключевое слово друга в структурах, так что закрытые члены могут использоваться и модифицироваться только этими конкретными функциями или классами или что-то еще, что вы не хотите иметь возможность изменять его. Таким образом, пользователь не может изменять эти разделы самостоятельно. Они даже не будут отображаться в функциях автозаполнения, по крайней мере, в визуальной студии.

...