SlideShare a Scribd company logo
1 of 5
Download to read offline
Программирование на языке C++
Лекция 3
Структуры
Александр Смаль
1/5
Зачем группировать данные?
Какая должна быть сигнатура у функции, которая вычисляет
длину отрезка на плоскости?
double length(double x1 , double y1 ,
double x2 , double y2);
А сигнатура функции, проверяющей пересечение отрезков?
bool intersects(double x11 , double y11 ,
double x12 , double y12 ,
double x21 , double y21 ,
double x22 , double y22 ,
double * xi , double * yi);
Координаты точек являются логически связанными данными,
которые всегда передаются вместе.
Аналогично связанны координаты точек отрезка. 2/5
Структуры
Структуры — это способ синтаксически (и физически)
сгруппировать логически связанные данные.
struct Point {
double x;
double y;
};
struct Segment {
Point p1;
Point p2;
};
double length(Segment s);
bool intersects(Segment s1 ,
Segment s2 , Point * p);
3/5
Работа со структурами
Доступ к полям структуры осуществляется через оператор ’.’:
#include <cmath >
double length(Segment s) {
double dx = s.p1.x - s.p2.x;
double dy = s.p1.y - s.p2.y;
return sqrt(dx * dx + dy * dy);
}
Для указателей на структуры используется оператор ’->’.
double length(Segment * s) {
double dx = s->p1.x - s->p2.x;
double dy = s->p1.y - s->p2.y;
return sqrt(dx * dx + dy * dy);
}
4/5
Инициализация структур
Поля структур можно инициализировать подобно массивам:
Point p1 = { 0.4, 1.4 };
Point p2 = { 1.2, 6.3 };
Segment s = { p1 , p2 };
Структуры могут хранить переменные разных типов.
struct IntArray2D {
size_t a;
size_t b;
int ** data;
};
IntArray2D a = {n, m, create_array2d (n, m)};
5/5

More Related Content

What's hot

2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод2.8 Строки и ввод-вывод
2.8 Строки и ввод-выводDEVTYPE
 
4.3 Виртуальные методы
4.3 Виртуальные методы4.3 Виртуальные методы
4.3 Виртуальные методыDEVTYPE
 
6.3 Специализация шаблонов
6.3 Специализация шаблонов6.3 Специализация шаблонов
6.3 Специализация шаблоновDEVTYPE
 
3.8 Класс массива
3.8 Класс массива3.8 Класс массива
3.8 Класс массиваDEVTYPE
 
6.4 Ещё о шаблонах
6.4 Ещё о шаблонах6.4 Ещё о шаблонах
6.4 Ещё о шаблонахDEVTYPE
 
3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваиванияDEVTYPE
 
2.7 Многомерные массивы
2.7 Многомерные массивы2.7 Многомерные массивы
2.7 Многомерные массивыDEVTYPE
 
3.4 Объекты и классы
3.4 Объекты и классы3.4 Объекты и классы
3.4 Объекты и классыDEVTYPE
 
Matlab: Вычисление производной
Matlab: Вычисление производнойMatlab: Вычисление производной
Matlab: Вычисление производнойDmitry Bulgakov
 
Cpp/cli types
Cpp/cli typesCpp/cli types
Cpp/cli typesmcroitor
 
Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмовAndrey Dolinin
 
2.6 Динамическая память
2.6 Динамическая память2.6 Динамическая память
2.6 Динамическая памятьDEVTYPE
 
Огранизация ввода и вывода данных
Огранизация ввода и вывода данныхОгранизация ввода и вывода данных
Огранизация ввода и вывода данныхAndrey Dolinin
 
3.5 Модификаторы доступа
3.5 Модификаторы доступа3.5 Модификаторы доступа
3.5 Модификаторы доступаDEVTYPE
 

What's hot (20)

2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод
 
4.3 Виртуальные методы
4.3 Виртуальные методы4.3 Виртуальные методы
4.3 Виртуальные методы
 
6.3 Специализация шаблонов
6.3 Специализация шаблонов6.3 Специализация шаблонов
6.3 Специализация шаблонов
 
3.8 Класс массива
3.8 Класс массива3.8 Класс массива
3.8 Класс массива
 
