Класс по сравнению со Структурой для данных только?

измените


на


и, пожалуйста, проверьте этот ответ второй ответ, который я имею в виду.

10
задан Community 23 May 2017 в 12:07
поделиться

7 ответов

Нет никакого реального преимущества использования того по другому в C++, единственной разницей между структурой и классом является видимость по умолчанию, он - участники (значение по умолчанию структур общественности, значение по умолчанию классов к частному).

Лично, я склонен предпочитать структуры для типов POD и классы использования для всего остального.

Править: litb сделал правильное замечание в комментарии, таким образом, я собираюсь заключить ему в кавычки здесь:

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

21
ответ дан 3 December 2019 в 14:00
поделиться

Одна точка стороны - то, что структуры часто используются для совокупных структур инициализируемых данных, так как все нестатические элементы данных должны быть общедоступными так или иначе (C++ 03, 8.5.1/1).

struct A {  // (valid)
{
   int a;
   int b;
} x = { 1, 2 };

struct A {  // (invalid)
private:
   int a;
   int b;
} x = { 1, 2 };

class A {  // (invalid)
   int a;
   int b;
} x = { 1, 2 };

class A {  // (valid)
public:
   int a;
   int b;
} x = { 1, 2 };

class A {  // (invalid)
public:
   int a;
private:
   int b;
} x = { 1, 2 };
8
ответ дан 3 December 2019 в 14:00
поделиться

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

6
ответ дан 3 December 2019 в 14:00
поделиться

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

3
ответ дан 3 December 2019 в 14:00
поделиться

По существу выбор между структурой и классом сводится к Вашему стилю и сколько Вы хотите ввести.

  • Если у Вас только есть общедоступные участники в классе/структуре, Вы могли бы также использовать ключевое слово структуры. Это сохранит Вас имеющий необходимость вывести "общественность": позже.
  • Другая причина предпочесть структуру классу состояла бы в том, чтобы неявно зарегистрировать намерение объекта. Таким образом, Вы сделали бы структуры типов POD (даже если бы они содержат конструкторов и некоторые статические вспомогательные методы и т.д.), и Вы использовали бы класс для всех других "регулярных" классов.
1
ответ дан 3 December 2019 в 14:00
поделиться

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

0
ответ дан 3 December 2019 в 14:00
поделиться

"(примечание: это будет только содержать переменные, никогда не будет функций)"

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

Java (и Python) люди ладил прекрасный со всем являющимся классом. Их никто не повредило не иметь эти специализированные бессистемные классы, что C++ называет "структуру".

-1
ответ дан 3 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: