Подтвердить что ты не робот

Структуры против классов в С++

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

Изменить: Нашли эти ссылки при чтении материала. Переполнение стека было указано после того, как вопрос был отправлен:

Когда вы должны использовать класс vs a struct в С++?
Каковы различия между структурой и классом в С++?

4b9b3361

Ответ 1

Технически, единственное различие между ними состоит в том, что структуры являются общедоступными: по умолчанию и классы являются частными:

Кроме этого, технических различий нет.

struct vs class затем становится чисто выразительным нюансом языка.

Как правило, вы избегаете применения сложных методов в структуре, и большинство членов данных structs остаются публичными. В классе вы хотите обеспечить сильную инкапсуляцию.

struct = данные общедоступны, с очень простыми вспомогательными методами

class= сильно инкапсулирован, данные модифицируются/доступны только с помощью методов

Ответ 2

Я использую structs для простых контейнеров типов, которые не содержат конструкторов или операторов.

Классы для всего остального.

Ответ 3

Используйте структуру, когда вам просто нужно "ведро вещей", у которого нет логических инвариантов, которые вам нужно сохранить. Используйте класс для чего-либо еще.

Смотрите также, что Часто задаваемые вопросы по С++ в теме.

Ответ 4

Использовать класс, если у вас есть методы, структура, если нет.

Класс должен скрыть все его внутренние элементы, только разоблачая методы или свойства. Структура имеет тенденцию раскрывать все ее внутренние элементы и не имеет методов доступа.

Если только один бит кода обращается к некоторым (связанным) данным, структура может быть совершенно разумной. Если несколько битов кода нуждаются в изменении данных или если что-то немного сложнее, класс будет лучше.

Ответ 5

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

Если вы используете С++ для использования возможностей OO, лучше всего использовать классы/объекты, которые более естественны.

Ответ 6

Я всегда использую класс, даже для только контейнеров, для согласованности. Его чисто выбор стиля, поскольку разница между ними незначительна.

Ответ 7

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

Кроме того, класс более уместен, если вам нужно выполнить какие-либо проверки целостности самих данных.

Ответ 9

Лично я использую structs, когда мне нужно только контейнер для данных (без функций-членов). В противном случае я использую классы.

Единственный раз, когда я делаю исключение из этого правила, - если мне нужен простой функтор: например,

struct compare { bool operator() { ... } };
sort(v.begin(), v.end(), compare());

Необходимость метки public: просто загромождает ненужный код.

Ответ 10

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

Тем не менее, есть некоторые ожидания и естественные тенденции, отчасти потому, что структуры на С++ происходят от C.

Мой подход: если у него есть личные данные, конструктор/деструктор или любые сложные функции-члены (которые делают больше, чем просто преобразование при установке/получении и т.д.), используйте класс.