Структуры в С++

Если вы читаете эту статью, то конечно достаточно много  уже  знаете о типах данных языка С++. А теперь только представьте — вы сами можете создавать, своего рода, типы данных, которые вам необходимы и с которыми вам будет удобно работать! И это несложно!

Структура — это , некое объединение различных переменных (даже с разными типами данных), которому можно присвоить имя. Например можно объединить данные об  объекте Дом:  город (в котором дом находится), улица, количество квартир, интернет(проведен или нет) и т.д.  в одной структуре.  В общем, можно собрать в одну совокупность данные обо  всем, что угодно, точнее обо  всем, что необходимо конкретному программисту. Всем сразу стало понятно :)

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

#include <iostream>
using namespace std;

struct building     //Создаем структуру!
{                   
	char *owner;       //здесь будет храниться имя владельца
	char *city;        //название города
	int amountRooms;   //количество комнат
	float price;       //цена 
};                  

int main()
{
	setlocale (LC_ALL, "rus");

	building apartment1;   //это объект структуры с типом данных, именем структуры, building

	apartment1.owner = "Денис"; //заполняем данные о владельце и т.д.
	apartment1.city = "Симферополь";       
	apartment1.amountRooms = 5;
	apartment1.price = 150000;

	cout << "Владелец квартиры: " << apartment1.owner << endl; 
	cout << "Квартира находится в городе: " << apartment1.city << endl;
	cout << "Количество комнат: " << apartment1.amountRooms << endl;
	cout << "Стоимость: " << apartment1.price << " $" << endl;

return 0;
}

Коментарии по коду программы: 

В строках 4 — 10 мы создаем структуру. Чтобы ее объявить используем зарезервированное слово struct и даем ей любое, желательно логичное, имя. В нашем случае — building.  С правилами именования переменных, вы можете ознакомиться в этой статье. Далее открываем фигурную скобку { , перечисляем 4 элемента структуры через точку с запятой ; , закрываем фигурную скобку } и в завершении ставим  точку с запятой ;. Это будет нашим  шаблоном (формой) структуры.

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

Как же заполнить данными (инициализировать) элементы структуры? Синтаксис таков: Имя объекта далее оператор точка . и имя элемента структуры. Например: apartment1.owner. Таким образом, в строках 18-21 присваиваем данные элементам структуры.

И так, данные мы внесли. Следующий вопрос: «Как к ним обратиться, как работать и использовать их в программе?» Ответ — «Очень просто — так же, как и при инициализации, используя точку . и имя элемента структуры». В строках 23 — 26  выводим заполненные элементы структуры на экран.

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

CppStudio.com
 Владелец квартиры: Денис
 Квартира находится в городе: Симферополь
 Количество комнат: 5
 Стоимость: 150000 $

 Что ещё важно знать:

  • Объект структуры можно объявить до функции main(). Это выглядело бы так:          
struct building 
{                   
 char *owner        
 char *city;       
 int amountRooms;  
 float price;       
}apartment1; //объявление объекта типа building
  • Инициализировать структуру можно и таким способом:
building apartment1 = {"Денис", "Симферополь", 5, 150000};

но так делают крайне редко;

  • Структуру можно вкладывать в другие структуры (это мы рассмотрим в следующем примере).

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

Пример:

#include <iostream>
using namespace std;

struct date //создаем еще одну структуру, чтобы вложить ее в структуру building // дата постройки
{
       char *month; // Месяц постройки дома
       int year; // Год
};

struct building
{
	char *owner;
	char *city;
	int amountRooms;
	float price;

	date built; //вкладываем одну структуру в определение второй
};

void show(building object) //создаем функцию, которая принимает структуру, как параметр 
{
	cout << "Владелец квартиры: " << object.owner << endl;
	cout << "Квартира находится в городе: " << object.city << endl;
	cout << "Количество комнат: " << object.amountRooms << endl;
	cout << "Стоимость: " << object.price << " $" << endl;
	cout << "Дата постройки: " << object.built.month << ' ' << object.built.year << endl;
}

int main()
{
	setlocale (LC_ALL, "rus");

	building apartment1;

	apartment1.owner = "Денис";
	apartment1.city = "Симферополь";
	apartment1.amountRooms = 5;
	apartment1.price = 150000;
	apartment1.built.month = "январь";
	apartment1.built.year = 2013;

	struct building *pApartment; //это указатель на структуру
	pApartment = &apartment1; 

	//Обратите внимание, как нужно обращаться к элементу структуры через указатель
	//используем оператор  ->
	cout << "Владелец квартиры: " << pApartment->owner << endl;
	cout << "Квартира находится в городе: " << pApartment->city << endl;
	cout << "Количество комнат: " << pApartment->amountRooms << endl;
	cout << "Стоимость: " << pApartment->price << " $" << endl;
	cout << "Дата постройки: " << pApartment->built.month << ' ' << pApartment->built.year << "\n\n\n";

	building apartment2; //создаем и заполняем второй объект структуры 

	apartment2.owner = "Игорь";
	apartment2.city = "Киев";
	apartment2.amountRooms = 4;
	apartment2.price = 300000;
	apartment2.built.month = "январь";
	apartment2.built.year = 2012;

	building apartment3 = apartment2; //создаем третий объект структуры и присваиваем ему данные объекта apartment2

	show(apartment3); 

	cout << endl << endl;
        return 0;
}

Коментарии по коду программы:

Строка 17 — создание объекта built  типа  date в определении структуры  building. Строки 42 — 43: создаем указатель на структуру struct building *pApartment; и далее присваиваем ему адрес уже созданного и заполненного данными объекта  pApartment = &apartment1;. Обращаясь к элементам структуры через указатель мы используем оператор -> (тире и знак >).  Это видно в строках 47 — 51.

В строке 62 показано, как  можно инициализировать структуру. А именно, можно создать новый объект структуры и присвоить ему одним целым, уже созданный и заполненный данными, объект. В функцию show() передаем  объект структуры, как параметр — строка 64. Результат:

CppStudio.com

Владелец квартиры: Денис
Квартира находится в городе: Симферополь
Количество комнат: 5
Стоимость: 150000 $
Дата постройки: январь 2013
Владелец квартиры: Игорь
Квартира находится в городе: Киев
Количество комнат: 4
Стоимость: 300000 $
Дата постройки: январь 2012
Для продолжения нажмите любую клавишу . . .

Разобрав этот пример, мы увидели на практике следующее:

  • структуру можно вкладывать в другую структуру;
  • увидели, как создаётся указатель на структуру;
  • как нужно обращаться к элементу структуры через указатель. А именно, используя оператор  -> ; В примере это было так: apartment0->owner, но можно и так (*apartment0).owner. Круглые скобки, во втором случае, обязательны.
  • данные одной структуры можно присвоить другой структуре;
  • можно структуру передать в функцию, как параметр (кстати, элементы структуры так же можно передавать в функцию, как параметры).

В дополнение ко всему, следует отметить, что  функции могут так же возвращать структуры  в результате своей работы. Например:

building Set()
{	
	building object; // формирование объекта

	//... код функции

	return object;
}

Вот так, вкратце, мы познакомились со структурами в языке С++, попрактиковались на примерах и узнали основы. Это только начало!

Автор: Marienko L.
Дата: 11.12.2013
Поделиться:

Комментарии

  1. mpavelFax

    Официальная работа через интернет с обучением.

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.