Это действительно вопрос хорошей формы/лучших практик. Я использую structs в C++ для создания объектов, которые предназначены для хранения данных в основном, а не для создания класса с тонны методов доступа, которые ничего не делают, кроме получения/установки значений. Например:C++ Структуры с функциями-членами против классов с общедоступными переменными
struct Person {
std::string name;
DateObject dob;
(...)
};
Если вы представить себе более 20 переменных там, пишу это как класс с частными лицами, членами и 40 с чем-то аксессорах боль, чтобы управлять и кажется расточительным для меня.
Иногда, возможно, мне также потребуется добавить некоторую минимальную функциональность для данных. В примере, скажем, я тоже иногда нужен возраст, основанный на DOB:
struct Person {
std::string name;
DateObject dob;
(...)
int age() {return calculated age from dob;}
}
Конечно для любой сложной функциональности я хотел бы сделать класс, но только простой функциональности, как это, это «плохой дизайн» ? Если я использую класс, это плохая форма, чтобы сохранить переменные данных в качестве публичных членов класса, или мне просто нужно принять их и сделать классы с кучей методов доступа? Я понимаю различия между классами и структурами, я просто спрашиваю о лучших практиках.
Writting методы accesor (геттер/сеттер) является хорошей идеей. Если вы просто Google немного, вы, вероятно, найдете массу обсуждений по этой теме. Совет. Большинство IDE предоставляют функциональность для генерации getter и setter автоматически. – Paranaix
Типы 'class' и' struct' отличаются тем, что управление доступом по умолчанию для 'class' является' private', а управление доступом по умолчанию 'struct' по умолчанию является общедоступным. Использование ключевых слов за пределами создания типа может немного отличаться ... но вы, кажется, вкладываете много энергии в разницу между словом 'struct' и' class' в типе. Он может использоваться для документации в конкретном проекте, но это зависит от конкретного проекта. – Yakk
Существует также опция бесплатной функции 'int age (const Person & person)'. Не все должно быть объектом с методами. – molbdnilo