Являются ключевыми словами, используемыми для определения пользовательских типов данных, и имеют схожие возможности. Однако между ними есть несколько ключевых различий, которые касаются в основном доступа по умолчанию и подхода к дизайну.
struct
: Все члены (переменные и методы) по умолчанию имеют публичный (public) доступ.class
: Все члены (переменные и методы) по умолчанию имеют приватный (private) доступ. struct MyStruct {
int x; // Публичный по умолчанию
};
class MyClass {
int x; // Приватный по умолчанию
};
struct
: Исторически использовались для простых данных (Plain Old Data, POD). В современной практике struct часто используется для агрегирования данных, без сложной логики.class
: Используется для создания более сложных объектов с инкапсуляцией данных и логикой, используя принципы объектно-ориентированного программирования (ООП).Со
struct
struct Point {
int x;
int y;
void move(int dx, int dy) {
x += dx;
y += dy;
}
};
int main() {
Point p = {10, 20};
p.move(5, 5);
std::cout << "Point: (" << p.x << ", " << p.y << ")" << std::endl; // Вывод: Point: (15, 25)
return 0;
}
С
class
class Circle {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() const {
return 3.14159 * radius * radius;
}
void setRadius(double r) {
radius = r;
}
};
int main() {
Circle c(10);
std::cout << "Area: " << c.getArea() << std::endl; // Вывод: Area: 314.159
c.setRadius(5);
std::cout << "New Area: " << c.getArea() << std::endl; // Вывод: New Area: 78.53975
return 0;
}
В
struct
и class
можно определять конструкторы, деструкторы и методы. Разница лишь в доступе по умолчанию.В
struct
и class
поддерживается наследование. Однако доступ по умолчанию для наследования тоже различается:struct
: Наследование по умолчанию является публичным.class
: Наследование по умолчанию является приватным. struct BaseStruct {};
struct DerivedStruct : BaseStruct {}; // public наследование
class BaseClass {};
class DerivedClass : BaseClass {}; // private наследование
struct
и class
могут быть использованы в шаблонных классах и функциях. template <typename T>
struct MyTemplateStruct {
T value;
};
template <typename T>
class MyTemplateClass {
T value;
};
Ставь 👍 и забирай 📚 Базу знаний