Если вы читаете эту статью, то конечно достаточно много уже знаете о типах данных языка С++. А теперь только представьте — вы сами можете создавать, своего рода, типы данных, которые вам необходимы и с которыми вам будет удобно работать! И это несложно!
Структура — это , некое объединение различных переменных (даже с разными типами данных), которому можно присвоить имя. Например можно объединить данные об объекте Дом: город (в котором дом находится), улица, количество квартир, интернет(проведен или нет) и т.д. в одной структуре. В общем, можно собрать в одну совокупность данные обо всем, что угодно, точнее обо всем, что необходимо конкретному программисту. Всем сразу стало понятно :)
Если вы только приступаете к знакомству со структурами в С++, сначала, вам необходимо ознакомиться с синтаксисом структур в языке С++. Рассмотрим простой пример, который поможет познакомиться со структурами и покажет, как с ними работать. В этой программе мы создадим структуру, создадим объект структуры, заполним значениями элементы структуры (данные об объекте) и выведем эти значения на экран. Ну что же, приступим!
#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 выводим заполненные элементы структуры на экран.
И вот что мы увидим в результате, когда скомпилируем нашу программу:
Владелец квартиры: Денис Квартира находится в городе: Симферополь Количество комнат: 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. Результат:
Владелец квартиры: Денис
Квартира находится в городе: Симферополь
Количество комнат: 5
Стоимость: 150000 $
Дата постройки: январь 2013
Владелец квартиры: Игорь
Квартира находится в городе: Киев
Количество комнат: 4
Стоимость: 300000 $
Дата постройки: январь 2012
Для продолжения нажмите любую клавишу . . .
Разобрав этот пример, мы увидели на практике следующее:
- структуру можно вкладывать в другую структуру;
- увидели, как создаётся указатель на структуру;
- как нужно обращаться к элементу структуры через указатель. А именно, используя оператор
->; В примере это было так:apartment0->owner, но можно и так(*apartment0).owner. Круглые скобки, во втором случае, обязательны. - данные одной структуры можно присвоить другой структуре;
- можно структуру передать в функцию, как параметр (кстати, элементы структуры так же можно передавать в функцию, как параметры).
В дополнение ко всему, следует отметить, что функции могут так же возвращать структуры в результате своей работы. Например:
building Set()
{
building object; // формирование объекта
//... код функции
return object;
}
Вот так, вкратце, мы познакомились со структурами в языке С++, попрактиковались на примерах и узнали основы. Это только начало!
Комментарии
mpavelFax
Официальная работа через интернет с обучением.