Есть ли какие-либо преимущества перед использованием класса над структурой в подобных случаях? (примечание: он будет содержать только переменные, функций никогда не будет)
class Foo {
private:
struct Pos { int x, y, z };
public:
Pos Position;
};
Против:
struct Foo {
struct Pos { int x, y, z } Pos;
};
Похожие вопросы:





Нет никакого реального преимущества в использовании одного над другим, в С ++ единственная разница между структурой и классом - это видимость ее членов по умолчанию (структуры по умолчанию являются общедоступными, классы по умолчанию - частными).
Лично я предпочитаю структуры для типов POD и использую классы для всего остального.
Обновлено: литб сделал хорошее замечание в комментарии, поэтому я собираюсь процитировать его здесь:
one important other difference is that structs derive from other classes/struct public by default, while classes derive privately by default.
еще одно важное отличие состоит в том, что по умолчанию структуры являются производными от других классов / структур, а классы по умолчанию являются производными от частных.
"(примечание: он будет содержать только переменные, функций никогда не будет)"
Никогда - громкое слово. Обычно «никогда» означает «рано или поздно». В этом случае я предлагаю вам использовать класс. Таким образом, когда что-то меняется, вам нечего менять.
Люди, занимающиеся Java (и Python), прекрасно ладили со всем, что было классом. Им не повредило отсутствие этих специализированных классов без методов, которые C++ называет «структурой».
Да, но есть случаи, когда вы должны использовать составные типы C++ с кодом C, системными вызовами и т. д. Чтобы подчеркнуть, что тип данных C++ является и останется не чем иным, как простыми старыми данными C, я предпочитаю обозначать его как структуру . Во всех остальных случаях я использую классы.
И, следовательно, преобразовать его в класс довольно тривиально в маловероятном случае, когда он станет полезным. Бьюсь об заклад, в VS есть инструмент, который сделает это за вас - и в другом месте, если вы не используете VS.
Разница Только между классом и структурой заключается в том, что члены структуры по умолчанию являются общедоступными, а члены класса по умолчанию являются частными. Поэтому я советую выбрать тот, который вам больше нравится. Я уверен, что есть аргументы в пользу того, какой из них более читабельный, но я действительно не думаю, что это имеет большое значение.
struct и class означают точно то же самое в C++, за исключением того, что доступ по умолчанию для членов структуры и баз является общедоступным, тогда как он является частным для классов. Я предпочитаю выбирать структуру для классов, которые имеют только общедоступные члены, и классы для всего остального, но это только проблема стиля.
Если содержимое типа не имеет проблем с распределением памяти (например, простой int), тогда использование struct нормально, если вы хотите идти именно таким путем, и вы приняли осознанное решение, которое вы можете оправдать перед теми, кто использует ваш код. Однако, если какой-либо из членов является типом указателя, вам нужно хорошо подумать о проблемах управления памятью. Возможно, все еще можно использовать struct, но гораздо более вероятно, что вам понадобится деструктор, некоторые конструкторы и так далее. В этот момент вам понадобится class.
В C++ также можно добавлять конструкторы и методы в struct.
По сути, выбор между структурой и классом сводится к вашему стилю и количеству ввода.
С одной стороны, структуры часто используются для агрегированных инициализированных структур данных, поскольку все нестатические элементы данных в любом случае должны быть общедоступными (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 };
опечатка: должно быть {int x, y, z; }