6.4 Ещё о шаблонах
6.4 Ещё о шаблонах6.4 Ещё о шаблонах
6.4 Ещё о шаблонах
 
Progr labrab-6-2013 - c++ - functions
Progr labrab-6-2013 - c++ - functionsProgr labrab-6-2013 - c++ - functions
Progr labrab-6-2013 - c++ - functions
 
лекция 3
лекция 3лекция 3
лекция 3
 
3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания
 
2.7 Многомерные массивы
2.7 Многомерные массивы2.7 Многомерные массивы
2.7 Многомерные массивы
 
3.4 Объекты и классы
3.4 Объекты и классы3.4 Объекты и классы
3.4 Объекты и классы
 
лекция 1
лекция 1лекция 1
лекция 1
 
Matlab: Вычисление производной
Matlab: Вычисление производнойMatlab: Вычисление производной
Matlab: Вычисление производной
 
Cpp/cli types
Cpp/cli typesCpp/cli types
Cpp/cli types
 
Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмов
 
2.6 Динамическая память
2.6 Динамическая память2.6 Динамическая память
2.6 Динамическая память
 
Огранизация ввода и вывода данных
Огранизация ввода и вывода данныхОгранизация ввода и вывода данных
Огранизация ввода и вывода данных
 
8 3-5
8 3-58 3-5
8 3-5
 
8 3-4
8 3-48 3-4
8 3-4
 
3.5 Модификаторы доступа
3.5 Модификаторы доступа3.5 Модификаторы доступа
3.5 Модификаторы доступа
 
8 3-3
8 3-38 3-3
8 3-3
 

Viewers also liked

4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программированиеDEVTYPE
 
Квадратичная математика
Квадратичная математикаКвадратичная математика
Квадратичная математикаDEVTYPE
 
6. Generics. Collections. Streams
6. Generics. Collections. Streams6. Generics. Collections. Streams
6. Generics. Collections. StreamsDEVTYPE
 
1. Введение в Java
1. Введение в Java1. Введение в Java
1. Введение в JavaDEVTYPE
 
3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в JavaDEVTYPE
 
2.5 Ссылки
2.5 Ссылки2.5 Ссылки
2.5 СсылкиDEVTYPE
 
Программирование: теоремы и задачи
Программирование: теоремы и задачиПрограммирование: теоремы и задачи
Программирование: теоремы и задачиDEVTYPE
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателейDEVTYPE
 
5.5 Ключевое слово friend
5.5 Ключевое слово friend5.5 Ключевое слово friend
5.5 Ключевое слово friendDEVTYPE
 
3.6 Константность
3.6 Константность3.6 Константность
3.6 КонстантностьDEVTYPE
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системеDEVTYPE
 
6.1 Шаблоны классов
6.1 Шаблоны классов6.1 Шаблоны классов
6.1 Шаблоны классовDEVTYPE
 
4.1 Наследование
4.1 Наследование4.1 Наследование
4.1 НаследованиеDEVTYPE
 

Viewers also liked (13)

4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование
 
Квадратичная математика
Квадратичная математикаКвадратичная математика
Квадратичная математика
 
6. Generics. Collections. Streams
6. Generics. Collections. Streams6. Generics. Collections. Streams
6. Generics. Collections. Streams
 
1. Введение в Java
1. Введение в Java1. Введение в Java
1. Введение в Java
 
3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java
 
2.5 Ссылки
2.5 Ссылки2.5 Ссылки
2.5 Ссылки
 
Программирование: теоремы и задачи
Программирование: теоремы и задачиПрограммирование: теоремы и задачи
Программирование: теоремы и задачи
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателей
 
5.5 Ключевое слово friend
5.5 Ключевое слово friend5.5 Ключевое слово friend
5.5 Ключевое слово friend
 
3.6 Константность
3.6 Константность3.6 Константность
3.6 Константность
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе
 
6.1 Шаблоны классов
6.1 Шаблоны классов6.1 Шаблоны классов
6.1 Шаблоны классов
 
4.1 Наследование
4.1 Наследование4.1 Наследование
4.1 Наследование
 

Similar to 3.1 Структуры

Лекция 10: Графы. Остовные деревья
Лекция 10: Графы. Остовные деревьяЛекция 10: Графы. Остовные деревья
Лекция 10: Графы. Остовные деревьяMikhail Kurnosov
 
