maestro7it_education

Форк
0

README.md

7️⃣ Структуры и объединения: пользовательские типы данных

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

Эти пользовательские типы данных помогают организовать код и управлять сложными структурами данных.

1. Структуры

Структуры (struct) позволяют объединять несколько переменных (членов) разных типов под одним именем.

Это удобно для создания более сложных типов данных.

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

#include <iostream>
#include <string>
struct Person {
std::string name;
int age;
double height;
};
int main() {
Person person1;
person1.name = "Иван";
person1.age = 30;
person1.height = 1.80;
std::cout << "Имя: " << person1.name << std::endl;
std::cout << "Возраст: " << person1.age << std::endl;
std::cout << "Рост: " << person1.height << " м" << std::endl;
return 0;
}

Инициализация структуры

Структуру можно инициализировать при объявлении.

#include <iostream>
struct Rectangle {
int width;
int height;
};
int main() {
Rectangle rect = {10, 20}; // Инициализация структуры
std::cout << "Ширина: " << rect.width << std::endl;
std::cout << "Высота: " << rect.height << std::endl;
return 0;
}

Функции, работающие со структурами

Функции могут принимать структуры в качестве параметров и возвращать их.

#include <iostream>
struct Point {
int x;
int y;
};
void printPoint(const Point &p) {
std::cout << "Точка: (" << p.x << ", " << p.y << ")" << std::endl;
}
Point createPoint(int x, int y) {
Point p;
p.x = x;
p.y = y;
return p;
}
int main() {
Point p1 = createPoint(5, 10);
printPoint(p1);
return 0;
}

2. Объединения

Объединения (union) позволяют хранить различные типы данных в одной и той же области памяти.

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

Объявление и определение объединения

#include <iostream>
union Data {
int i;
float f;
char c;
};
int main() {
Data data;
data.i = 10;
std::cout << "Data.i: " << data.i << std::endl;
data.f = 220.5;
std::cout << "Data.f: " << data.f << std::endl; // Перепишет данные
data.c = 'A';
std::cout << "Data.c: " << data.c << std::endl; // Перепишет данные
return 0;
}

Доступ к членам объединения

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

#include <iostream>
union Value {
int intValue;
double doubleValue;
};
int main() {
Value v;
v.intValue = 42;
std::cout << "intValue: " << v.intValue << std::endl;
v.doubleValue = 3.14;
std::cout << "doubleValue: " << v.doubleValue << std::endl; // intValue теперь не определён
return 0;
}

Использование объединений в структурах

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

#include <iostream>
struct Data {
int type;
union {
int intValue;
float floatValue;
char charValue;
} value;
};
int main() {
Data d;
d.type = 1; // Тип данных
d.value.intValue = 100;
if (d.type == 1) {
std::cout << "intValue: " << d.value.intValue << std::endl;
}
d.type = 2;
d.value.floatValue = 99.9;
if (d.type == 2) {
std::cout << "floatValue: " << d.value.floatValue << std::endl;
}
return 0;
}

Заключение

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

Они полезны для организации данных и группировки связанных данных.

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

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

Оба этих типа данных являются мощными инструментами для создания сложных и эффективных программ в C++.

Автор: Дуплей Максим Игоревич

Дата: 07.09.2024

Версия 1.0

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.