Class vs Struct только для данных?

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

class Foo { 
private:   
   struct Pos { int x, y, z };
public:    
   Pos Position; 
};

Против:

struct Foo {
   struct Pos { int x, y, z } Pos;
};

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

опечатка: должно быть {int x, y, z; }

Bob Yoplait 26.11.2010 19:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
11
1
11 732
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

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

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

Обновлено: литб сделал хорошее замечание в комментарии, поэтому я собираюсь процитировать его здесь:

one important other difference is that structs derive from other classes/struct public by default, while classes derive privately by default.

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

Johannes Schaub - litb 10.01.2009 21:08

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

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

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

Да, но есть случаи, когда вы должны использовать составные типы C++ с кодом C, системными вызовами и т. д. Чтобы подчеркнуть, что тип данных C++ является и останется не чем иным, как простыми старыми данными C, я предпочитаю обозначать его как структуру . Во всех остальных случаях я использую классы.

Federico A. Ramponi 10.01.2009 21:05

И, следовательно, преобразовать его в класс довольно тривиально в маловероятном случае, когда он станет полезным. Бьюсь об заклад, в VS есть инструмент, который сделает это за вас - и в другом месте, если вы не используете VS.

dkretz 10.01.2009 21:07

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

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

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

В C++ также можно добавлять конструкторы и методы в struct.

MKroehnert 05.06.2010 12:03

По сути, выбор между структурой и классом сводится к вашему стилю и количеству ввода.

  • Если у вас есть только общедоступные члены в классе / структуре, вы также можете использовать ключевое слово struct. Это избавит вас от необходимости набирать "public:" позже.
  • Другая причина выбрать структуру вместо класса - неявно задокументировать намерение объекта. Таким образом, вы должны создать структуры типов POD (даже если они содержат конструкторы и некоторые статические вспомогательные методы и т. д.), И вы будете использовать класс для всех других «обычных» классов.

С одной стороны, структуры часто используются для агрегированных инициализированных структур данных, поскольку все нестатические элементы данных в любом случае должны быть общедоступными (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 };

Другие вопросы по теме