Нет никакого реального преимущества использования того по другому в C++, единственной разницей между структурой и классом является видимость по умолчанию, он - участники (значение по умолчанию структур общественности, значение по умолчанию классов к частному).
Лично, я склонен предпочитать структуры для типов POD и классы использования для всего остального.
Править: litb сделал правильное замечание в комментарии, таким образом, я собираюсь заключить ему в кавычки здесь:
одно важное другое различие - то, что структуры происходят из другой общественности классов/структуры по умолчанию, в то время как классы происходят конфиденциально по умолчанию.
Одна точка стороны - то, что структуры часто используются для совокупных структур инициализируемых данных, так как все нестатические элементы данных должны быть общедоступными так или иначе (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 };
struct
и class
имейте в виду точно то же самое в C++ за исключением того, что доступ по умолчанию для участников структуры и оснований является открытым, тогда как это является частным за классы. Я склоняюсь к, выбрал структуру для классов, которые только имеют общедоступных участников и классы для всего остального, но это - только проблема стиля.
Единственная разница между классом и структурой - то, что участники структуры общедоступны по умолчанию, и участники класса являются частными по умолчанию. Таким образом, как я говорю, идут с тем, какой бы ни один Вам нравится лучше всего. Я уверен, что существуют аргументы, которые будут сделаны, с точки зрения которого более читаем, но я действительно не думаю, что это - грандиозное предприятие.
По существу выбор между структурой и классом сводится к Вашему стилю и сколько Вы хотите ввести.
Если содержание типа не имеет никаких проблем выделения памяти (таких как простой интервал), то использование struct
прекрасен, если это - путь, которым Вы хотите пойти, и Вы приняли сознательное решение относительно этого, что можно выровнять по ширине тем, кто использует код. Однако, если какой-либо из участников является типом указателя, то необходимо думать трудно о проблемах управления памятью. Может все еще быть нормально использовать a struct
, но Вам, намного более вероятно, будут нужны деструктор и некоторые конструкторы, и так далее. В той точке Вы хотите a class
.
"(примечание: это будет только содержать переменные, никогда не будет функций)"
Никогда не хвастовство. Обычно "никогда" не означает "в конечном счете". Так как это имеет место, я предложил бы, чтобы Вы использовали класс. Тот путь, когда вещи изменяются, у Вас нет так много для изменения.
Java (и Python) люди ладил прекрасный со всем являющимся классом. Их никто не повредило не иметь эти специализированные бессистемные классы, что C++ называет "структуру".