🤔 В чем разница между struct и class?



Являются ключевыми словами, используемыми для определения пользовательских типов данных, и имеют схожие возможности. Однако между ними есть несколько ключевых различий, которые касаются в основном доступа по умолчанию и подхода к дизайну.



🚩Основные различия между `struct` и `class`



🟠Доступ по умолчанию

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;

};




Ставь 👍 и забирай 📚 Базу знаний