Ответ
Да, в C++ структура (struct) и класс (class) практически идентичны. Единственное различие — умолчательный уровень доступа.
- В
classчлены по умолчаниюprivate. - В
structчлены по умолчаниюpublic.
После явного указания спецификатора доступа (private:, protected:, public:) они ведут себя одинаково.
Пример структуры с приватными полями:
#include <string>
#include <iostream>
struct Person {
// Публичный интерфейс
void setAge(int newAge) {
if (newAge > 0 && newAge < 150) {
age = newAge; // Доступ к приватному полю разрешён
}
}
int getAge() const { return age; }
void setName(const std::string& newName) { name = newName; }
std::string getName() const { return name; }
private:
// Приватные данные-члены
int age;
std::string name;
};
int main() {
Person p;
p.setName("Alice");
p.setAge(30);
// p.age = 30; // Ошибка компиляции: 'int Person::age' is private
std::cout << p.getName() << " is " << p.getAge() << " years old.n";
return 0;
}
Ключевые моменты:
- Использование
structс приватными полями оправдано, когда вы хотите подчеркнуть, что это простая структура данных, но с контролируемым доступом (инкапсуляция). - В языке C структуры (
struct) не поддерживают инкапсуляцию — все поля всегда публичны. - В C++ выбор между
structиclassчасто является стилистическим для передачи намерения программиста.