183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
1

Структуры

17.10.2013, 19:54. Показов 2627. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Может кто объяснить что такое структуры(что означают записанные переменные в структуре и после фигурных скобок, перед ; и т.д.) и зачем в них ->? Читаю Дейтела, но так и не понял. В интернете понятного разъяснения не нашел.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2013, 19:54
Ответы с готовыми решениями:

Помещение структуры в вектор, удаление структуры, изменение элементов структуры
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный...

Динамические структуры данных. Программа ввода в структуры и вывода информации из неё.
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об...

Функция внутри структуры использует указатель, как поле этой структуры
Коротко, есть класс A, описан в файле A_class.h ну и реализованы функции в A_class.cpp, есть файл...

Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры)
Есть у меня вот такая структура, например struct Subject { int cost; int Volume; }; Потом...

17
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
17.10.2013, 20:31 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
 
struct car
{
    std::string make;
    std::string model;
    int year_of_production;
};
 
int main()
{
    car my_car_obj {"Honda", "Accord", 2008};
 
    std::cout << "Access from object:\n";
    std::cout << my_car_obj.make << std::endl
              << my_car_obj.model << std::endl
              << my_car_obj.year_of_production << std::endl;
 
    car *my_car_ptr = &my_car_obj;
    std::cout << "\nAccess from pointer to object:\n";
    std::cout << my_car_ptr->make << std::endl
              << my_car_ptr->model << std::endl
              << my_car_ptr->year_of_production << std::endl;
    return 0;
}
0
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
17.10.2013, 20:54 3
допустим, у нас есть автомобиль.
у автомобиля есть такие атрибуты как марка, модель, цвет, год издания, максимальная скорость и другие
и чтобы все эти значения "держать" в одном месте, можно использовать одну структуру

назовем ее car:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// автомобиль
struct car
{
    char    make[20];   // марка
    char    model[20];  // модель
    char    color[20];  // цвет
    int     year;       // год издания
    int     speed;      // скорость
};
 
 
 
int main()
{
    car     *BMW = new car;     // создали новый автомобиль
    
    // теперь нужно установить его характеристики
    // для доступа к ним используется знак ->, т.к. BMW это указатель
    strcpy(BMW->make, "BMW");
    strcpy(BMW->model, "MINI Cooper Cabrio");
    strcpy(BMW->color, "red");
    BMW->year = 2013;
    BMW->speed = 200;
}
1
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
17.10.2013, 22:27  [ТС] 4
Olivеr, _,
C++
1
2
3
4
5
6
struct car
{
    std::string make;
    std::string model;
    int year_of_production;
}a[20], i, k;
Для чего нужны последние переменные? И еще я спрашивал про ->
0
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
17.10.2013, 23:22 5
Цитата Сообщение от Ryuk Посмотреть сообщение
Для чего нужны последние переменные?
a[20] - массив из 20-ти car, i и k - переменные типа car
Цитата Сообщение от Ryuk Посмотреть сообщение
И еще я спрашивал про ->
используется для доступа к членам класса через указатель на объект. в примере есть
1
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
17.10.2013, 23:34  [ТС] 6
Olivеr, как может быть переменная типа car?
0
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
18.10.2013, 08:49 7
Ryuk, car - это тип переменной (как char, int, float и другие) но только это собственный тип переменной, определенный программистом

C++
1
2
3
4
5
6
struct car
{
    std::string make;
    std::string model;
    int year_of_production;
}a[20], i, k;
a[20] - это массив из 20 элементов, каждый из которых имеет тип car. другими словами 20 автомобилей
i и k - это отдельные переменные типа car (не массивы)

для доступа к полю первого авто в массиве используется оператор точка:

a[0].make = "Honda"; // для первого автомобиля установили его марку

но если у нас указатель, то для доступа к членам нужно использовать стрелку

car *avto = new car;
avto->make = "Honda";

Добавлено через 7 минут
Цитата Сообщение от Ryuk Посмотреть сообщение
Olivеr, _,
C++
1
2
3
4
5
6
struct car
{
    std::string make;
    std::string model;
    int year_of_production;
}a[20], i, k;
Для чего нужны последние переменные? И еще я спрашивал про ->
тут смысл вот какой. переменные можно определять сразу же после закрывающей фигурной скобки через запятую, а можно и отдельно, в другой части программы
C++
1
2
3
4
int main()
{
   car  a[20], i, k;
}
а результат практически один и тот же. в первом случае эти переменные будут глобальными, а во втором локальными (видны только в main)

про -> уже ответили

Добавлено через 3 минуты
тут можно просто запомнить, что есть два типа переменных: обычные и указатели. для обычных переменных для доступа к членам структуры используется оператор точка:
C++
1
2
car avto;
avto.make = "Honda";
но а если это указатель, то используется стрелка:
C++
1
2
car *avto;  // указатель
avto->make = "Honda";
0
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
18.10.2013, 14:44  [ТС] 8
_,
C++
1
2
3
4
5
struct car
{
    int     year;       // год издания
    char color;      // цвет по первой букве
}a;
Что будет, если я запишу в a цифры, и если я запишу букву?
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
18.10.2013, 14:52 9
Цитата Сообщение от Ryuk Посмотреть сообщение
Что будет, если я запишу в a цифры, и если я запишу букву?
как именно запишешь?

так?
C++
1
2
a.year = цифры;
a.color = буква;
будет присвоение соответствующих полей структуры car объекта 'a', как при обычном присвоении переменных
1
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
18.10.2013, 15:07  [ТС] 10
Raali, нет, я не могу в main записать просто a = .... без оператора "точка"?
0
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
18.10.2013, 15:13 11
Цитата Сообщение от Ryuk Посмотреть сообщение
Что будет, если я запишу в a цифры, и если я запишу букву?
в саму a невозможно ничего записать. a - это составной тип и состоит из полей year и color

