Опубликован: 10.12.2015 | Уровень: для всех | Доступ: платный
Лекция 16:

Определение структур

< Лекция 15 || Лекция 16 || Лекция 17 >

Структурированные данные очень широко распространены в жизни. Они помогают группировать и систематизировать совокупности разнородных данных. Примерами структур могут быть кулинарные рецепты, каталоги компакт-дисков и т.д.

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

Имя структуры используется для создания других переменных данного структурного типа. Синтаксис структуры следующий:

struct имя_структуры {
тип элемента элемент_1
тип элемента элемент_2
………………………….

тип элемента элемент_N
};

Приведем пример простой структуры:

struct film {char *Titel;   //Название фильма
             char *Director;//Режиссер фильма
		int  year;       //Год выхода на экран

С помощью приведенного выше описания задается структура film, но с ней не связана никакая переменная. Для связывания структуры film с некоторой переменной movee можно воспользоваться выражением:

struct film movee;

Далее, нам нужно инициализировать элементы структуры movee. Существует несколько способов инициализации. Рассмотрим один из вариантов:

movee.Titel="Star War";
movee.Director="Steven Spielberg";
movee.year=1986;

В приведенных выше операторах присваивания используется "точка" (.) - оператор обращения к члену структуры. В дальнейшем, например, с переменной movee.year можно работать как с обычной целочисленной переменной (например, добавить к ней число). Далее приводится простая программа, иллюстрирующая процесс объявления и инициализации структур.

//==========================================================
// Name        : struct_film.cpp
// Author      : Marat
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//==========================================================

#include <iostream>
using namespace std;

//Объявляем структуру film
struct film {char *Titel;   //Название фильма
             char *Director;//Режиссер фильма
			 int  year;       //Год выхода на экран
};

struct film movee;

int main() {
	movee.Titel="Star Wars";
	movee.Director="George Lukas";
	movee.year=1986;

	cout<<"\n"<<movee.Titel;
	cout<<"\n"<<movee.Director;
	cout<<"\n"<<movee.year;
	return 0;
}

Результат:

Star Wars
George Lukas
1986

Можно инициализировать структуры и таким образом:

struct film {char *Titel;   //Название фильма
             char *Director;//Режиссер фильма
			 int  year;       //Год выхода на экран 
} movee = {"Star War","Steven Spielberg",1986};

Массивы чисел могут быть элементами структур, с другой стороны, сами структуры могут объединяться в массивы.

struct library{
char *Author[n];
char *Titel;
} book[m];

Приведен массив структур book (книжный каталог), в которые входит массив фамилий авторов (Author).

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

//==========================================================
// Name        : struct_function.cpp
// Author      : Marat
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//==========================================================

#include <iostream>
using namespace std;

struct film {char *Titel;   //Название фильма
             char *Director;//Режиссер фильма
		int  year;       //Год выхода на экран
} movee = {"Star Wars","George Lukas",1986};

void print(struct film anymovee)
{
	cout<<"\nFilm Titel: "<<anymovee.Titel;
	cout<<"\nFilm Director: "<<anymovee.Director;
	cout<<"\nAppearance year: "<<anymovee.year<<endl;
}

int main() {
	//Прототип функции печати
	void print(struct film anymovee);
	//Вызов функции печати
	print(movee);
	return 0;
}

Результат:

Film Titel: Star Wars
Film Director: George Lukas
Appearance year: 1986
< Лекция 15 || Лекция 16 || Лекция 17 >
Зося Ковалева
Зося Ковалева

Хочу получить удостоверение. Сколько стоит оплата?

Aleksey Aplaev
Aleksey Aplaev
Россия, Chelybinsk
Александр Сидоров
Александр Сидоров
Россия, Самара