0Pricing
C++ Academy · Урок

struct и class: когда что использовать

Изучите единственное существенное различие между struct и class и применяйте принятые соглашения.

«struct и class: когда что использовать» — бесплатный урок C++ Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.

Один механизм, разные значения по умолчанию

В C++ struct и class почти идентичны. Единственное различие на уровне языка — спецификатор доступа по умолчанию.

Структура: открытый доступ по умолчанию

В структуре struct члены являются открытыми, если не указано иное.

struct Point {
    int x;
    int y;
};  // x and y are public

Класс: закрытый доступ по умолчанию

В классе class члены являются закрытыми, если не объявлены как открытые.

class Counter {
    int n_ = 0;       // private
public:
    void increment() { n_++; }
    int  value() const { return n_; }
};

Соглашение, а не только синтаксис

Сообщество C++ использует эти два ключевых слова, чтобы передать замысел:

  • struct — пассивные данные (подобные POD, все члены открыты)
  • class — инкапсулированное поведение (закрытое состояние и открытый интерфейс)

Когда использовать struct

Используйте struct для простых агрегатов данных: координат, цветов RGB и простых записей.

struct Point { int x; int y; };
struct Color { unsigned char r, g, b, a; };
struct Person { std::string name; int age; };

Когда использовать class

Используйте class, если необходимо защищать инварианты, состояние изменяется через методы или нужна инкапсуляция.

class BankAccount {
    double balance_ = 0.0;   // protected invariant
public:
    void deposit(double amount);
    bool withdraw(double amount);
    double balance() const;
};

Инициализация агрегатов

Структуры, содержащие только открытые члены, можно инициализировать с помощью фигурных скобок, перечисляя значения в порядке объявления.

struct Point { int x; int y; };
Point p1{3, 4};      // aggregate init
Point p2{.x = 3, .y = 4};   // designated init (C++20)

Наследование тоже отличается

Механизм inheritance является открытым по умолчанию для struct и закрытым по умолчанию для class. Если сомневаетесь, указывайте это явно.

class B {};
struct D1 : B {};         // public inheritance
class D2 : B {};          // private inheritance

Смешанные члены

Несмотря на различия в значениях по умолчанию, оба ключевых слова могут использовать секции public, private и protected.

struct Config {
private:
    int internalCount = 0;
public:
    std::string name;
    void incrementCount() { ++internalCount; }
};

Чтение кода по ключевому слову

Увидев struct, ожидайте поля данных. Увидев class, ожидайте инкапсулированную логику. Считайте ключевое слово подсказкой о замысле автора.

Руководства по стилю

Большинство руководств по стилю (Google, LLVM, ISO C++ Core) рекомендуют использовать struct только для пассивных агрегатов без инвариантов. Всё, что содержит нетривиальные методы, становится class.

Быстрая проверка

Каково единственное различие на уровне языка между struct и class в C++?

Повторение

Используйте struct для простых агрегатов данных, а class — для типов с инвариантами и поведением. Единственное различие на уровне языка — доступ по умолчанию, но по соглашению эти конструкции используются совершенно по-разному.

Часто задаваемые вопросы

Урок «struct и class: когда что использовать» бесплатный?

Да — полный текст урока «struct и class: когда что использовать» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.

Чему я научусь в уроке «struct и class: когда что использовать»?

Изучите единственное существенное различие между struct и class и применяйте принятые соглашения. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C++ Academy?

Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «struct и class: когда что использовать»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C++ Academy?

Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. struct и class: когда что использовать
  2. Переменные-члены и методы
  3. Конструкторы и списки инициализации членов
  4. Указатель this и инкапсуляция
← Назад к C++ Academy