C++
1
a = 5; // неправильно!
C++
1
2
a.year = 2000; // правильно. указали что год издания авто 2000
a.color = 'g';  // тоже правильно. здесь указали цвет автомобиля (g - green - зеленый)
Добавлено через 2 минуты
Цитата Сообщение от Ryuk Посмотреть сообщение
я не могу в main записать просто a = .... без оператора "точка"?
нет, не можешь
1
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
18.10.2013, 15:19 12
Цитата Сообщение от Ryuk Посмотреть сообщение
я не могу в main записать просто a = .... без оператора "точка"?
давайте пойдем от обратного... зачем нам нужна именно структура?
для того, чтобы мы не писали так -
C++
1
2
3
4
int car1_year = 1024;
char car1_color = 1;
int car2_year = 5000;
char car2_color = 3;
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
18.10.2013, 15:35 13
Цитата Сообщение от Raali Посмотреть сообщение
зачем нам нужна именно структура
Структура - это способ упаковки.

Зашли, к примеру, в супермаркет, набрали всего полную тележку, подъехали к кассе и предъявили покупки.

Ваша тележка - это структура. Товары в ней - элементы структуры. Если однородного товара несколько штук - это массив элементов. Если есть товары в упаковке - это вложенная структура.

. и -> - это способы адресации элементов структуры (непосредственная и косвенная).

Когда берете товар из своей тележки - это . (непосредственная)

Когда говорите - это из тележки того парня - это -> (косвенная).
0
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
18.10.2013, 15:38 14
Ryuk, напишу проще))
вообщем есть автомобиль. что мы о нем должны знать? год издания и цвет (конечно можно добавить еще кучу дополнительных атрибутов) но в данный момент нам нужны только год издания и цвет.

мы объявляем такую структуру:
C++
1
2
3
4
5
struct car
{
    int     year;       // год издания
    char color;      // цвет по первой букве
};
дальше в программе мы можем создать переменную a вот таким способом:
C++
1
2
3
4
int main()
{
   car a;  // автомобиль
}
создали. что теперь?... нужно указать какого года выпуска автомобиль a и какой у него цвет
C++
1
2
a.year = 2000;
a.color = 'g';
все! у нас есть машина и мы кое-что знаем о ней

чтобы напечатать год издания, то через точку . можем получить любой атрибут нашего авто
C++
1
cout << a.year;  // год издания
но потом в другой части программы можно вывести цвет авто
C++
1
cout << a.color;

конечно, можно обойтись и без структур, объявить несколько переменных. одна переменная будет указывать год издания, другая цвет. как ответил Raali в предыдущем посте. но в этом одни только минусы. во-первый количество этих переменных будет много. представь, если для машины будем указывать не два атрибута а 10 или 20. (год издания, марка авто, цвет, количество дверей, количество сидений, цена, тип двигателя ....) и для каждого атрибута должны определить отдельную переменную. а если автомобиль не один а 100. что тогда? бессчетное количество никому ненужных переменных. а так всё хранится в одной структуре! красота)
0
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
18.10.2013, 22:02 15
Цитата Сообщение от Ryuk Посмотреть сообщение
_,
C++
1
2
3
4
5
struct car
{
    int     year;       // год издания
    char color;      // цвет по первой букве
}a;
Что будет, если я запишу в a цифры, и если я запишу букву?
C++
1
2
3
4
5
6
7
8
9
10
11
struct car
{
    int     year;       // год издания
    char color;      // цвет по первой букве
}a;
 
int main() 
{
    a = {2008, 'b'};
    return 0;
}
0
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
18.10.2013, 22:20  [ТС] 16
_, не могли бы вы еще помочь с данной темой, т.к. думаю вы человек знающий и имеющий способность хорошо объяснять?
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
18.10.2013, 22:27 17
Меня тоже мучает такой же вопрос.Если я все правильно понял в программе вместо кучи разных переменных можно создать одну структуру и использовать ее как эти переменные т.е передавать в функции подставлять в формулы короче производить все необходимые действия как с обычными переменными.Или я не правильно понял.
0
54 / 54 / 37
Регистрация: 05.09.2013
Сообщений: 1,864
19.10.2013, 04:24 18
Цитата Сообщение от Genn55 Посмотреть сообщение
Меня тоже мучает такой же вопрос.Если я все правильно понял в программе вместо кучи разных переменных можно создать одну структуру и использовать ее как эти переменные т.е передавать в функции подставлять в формулы короче производить все необходимые действия как с обычными переменными.Или я не правильно понял.
Да, почитайте про классы в C++.
0
19.10.2013, 04:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2013, 04:24
Помогаю со студенческими работами здесь

Вывод структуры, строка как элемент структуры
Описать структуру с именем TRAIN, содержащую следующие поля: □ название пункта назначения;...

Исследование структуры FILE или: что вообще можно выудить из этой структуры, указатель на которую мы получаем при открытии файла?
Ничего нельзя. Итак, новичкам напомню, что после выполнения кода FILE* f= fopen (&quot;file.txt&quot;,...

Оператор if и структуры. Возвращение структуры из функции
Здравствуйте, имеется такая вот функция. void InputStructEmployee (int StructSize) { ...

Структуры. Вызов данных структуры по указателю. с++
Условие задачи: Помогите, пожалуйста, с как реализовать печать вообще не представляю.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru