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

Что такое структура?

Структура (struct) в C++ — это пользовательский тип данных, который позволяет объединять переменные разных типов под одним именем. Это особенно полезно, когда нужно сгруппировать различные характеристики одного объекта. Например, для представления данных о студенте можно использовать структуру.

Объявление структуры

Для объявления структуры используется ключевое слово struct, за которым следует имя структуры и блок с определениями переменных. Пример:

struct Student {
  std::string name;
  int age;
  float gpa;
};

В данном примере структура Student содержит три переменные: name (имя студента), age (возраст) и gpa (средний балл).

Создание экземпляра структуры

После объявления структуры можно создавать её экземпляры и работать с ними так же, как и с обычными переменными. Пример создания и инициализации экземпляра структуры:

Student student1;
student1.name = "Alex";
student1.age = 20;
student1.gpa = 3.5;

Также можно инициализировать структуру при создании:

Student student2 = {"Maria", 22, 3.8};

Доступ к членам структуры

Для доступа к членам структуры используется оператор точки (.). Пример:

std::cout << "Name: " << student1.name << std::endl;
std::cout << "Age: " << student1.age << std::endl;
std::cout << "GPA: " << student1.gpa << std::endl;

Результат выполнения кода:

Name: Alex
Age: 20
GPA: 3.5

Использование структур в функциях

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

void printStudentInfo(Student s) {
  std::cout << "Name: " << s.name << std::endl;
  std::cout << "Age: " << s.age << std::endl;
  std::cout << "GPA: " << s.gpa << std::endl;
}

И вызов этой функции:

printStudentInfo(student1);

Если нужно изменить данные внутри структуры, лучше передавать её по ссылке:

void updateGPA(Student &s, float newGPA) {
  s.gpa = newGPA;
}

Вызов функции для обновления GPA:

updateGPA(student1, 4.0);

Вложенные структуры

В C++ структуры могут содержать другие структуры в качестве членов. Пример:

struct Address {
  std::string city;
  std::string street;
  int houseNumber;
};

struct Person {
  std::string name;
  Address address;
  int age;
};

Создание и инициализация экземпляра структуры с вложенной структурой:

Person person1;
person1.name = "John";
person1.address.city = "New York";
person1.address.street = "5th Avenue";
person1.address.houseNumber = 101;
person1.age = 30;

Структуры и классы

В C++ структуры и классы имеют много общего, однако по умолчанию члены структуры публичные, тогда как у классов — приватные. Это делает структуры удобными для простых объединений данных, тогда как классы чаще используются для более сложных объектов с методами и инкапсуляцией.

Задание для самостоятельной работы

Напишите программу, которая реализует структуру Book с полями title (название книги), author (автор книги) и year (год издания). Программа должна запрашивать у пользователя данные о трех книгах и выводить их на экран в следующем формате:

Название книги: [Название]
Автор: [Автор]
Год издания: [Год]

Пример работы программы:

Введите название первой книги: Преступление и наказание
Введите автора первой книги: Федор Достоевский
Введите год издания первой книги: 1866

Введите название второй книги: Война и мир
Введите автора второй книги: Лев Толстой
Введите год издания второй книги: 1869

Введите название третьей книги: Мастер и Маргарита
Введите автора третьей книги: Михаил Булгаков
Введите год издания третьей книги: 1967

Название книги: Преступление и наказание
Автор: Федор Достоевский
Год издания: 1866

Название книги: Война и мир
Автор: Лев Толстой
Год издания: 1869

Название книги: Мастер и Маргарита
Автор: Михаил Булгаков
Год издания: 1967

Заключение

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

Перейти к следующему уроку →