Содержание:
Theory
Structures in C++
-
Example:
- Right at the end of the struct definition, and before the ending semicolon (
;
), the optional field object_names can be used to directly declare objects of the structure type. For example, the structure objectsapple
,banana
, andmelon
can be declared at the moment the data structure type is defined:
1 2 3 4 5 6 7 | struct product { int weight; double price; } ; product apple; product banana, melon; |
product
, and defines it having two members: weight
and price
, each of a different fundamental type. This declaration creates a new type (product
), which is then used to declare three objects (variables) of this type: apple
, banana
, and melon
. Note how once product is declared, it is used just like any other type.1 2 3 4 | struct product { int weight; double price; } apple, banana, melon; |
product
) becomes optional: struct requires either a type_name or at least one name in object_names, but not necessarily both.Access to the objects’ members
apple
, banana
, and melon
) its members can be accessed directly. The dot notation is used. Dot (.) must be inserted between the object name and the member name. For example, we could operate with any of these elements as if they were standard variables of their respective types:1 2 3 4 5 6 | apple.weight apple.price banana.weight banana.price melon.weight melon.price |
apple.weight
, banana.weight
, and melon.weight
are of type int, while apple.price
, banana.price
, and melon.price
are of type double.Pointers to structures
1 2 3 4 5 6 7 | struct Product_t { int weight; double price; } apple, banana, melon; Product_t aproduct; Product_t * pproduct; |
aproduct
is an object of structure type Product_t
, and pproduct
is a pointer to point to objects of structure type Product_t
.pproduct = &aproduct;
pproduct
would be assigned the address of object aproduct
.->
)://... struct Product_t { int weight; double price; } ; int main () { string mystr; Product_t aproduct; Product_t * pproduct; pproduct = &aproduct; cout << "Enter weight: "; cin >> pproduct ->weight; cout << "Enter price: "; cin >> pproduct ->price; cout << "\nYou have entered:\n"; cout << pproduct ->weight << " "; cout << pproduct ->price; return 0; } |
Tuples
Example:
#include <string> #include <tuple> // std::tuple, std::get, std::tie, std::ignore using namespace std; int main() { tuple<int, char, string> t {4, 'z', "C++"}; // the 1-st way of declaration auto x = make_tuple(4, 'z', "C++"); // the 2-d way of declaration auto s1 = get<2>(x); // access element get<0>(t) = 20; // set to another value int i; char c; string s; tie(i, c, s) = t; // unpack elements tie(ignore, ignore, s) = t; //unpack (with ignore) } |
Лабораторные работы
Выполнить: Создать структуру
Books_t
, хранящую сведения о книгах. Добавить следующие поля структуры:
- название книги
- год издания
Задания:
- Создать структуру
Books_t
- Реализовать метод структуры для вывода сведений:
- Создать два объекта (например, Pushkin, Chekhov).
- В основной программе создать два объекта-книги и вывести краткую информацию о них.
void printBook(Books_t book); |
примерный вывод:
Lab 1: Введите год работы Чехова под названием Три сестры: 1897 Работа Пушкина: Евгений Онегин 1823 Работа Чехова: Три сестры 1897
✍ Алгоритм:
-
1. Создайте структуру
- Структура должна быть определена внутри заголовочного файла. Откройте
structBooks8.h
и добавьте код для определения структуры с двумя полями —title
иyear
:
Books_t
для хранения данных о книгах. Добавьте следующие поля объекта: название книги, год издания.
struct Books_t { string title; int year; };
2. Реализуйте метод для вывода информации об объекте.
Books_t
, чтобы принимать в качестве параметра определенную книгу. Добавьте код после структуры:
//метод для вывода информации об объектах
void
printBook(Books_t book);
structBooks8.cpp
:void printBook(Books_t book) { cout << book. ; cout << " " << book. << endl; }
3. Создайте два объекта (например, Пушкин и Чехов).
main.cpp
и добавьте код для создания двух объектов типа:Books_t Pushkin; Books_t Chekhov;
4. В основной программе создайте как минимум 2 книги, выведите информацию по этим книгам.
Pushkin."Eugene Onegin"; Pushkin. = 1823; Chekhov = "Three Sisters"; cout << "Enter year of Chekhov work Three Sisters: "<=cin >> Chekhov ;
printBook
: cout << "Pushkin's work is:\n "; printBook(Pushkin); cout << "And Chekhov's:\n "; printBook(Chekhov); system("pause");
Выполнить: Создать структуру Cars_t
для хранения информации об автомобилях. Добавьте поля для хранения цвета автомобиля, марки автомобиля и года выпуска. Создайте не менее 4 объектов и выведите информацию об этих объектах, используя метод printCars
.
Указание: Заголовок метода printCars
должен быть следующим:
void printCars(Cars_t car); |
Примерный вывод:
Task 1: Введите марку автомобиля: >>audi Введите цвет автомобиля: >>grey Введите год выпуска автомобиля: >>1997 Информация: audi grey 1997 bmw green 2009 suzuki white 2015 honda black 2019
[Solution and Project name: Lesson_9task1
, file name L9Task1main.cpp
, L9Task1imp.cpp
, L9Task1.h
]
Выполнить: Создать структуру Toys_t
для хранения данных об игрушках для продажи. Добавьте следующие свойства (поля) структуры:
- название игрушки - тип string
- для какого возраста ребенка - тип integer
Задачи:
- Реализовать метод для вывода информации об объектах:
- Реализовать метод вывода игрушек для маленьких детей (до 4 лет):
- Создайте массив объектов игрушек.
- В основной программе создайте не менее 4 элементов массива, отобразите информацию по этим игрушкам.
void printBook(Toys_t toy); |
void printToy4(Toys_t toy); |
Примерный вывод:
Введите название игрушки: >>cat Введите возраст ребенка: >>2 Краткая информация: car 3 doll 4 crocodile 6 cat 2 Краткая информация по игрушкам для маленьких детей: car 3 doll 4 cat 2
✍ Алгоритм:
-
1. Создайте структуру
- Структура должна быть определена внутри заголовочного файла. Откройте
structToys8.h
и добавьте код для определения структуры с двумя свойствами (полями)-title
иage
:
Toys_t
для хранения данных об игрушках
struct Toys_t { string title; int age; };
2. Реализовать метод для вывода информации об объектах.
Toys_t
. Добавьте код после структуры://метод для вывода информации void printToys(Toys_t toy);
structToys8.cpp
:void printToys(Toys_t toy) { cout << toy. ; cout << " " << toy. << endl; }
3. Реализовать метод вывода информации об игрушках для маленьких детей (до 4 лет)
Toys_t
://вывод инфо об игрушках для маленьких void printToy4(Toys_t toy);
structToys8.cpp
файл:void printToy4(Toys_t toy) { if (toy. <= 4) { printToys(toy); } }
4. Создайте массив объектов.
main.cpp
и внутри функции main
добавьте код для создания массива объектов типа структуры:
Toys_t toys[4];
5. В основной программе создайте не менее 4 элементов массива, отобразите информацию по этим игрушкам.
toys[0]."car"; toys[0]. = 3; toys[1]. = "doll"; toys[1]. = 4; toys[2]. = "crocodile"; toys[2]. = 6; cout << "Введите название: " << endl; cin >> toys[3]. ; cout << "Введите возраст: " << endl; cin >> toys[3]. ;=
printToys
, и информацию об игрушках для маленьких детей: cout << "Информация:\n "; for (auto x: toys) printToys(x); cout << "Информация об игрушках для маленьких:\n "; for (auto x : toys) printToy4(x); system("pause");
Выполнить: Создать структуру Tours_t
для хранения информации об экскурсиях по тур. поездкам. Добавьте поля, чтобы ввести следующую информацию о туре: название страны, количество человек, количество дней, стоимость поездки по стране (double). Создайте метод для вывода данных, а также метод для расчета стоимости поездки на основе формулы: количество людей * количество дней * тариф по стране. Создайте массив объектов tours
. Для элементов массива должны вызываться оба метода.
Указание: Сигнатура метода printTourCost
должна быть следующей:
// возвращает результат вычисления (double) double printTourCost(Tours_t tour); |
Примерный вывод:
Task 2: информация: Sweden: people 2, days 3, rate 155.5 the price is 933 Norway: people 1, days 3, rate 265.5 the price is 796.5 UK: people 2, days 4, rate 455.5 the price is 3644
[Solution and Project name: Lesson_9task2
, file names L9Task2main.cpp
, L9Task2imp.cpp
, L9Task2.h
]
Выполнить: Создать структуру Movies_t
для хранения данных о фильмах. Добавьте следующие свойства (поля) структуры:
- название фильма - типа string
- год выпуска (целочисленный тип)
Создайте массив фильмов (попросите пользователя ввести информацию об одном фильме). Реализуйте метод для вывода информации об объектах, используйте указатель на эти объекты и оператор стрелку.
Примерный вывод:
введите название: >>Matrix введите год: >>1999 Краткая информация: Matrix 1999 Titanic 1997
✍ Алгоритм:
- Структура должна быть определена в заголовочном файле. Откройте
structMovies9.h
и добавьте код для определения структуры с двумя свойствами (полями) -title
иyear
:
struct Movies_t { string title; int year; };
Movies_t
для вывода информации. Добавьте код после структурыvoid printMovies(Movies_t* movie, int n);
structMovies9.cpp
:void printMovies(Movies_t* array, int n) { Movies_t *ptr = array; for (int i = 0; i < 2; i++) { cout << ptr->title << " " << ptr-> << endl; ptr++; } }
*ptr
- указатель, указывающий на местоположение, на которое указывает *array
(нулевой элемент).Стрелочный оператор (
->
) - это оператор разыменования, который используется исключительно с указателями на объекты, имеющие поля. Этот оператор служит для доступа к элементу объекта непосредственно по его адресу.
mainMovies9.cpp
и в функции main
добавьте код для создания массива объектов структурного типа и указатель, указывающий на этот массив:Movies_t amovie[3]; Movies_t * pmovie; pmovie = amovie;
amovie[1]."Titanic"; amovie[1]. = 1997; cout << "Введите название: "; cin >> pmovie-> ; cout << "Введите год: "; cin >> pmovie->y ;=
printMovies
: cout << "\nИнформация:\n"; printMovies(amovie, 2); system("pause");
Выполнить: Создать структуру Employee_t
для хранения информации о сотрудниках какой-либо компании. Добавьте поля для реализации следующей информации о сотрудниках: имя, отдел, телефон, зарплата. Создайте массив сотрудников. Реализуйте метод для вывода информации об объектах, используйте указатель на эти объекты и стрелочный оператор. Также создайте метод smallSalary для вывода информации о сотрудниках, зарплата которых составляет менее 30 000 рублей.
Указание: Заголовок методы smallSalary
:
void smallSalary(Employee_t* array, int n); |
Примерный вывод:
Task 3: Информация: Ivanov: бухгалтерия, t. 233-33-33, 28000 roubles Petrov: ИТ-отдел, t. 233-33-34, 45000 roubles Sidorov: клиентский отдел, t. 233-33-35, 25000 roubles с зарплатой менее 30 000 рублей: Ivanov Sidorov
[Solution and Project name: Lesson_9task3
, file names L9Task3main.cpp
, L9Task3imp.cpp
, L9Task3.h
]