Я собираюсь добавить к существующим ответам, потому что современный C++ теперь вещь и официальный Core Guidelines были созданы, чтобы помочь с такими вопросами, как это.
Вот соответствующий раздел из руководящих принципов:
С.2: Используйте класс, если класс имеет инвариант; используйте конструкцию, если члены данных могут меняться независимо.
Инвариант является логическим условием для членов объекта, которые должен быть установлен конструктором для функций открытого члена. После того, как инвариант установлен (обычно с помощью конструктора), каждая функция-член может быть вызвана для объекта. Инвариант может быть указан неформально (например, в комментарии) или более формально с использованием Expects.
Если все элементы данных могут меняться независимо друг от друга, инвариант невозможен.
Если класс имеет личные данные, пользователь не может полностью инициализировать объект без использования конструктора. Следовательно, определитель класса предоставит конструктор и должен указать его значение. Это фактически означает, что определитель должен определить инвариант.
Enforcement
Ищет структуры со всеми данными частных и классами с государственными членами.
Примеры кода, приведенные:
struct Pair { // the members can vary independently
string name;
int volume;
};
// but
class Date {
public:
// validate that {yy, mm, dd} is a valid date and initialize
Date(int yy, Month mm, char dd);
// ...
private:
int y;
Month m;
char d; // day
};
Class
эс работают хорошо для членов, которые, например, получены друг от друга или взаимосвязаны. Они также могут помочь с проверкой работоспособности при создании экземпляра. Struct
s хорошо работает для «мешков данных», где ничего особенного не происходит, но члены логически имеют смысл сгруппировать.
Из этого следует, что существуют class
es для поддержки инкапсуляции и других связанных концепций кодирования, которые struct
s просто не очень полезны.
Возможный дубликат http://stackoverflow.com/questions/54585/when-should-you-use-a-class-vs-a-struct-in-c – gonzobrains
Возможный дубликат [Когда вы должны использовать класс vs struct в C++?] (http://stackoverflow.com/questions/54585/when-should-you-use-a-class-vs-a-struct-in-c) – cbuchart