Программирование: от сложного к простому
Программирование: от сложного к простомуПрограммирование: от сложного к простому
Программирование: от сложного к простомуNikolay Grebenshikov
 
Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2DEVTYPE
 
Введение в синтаксис C++, часть 1
Введение в синтаксис C++, часть 1Введение в синтаксис C++, часть 1
Введение в синтаксис C++, часть 1DEVTYPE
 
Советский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисленияСоветский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисленияPositive Hack Days
 
Лекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusЛекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusMikhail Kurnosov
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2Technopark
 

Similar to 3.1 Структуры (7)

Лекция 10: Графы. Остовные деревья
Лекция 10: Графы. Остовные деревьяЛекция 10: Графы. Остовные деревья
Лекция 10: Графы. Остовные деревья
 
Программирование: от сложного к простому
Программирование: от сложного к простомуПрограммирование: от сложного к простому
Программирование: от сложного к простому
 
Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2
 
Введение в синтаксис C++, часть 1
Введение в синтаксис C++, часть 1Введение в синтаксис C++, часть 1
Введение в синтаксис C++, часть 1
 
Советский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисленияСоветский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисления
 
Лекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusЛекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk Plus
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
 

More from DEVTYPE

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреDEVTYPE
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойстваDEVTYPE
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистикаDEVTYPE
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространствоDEVTYPE
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform ContinuityDEVTYPE
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change ProblemDEVTYPE
 
Recurrences
RecurrencesRecurrences
RecurrencesDEVTYPE
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применениеDEVTYPE
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыDEVTYPE
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ DEVTYPE
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функцийDEVTYPE
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of FunctionsDEVTYPE
 
Кучи
КучиКучи
КучиDEVTYPE
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование ХаффманаDEVTYPE
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введениеDEVTYPE
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиDEVTYPE
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"DEVTYPE
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делительDEVTYPE
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа ФибоначчиDEVTYPE
 
О-символика
О-символикаО-символика
О-символикаDEVTYPE
 

More from DEVTYPE (20)

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебре
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистика
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform Continuity
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change Problem
 
Recurrences
RecurrencesRecurrences
Recurrences
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функций
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of Functions
 
Кучи
КучиКучи
Кучи
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование Хаффмана
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введение
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятности
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делитель
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа Фибоначчи
 
О-символика
О-символикаО-символика
О-символика
 

3.1 Структуры

  • 1. Программирование на языке C++ Лекция 3 Структуры Александр Смаль 1/5
  • 2. Зачем группировать данные? Какая должна быть сигнатура у функции, которая вычисляет длину отрезка на плоскости? double length(double x1 , double y1 , double x2 , double y2); А сигнатура функции, проверяющей пересечение отрезков? bool intersects(double x11 , double y11 , double x12 , double y12 , double x21 , double y21 , double x22 , double y22 , double * xi , double * yi); Координаты точек являются логически связанными данными, которые всегда передаются вместе. Аналогично связанны координаты точек отрезка. 2/5
  • 3. Структуры Структуры — это способ синтаксически (и физически) сгруппировать логически связанные данные. struct Point { double x; double y; }; struct Segment { Point p1; Point p2; }; double length(Segment s); bool intersects(Segment s1 , Segment s2 , Point * p); 3/5
  • 4. Работа со структурами Доступ к полям структуры осуществляется через оператор ’.’: #include <cmath > double length(Segment s) { double dx = s.p1.x - s.p2.x; double dy = s.p1.y - s.p2.y; return sqrt(dx * dx + dy * dy); } Для указателей на структуры используется оператор ’->’. double length(Segment * s) { double dx = s->p1.x - s->p2.x; double dy = s->p1.y - s->p2.y; return sqrt(dx * dx + dy * dy); } 4/5
  • 5. Инициализация структур Поля структур можно инициализировать подобно массивам: Point p1 = { 0.4, 1.4 }; Point p2 = { 1.2, 6.3 }; Segment s = { p1 , p2 }; Структуры могут хранить переменные разных типов. struct IntArray2D { size_t a; size_t b; int ** data; }; IntArray2D a = {n, m, create_array2d (n, m)}; 5/5